Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Дозапись в файл
 
 автор: Лена   (08.11.2009 в 11:04)   письмо автору
 
 

Обнаружила баг, не знаю, как исправить.
Скрипт должен записать строку в файл.
Причем если в этом файле есть строка {$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($fpLOCK_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 ($fpfilesize ($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($fpLOCK_UN);
        
fclose($fp);
    }

?>

Не срабатывает это условие: if($bi != $j && $ff[$r] != $sb){

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования