Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель 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($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){

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

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