|
|
|
| Обнаружила баг, не знаю, как исправить.
Скрипт должен записать строку в файл.
Причем если в этом файле есть строка {$main_content}, нужно записать новую строку после этой строки.
Перед дозаписью нужно проверить: если есть уже эта строка в файле, значит, ее писать не надо.
Строк таких, которые пишутся в файл - много.
Когда у меня дозапись, строка записывается еще раз, даже если она уже есть в файле.
Получается не проходит проверка на существование-несуществование строки.
Скрипт большой, я оставила только то, что касается данной проблемы.
Вот код:
<?php
$sql = "SELECT * FROM area";
$res = mysql_query($sql);
if(!$res) exit("Error in $sql: ". mysql_error());
for($i = 0;$area_t = mysql_fetch_assoc($res);){
$arr_area[] = $area_t['area_id'];
$sql1 = "SELECT * FROM blocks WHERE area_id = " . $area_t['area_id'];
$res1 = mysql_query($sql1);
if(!$res1) exit("Error in $sql1: ". mysql_error());
//записать файлы блоков в шаблон области
$filename = 'templates/theme/default/area/area_' . $area_t['area_id'] . '.tpl';
//если перед нами - область вывода динамического контента(содержит {$main_content}),
//данные про блоки дозаписываем в файл после {$main_content}
if($area_t['area_id'] == 2)
$fp = fopen($filename, "a+") or die('Could not open file_rewrite' . $filename);
else
$fp = fopen($filename, "w") or die('Could not open file_write' . $filename);
flock($fp, LOCK_EX);
for($j = 0;$b_t = mysql_fetch_assoc($res1);){
$bi = $b_t['block_id'];
//если это область вывода динамического контента
if($area_t['area_id'] == 2){
$body = "{include file = 'theme/default/blocks/block_$bi.tpl'}{**}";
eval ("\$body = \"$body\";");
//если дозаписываем файл, сначала надо проверить, записана ли уже такая строка
$fr = fread ($fp, filesize ($filename));
$frs = substr($fr,0,-4); //обрезаем последнее {**}
$ff = explode('{**}',substr($frs,15));
for($r = 0;$r<count($ff);$r++){
//если строка уже в файле есть, то мы ее повторно не пишем
//+надо проверить, чтобы id блока тоже еще не брался
$sb = substr($body,0,-4);
if($bi != $j && $ff[$r] != $sb){
$bi = $j;
fwrite($fp,$body);
}
}
}else{
//любая другая область
$body = "{include file = 'theme/default/blocks/block_$bi.tpl'}";
eval ("\$body = \"$body\";");
fwrite($fp,$body);
}
}
flock($fp, LOCK_UN);
fclose($fp);
}
?>
|
Не срабатывает это условие: if($bi != $j && $ff[$r] != $sb){ | |
|
|