Получить значимую информацию при сбое fopen() (PHP/suPHP)

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

$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 ответа

Решение

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

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

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

$f = @fopen("x", "r") or die(print_r(error_get_last(),true));
Другие вопросы по тегам