Как вы можете уловить ошибку «отказа в разрешении» при использовании fopen в PHP без использования try / catch?

Я только что получил сообщение об ошибке для одного из моих сценариев относительно отказа в разрешении, когда скрипт пытается открыть новый файл с использованием режима «w» (запись). Вот соответствующая функция:

function writePage($filename, $contents) { $tempfile = tempnam('res/', TINYIB_BOARD . 'tmp'); /* Create the temporary file */ $fp = fopen($tempfile, 'w'); fwrite($fp, $contents); fclose($fp); /* If we aren't able to use the rename function, try the alternate method */ if (!@rename($tempfile, $filename)) { copy($tempfile, $filename); unlink($tempfile); } chmod($filename, 0664); /* it was created 0600 */ } 

Вы можете видеть, что в третьей строке я использую fopen. Я хотел бы получить разрешение на отклонение ошибок и обрабатывать их самостоятельно, а не печатать сообщение об ошибке. Я понимаю, что это очень просто, используя блок try / catch, но переносимость – это большой пункт продажи моего сценария. Я не могу пожертвовать совместимостью с PHP 4 для обработки ошибки. Пожалуйста, помогите мне поймать ошибку разрешения без печати каких-либо ошибок / предупреждений.

Related of "Как вы можете уловить ошибку «отказа в разрешении» при использовании fopen в PHP без использования try / catch?"

Я думаю, вы можете предотвратить ошибку, используя это решение. Просто добавьте дополнительную проверку после строки tempnam

 $tempfile = tempnam('res/', TINYIB_BOARD . 'tmp'); # Since we get the actual file name we can check to see if it is writable or not if (!is_writable($tempfile)) { # your logic to log the errors return; } /* Create the temporary file */ $fp = fopen($tempfile, 'w');