Получить значимую информацию при сбое fopen () (PHP / suPHP) - PullRequest
9 голосов
/ 05 ноября 2011

Как получить что-то более значимое, чем «ЛОЖЬ», когда я не могу открыть файл.

$myFile = "/home/user/testFile.txt"; 
$fh = fopen($myFile, 'w') or die("can't open file");

Когда я использую оператор die, can't open file возвращается клиенту, и это почти бесполезно. Если я удаляю его, ошибка не возникает. Если я вернусь $fh, это будет FALSE. Я пробовал как локальное имя файла, так и абсолютное имя файла. Мой index.html файл находится в одной из подпапок моей дырочной папки. Кроме того, я использую suPHP с папкой, которую пытаюсь записать, с разрешением 0755 (suPHP требует это для всех папок).

Как выяснить, почему возникла проблема, или хотя бы запросить ее, прежде чем пытаться открыть файл.

Ответы [ 2 ]

8 голосов
/ 05 ноября 2011

Используйте error_get_last (), чтобы перехватить (подавленные) ошибки в php:

$f = @fopen("x", "r") or die(print_r(error_get_last(),true));
6 голосов
/ 05 ноября 2011

fopen должен поднять E_WARNING, если он потерпит неудачу.См. error_get_last или set_error_handler (*), чтобы поймать его.Кроме этого вы можете использовать file_exists и is_readable , чтобы проверить, отсутствует ли файл или есть другая (вероятно, связанная с разрешениями) проблема.

(*) я считаюРекомендуется всегда устанавливать обработчик ошибок, который превращает все ошибки PHP в исключения.

...