Как получить что-то более значимое, чем «FALSE», когда я не могу открыть файл.
$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 требует этого для всех папок).
Как выяснить, почему возникла проблема или, по крайней мере, запросить ее, прежде чем пытаться открыть файл.
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));