Получайте значимую информацию, когда fopen () терпит неудачу (PHP / suPHP)

Как получить что-то более значимое, чем «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));