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

Форум PHP

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

 

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

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

тема: Чтение несуществующего файла в реальной директории
 
 автор: Владимир55   (26.02.2008 в 11:31)   письмо автору
 
 

В директории формируются текстовые файлы, которые я читаю так:

     $dir = opendir ("ref/.");
    readdir ($dir);
    readdir ($dir);
    while ( $file = readdir ($dir))
    {
        $sod = @file_get_contents ("ref/" . $file); 
        echo "<br>Файл  $file Содержимое $sod";
    }
    closedir ($dir);


При этом на сервере обнаруживается безымянный файл .txt, причем содержимое этого файла меняется со временем. Если же заглянуть в папку по ftp, то там этого "безымянного" файла я не вижу.

Как это объяснить?

P.S. Из логики работы скрипта, безымянный текстовый файл там появиться может. Но мне надо непременно отловить момент его появления и первоначальную информацию, так что меня больше всего интересует, почему я этот файл по ftp не вижу?!

   
 
 автор: zavragnov   (26.02.2008 в 12:58)   письмо автору
 
   для: Владимир55   (26.02.2008 в 11:31)
 

А какое содержимое этого файла, помойму это у вас директория отлавливается.

Я обычно создаю вот такие конструкции, чтобы исключить директории.

<?php
while ( $selfilemod readdir ($mdir)) { 
    
//if (( $selfilemod != ".") && ($selfilemod != "..")) {
    
if (( $selfilemod != ".") && ($selfilemod != "..")  && preg_match("/php|html|htm/i",strrchr($selfilemod".")))    { //gif|bmp|jpg|png|jpeg|zip|swf|pdf|doc|txt|xls 
        
$datamod file ($dirmod.$selfilemod);
.......................
.......................
?>

   
 
 автор: AVS   (26.02.2008 в 12:59)   письмо автору
 
   для: Владимир55   (26.02.2008 в 11:31)
 

Я вот только не пойму: зачем перед циклом дважды читать содержимое директории?


 $dir = opendir ("ref/."); 
    while ( $file = readdir ($dir)) 
    { 
        $sod = @file_get_contents ("ref/" . $file);  
        echo "<br>Файл  $file Содержимое $sod"; 
    } 
    closedir ($dir);


А где код, который создает файлы? В нем вероятно ошибка.

   
 
 автор: shiva   (26.02.2008 в 16:06)   письмо автору
 
   для: AVS   (26.02.2008 в 12:59)
 

Чтобы указатель чтения пропустил те самые ярлыки "." и ".."

   
 
 автор: mihdan   (26.02.2008 в 14:10)   письмо автору
 
   для: Владимир55   (26.02.2008 в 11:31)
 

В мануале посмотрите

<?
$dir 
opendir ("ref/.");
while (
false !== ($file readdir ($dir))) {
        if (
$file == '.' || $file == '..') continue;
        
$sod = @file_get_contents ("ref/" $file); 
        echo 
"<br>Файл  $file Содержимое $sod";
}
closedir ($dir); 
?>

   
 
 автор: Shiva   (26.02.2008 в 16:07)   письмо автору
 
   для: Владимир55   (26.02.2008 в 11:31)
 

Какая ОС стоит на сервере?

   
 
 автор: Владимир55   (26.02.2008 в 19:00)   письмо автору
 
   для: Shiva   (26.02.2008 в 16:07)
 

Операционка FreeBSD.

Проделал вот такой ненаучный эксперимент.

Создана новая и пустая папка 555.

Запускаем скрипт

    $dir = opendir ("555/.");
    while (false !== ($file = readdir ($dir))) {
        if ($file == '.' || $file == '..') continue;
        $sod = @file_get_contents ("ref/" . $file);
        echo "<br>Файл  $file Содержимое $sod";
    }
    closedir ($dir);


На экране пусто.

Тогда запускаем вот такой скрипт:

    $dir = opendir ("555/.");
    while (false !== ($file = readdir ($dir))) {
        //if ($file == '.' || $file == '..') continue;
        $sod = @file_get_contents ("ref/" . $file);
        echo "<br>Файл  $file Содержимое $sod";
    }
    closedir ($dir);


И на экране ценая куча мусора:
Файл . Содержимое q^ .:х\ ..Т^ zakladka.txt‡ЕНЪ^ ss.ru.txt.txtЂiК! ^.txtр@ЙУ^¤luckytime.ru.txt ®Иmemori.ru.txtaМW^ hghltd.yandex.net.txtЃК6^Tvova.txtђ^@vkontakte.ru.txt ўк
Файл .. Содержимое

Вероятно, какой-то кеш выбрасывается вместо файла с точнкой...

   
 
 автор: Trianon   (26.02.2008 в 19:04)   письмо автору
 
   для: Владимир55   (26.02.2008 в 19:00)
 

какой смысл имена файлов, взятые из списка каталога 555/ , пытаться искать и открывать в контексте каталога ref/ ?

   
 
 автор: Владимир55   (26.02.2008 в 19:25)   письмо автору
 
   для: Trianon   (26.02.2008 в 19:04)
 

Вы правы, это моя ошибка. А если так:


    $dir = opendir ("555/.");
    while (false !== ($file = readdir ($dir))) {
        //if ($file == '.' || $file == '..') continue;
        $sod = @file_get_contents ("555/" . $file);
        echo "<br>Файл  $file Содержимое $sod";
    }
    closedir ($dir);


Выводится:
Файл . Содержимое f^ .:х\ф..
Файл .. Содержимое

Все равно файл с точкой что-то содержит.

   
 
 автор: Trianon   (26.02.2008 в 19:49)   письмо автору
 
   для: Владимир55   (26.02.2008 в 19:25)
 

"файл с точкой" это ссылка на текущий каталог.
Какой смыcл применять к нему file_get_contents ?

Записи "." и ".." не просто так выкидываются при пробеге справочника.
Они не указывают на потомков каталога.

   
 
 автор: Владимир55   (26.02.2008 в 23:09)   письмо автору
 
   для: Trianon   (26.02.2008 в 19:49)
 

Вы правы, спасибо!

Мне долго не удавалось обнаружить источник ошибки, и я начал искать "не там, где потерял, а там, где светлее".

Причина оказалась совсем в другом, и теперь устранена.

Еще раз спасибо!

   
Rambler's Top100
вверх

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