Подскажите с ПХП

12
WhiteFalke
На сайте с 16.09.2007
Offline
184
908

нужен скриптик, который бы делал следующее

Есть файл 1.html он должен его построчно просмотреть, и если строка начинвается с <h1> то в конце строки вставить </h1>

Это сложно сделать?

[Удален]
#1

$new_content = ""; 

$file_name = "путь/имя_файла.html"; // Выбрали файл
@ob_start();
include( $file_name );
$old_content = @ob_get_contents();
@ob_end_clean();
// Прочитали

$report = explode(PHP_EOL,$old_content); //Разбили на строчки
foreach( $old_content as $row )
{
if(stristr($row,"<h1>")) // Нашли строку, содержащую открывающий тег
{
if(!stristr($row,"<h1>")) // Если нет закрывающего
{
$row .= "</h1>" // дописали закрывающий в конец строки
}
}
$new_content .= $row.PHP_EOL; //Собрали новый контент
}
$fh = fopen($file_name, "w");
fwrite($fh, $new_content); // Перезаписали файл.
fclose($fh);
WhiteFalke
На сайте с 16.09.2007
Offline
184
#2
mrFatCat:
$new_content = ""; 

$file_name = "путь/имя_файла.html"; // Выбрали файл
@ob_start();
include( $file_name );
$old_content = @ob_get_contents();
@ob_end_clean();
// Прочитали

$report = explode(PHP_EOL,$old_content); //Разбили на строчки
foreach( $old_content as $row )
{
if(stristr($row,"<h1>")) // Нашли строку, содержащую открывающий тег
{
if(!stristr($row,"<h1>")) // Если нет закрывающего
{
$row .= "</h1>" // дописали закрывающий в конец строки
}
}
$new_content .= $row.PHP_EOL; //Собрали новый контент
}
$fh = fopen($file_name, "w");
fwrite($fh, $new_content); // Перезаписали файл.
fclose($fh);

Сначала выдал ошибку

Parse error: syntax error, unexpected '}' in C:\Program Files\VertrigoServ\www\FC\replase\replase.php on line 19

Подправил в строке поставил ;

После этого выдает такую ошибку

Warning: Invalid argument supplied for foreach() in C:\Program Files\VertrigoServ\www\FC\replase\replase.php on line 12

DyaDya
На сайте с 11.04.2007
Offline
147
#3

Своял надосуге. Хотя возможно задача вами не точно поставлена и нужны доработки. Поэтому аккуратно проверяйте. Сохраняйте результат под новым названием, дабы свой труд не уничтожить ).


<?
$filename="index.html";
$filename_new="index_new.html";

$str="";

$arr_str=file($filename);
$cnt=count($arr_str);

for ($i=0; $i<$cnt; $i++){
$arr_str[$i]=rtrim($arr_str[$i]);//убираем перенос в конце
$str.=$arr_str[$i];
if (strstr($arr_str[$i], "<h1>")){
#в строке есть <h1>, только не проверяем, в начале ли строки этот <h1> :)
$str.="</h1>";//добавляем закрывающий тег. Только не проверяем, есть ли он уже.
}
#перенос добавим, чтобы файл не получился в одну строчку.
$str.="\r\n";
}

#пишем новые данные в файлу
file_put_contents($filename_new, $str);
echo "Файл <b>$filename_new</b> обновлён.";
?>
Выбирайте качественный хостинг (http://vashmaster.ru/informaciya/o_poleznyh_programmah/news83.php) и продвигайте сайты в СЕОПУЛЬТ (http://seopult.ru/ref.php?ref=72b5ed9561fe66a1). А на «SAPE» я в обиде :) Не упрекайте за очепятки, пишу вслепую (http://ergosolo.ru/) и также делаю сайты (http://www.vashmaster.ru/) ;)
[Удален]
#4

$filename='file.txt';

$fHandler=file($filename); //считываем в массив строк

$f1=fopen($filename,"w");

foreach($fHandler as $row=>$string)

{

if (substr($string,"<h1")==$string) // <h1 в начале строки

$string=str_replace("\n","</h1>\n",$string); //перед символом переноса втыкаем закрывающий

fwrite($f1,$string);

}

fclose($f1);

WhiteFalke
На сайте с 16.09.2007
Offline
184
#5

C этой проблемой разобрался.. теперь новая

Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 35 bytes) in C:\Program Files\VertrigoServ\www\FC\replase\replase.php on line 11

gerkon
На сайте с 21.10.2005
Offline
40
#6

Какого размера файл?

C уважением, Андрей. Пользуюсь этим хостингом уже 4 года! (http://www.replay.ru/index.php?part_id=3600) Ведущий манул Pixshock.net (http://www.pixshock.net)
WhiteFalke
На сайте с 16.09.2007
Offline
184
#7

Всем спасибо, разобрался с проблемой :)

По итогу взял такой скрипт

<?


$dir = '1.htm';
$file_array = file($dir);

foreach($file_array as $k => $v) {
if(stristr($v,"<h1>")) {
if(!stristr($v,"</h1>")) {
$file_array[$k] .= '</h1>';
}
}
$file .= $file_array[$k].'
';
}

file_put_contents($dir, $file);

?>

Все работает. А с размером были проблемы из за VertrigoServ, запустил под денвером все сразу ок стало

gerkon
На сайте с 21.10.2005
Offline
40
#8

И всё-таки, если не секрет? Файл очень большой был?

DyaDya
На сайте с 11.04.2007
Offline
147
#9

WhiteFalke, ну тоже скриптик простой и сердитый. Просто </h1> будет на новой строчке оказываться. Хотя это уже мелочь.

I
На сайте с 05.06.2006
Offline
117
#10

Суну свои 5 копеек.

Вот так проще сделать, без циклов, без пыли, без шума :)

В одну строчку можете записать :)


<?php
$filename = '1.html';
file_put_contents( $filename, preg_replace('/\<[h,H]+1\>([\w\d\.\,]*)([\r\n]*)/', '<h1>$1</h1>$2', file_get_contents( $filename ))) ;
?>
Миграция с ISPManager 4 в VestaCP (https://chast.in/copy-users-from-ispmanager-2-vestacp.html) Хостинг серверов, пользуюсь сам (http://vps-server.ru/rp/pl.php?96)
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий