Получить значимую информацию при сбое 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));