2011-02-05 3 views
0

Ну, я начинаю ненавидеть PHP. У меня есть файл, который отлично читается (is_readable возвращает true), имеет разрешение 777, обычно открывается fopen, но file_get_contents возвращает false. код выглядит следующим образом:file_get_contents возвращает false в существующий читаемый файл

<?php 
error_reporting(-1); 
$handle = fopen("tres.txt","w+"); 
try{ 
$cnt = file_get_contents("/var/www/tres.txt"); 
} 
catch(Exception $err){ echo $err->getMessage(); } 
if ($handle) echo "Allright!", "<br />"; 
if ($cnt) echo "Good"; 
if(is_readable("/var/www/tres.txt")) echo " Is"; 
?> 

И хотя я включил все варианты вывода сообщений об ошибках, которых я знал, никаких ошибок не поймают, и что сводит меня с ума. Изменение пути к файлу «./tres.txt» в файле «tres.txt» также не влияет. Где может быть проблема?

P.S. Он запускается на PHP5 и apache2.

+2

Вы уже открыли его с помощью fopen, затем попробуйте открыть его снова с помощью file_get_contents ... возможно, блокируя его, потому что он уже используется. Прочтите его содержимое, ТОГДА вы можете открыть его для записи. –

+1

Установлен ли 'display_errors'' on'? –

+0

Не проблема, но 'if' должен был бы проверить на' strlen ($ cnt) 'скорее. – mario

ответ

5

fopen("tres.txt","w+"); усекает файл. Сразу после этого это не имеет смысла.

$cnt скорее всего не является ложным, а пустая строка '', которая считается false в булевом контексте.

if ($cnt !== false) echo "Good";, вероятно, выводит «Хорошо».

+0

Но 'file_get_contents' должен возвращать пустую строку, а не false. – singles

+0

Он делает. но пустая строка является ложной в булевом контексте. Попробуйте 'var_dump ($ cnt);' – ThiefMaster

+0

Да, file_get_contents должен возвращать false, если он не может прочитать файл (файл не существует или заблокирован файловой системой), но возвращает пустую строку, если файл пуст. Поэтому ThiefMaster опубликовал правильный ответ с очень хорошим объяснением. – ludesign

4

При использовании file_get_contents вы не должны использовать fopen. Удалить fopen.

+1

Тем более, что его вызов fopen * усекает * файл. – ThiefMaster

+0

Вы правы, я написал об этом, потому что код лишний. – singles

Смежные вопросы