2013-02-21 2 views
0

Я столкнулся с очень странной ситуацией с функцией file_exists. Хостинг-компания заявила, что их php был настроен в режиме CGI вместо режима PHP. ниже приведен код. Он проверяет наличие файла test.txt в папке с данными на лету в течение 50 секунд или около того при загрузке страницы, содержащей код. Если файл найден, отобразите «Файл существует» и выйдет из цикла while. Если файл не найден за 50 секунд, отображается «Файл не существует» и прерывает цикл, завершая загрузку страницы.Очень странный PHP file_exists issue

Странная вещь 1: она не работала должным образом, может найти файл только при первой загрузке страницы, когда файл есть. Он продолжает отображать «Файл существует» даже после удаления test.txt при обновлении страницы. Если test.txt вообще отсутствует в папке с данными, он отображает «файл не существует» даже после того, как я верну тестовый файл test.txt в папке.

Странная вещь 2: Если я поставил более крупный файл, скажем более 170 КБ, он выглядит хорошо, небольшие файлы, хотя, тем не менее, особенно до 40 байт. Я пробовал много разных способов проверить существование файла, включая абсолютный путь, все равно не повезло.

Спасибо за любую подсказку!

загрузка страницы ...

$counter= 1; 

while ($counter++) { 

    sleep(5); 

    if (file_exists("data/test.txt")) { 
    echo "File exists"; 
    break; 
    } 

    if ($counter>10){ 
    echo "File does not exist"; 
    break; 
    } 

} 

ответ

2

PHP кэширует результаты. Используйте clearstatcache(); перед использованием file_exists().

+0

еще не хорошо, это может быть проблемой в режиме CGI? любой другой способ сделать проверку? благодаря! – user1892879

0

Поскольку вы проверяете существование этого файла несколько раз в цикле, вам может потребоваться рассмотреть вопрос о кешировании как проблеме.

Взятые из the documentation из file_Exists() -

Примечание: Результаты этой функции кэшируются. См. clearstatcache() для более подробной информации.

Может быть, вы должны попытаться модифицировать сценарий на что-то вроде этого -

while ($counter++) { 
    sleep(5); 
    clearstatcache(); 
    if (file_exists("data/test.txt")) { 
    echo "File exists"; 
    break; 
    } 
    ... 
} 
+0

немного лучше после добавления clearstatcache(), но все равно ничего хорошего. Сначала загружаю страницу, когда загружается страница, я помещаю файл test.txt в папку с данными, он не может быть найден через 50 секунд. если обновить пару раз, он нашел файл. Код работал хорошо с некоторыми другими услугами хостинга, может ли это быть проблемой режима CGI? – user1892879

+0

@use - Я не слишком разбираюсь в различиях, поэтому не могу сказать точно ... Но если единственное изменение - это хостинг, и единственное отличие - режим CGI, возможно, в этом и проблема. .. – Lix