PHPファイルのオープンに失敗した理由を出力する方法
-
05-07-2019 - |
質問
(2001年頃の)巨大な時代遅れのPHP Webサービスをデバッグしようとしていますが、ファイルを開くことができません。 fopen呼び出しは含まれているモジュール内にあり、呼び出し元はファイルを開くことができなかったが、理由は記録されていないことを記録しています。
実際にオープンを行うコードは次のとおりです。
// Read the file
if (!($fp = @fopen($fileName, 'rb'))) {
$errStr = "Failed to open '{$fileName}' for read.";
break; // try-block
}
fopenが失敗した理由を調べるにはどうすればよいですか?
解決
@演算子についての素晴らしい回答が既に与えられています 、しかし、ここに、あなたまたは他の誰かに役立ついくつかの情報があります:
- デバッグのために
@演算子を無効にする必要がある場合
、スクリーム拡張 -マニュアルも参照してください-うまく設計されていない/コーディングされていない古いアプリケーションをメンテナンスしているときに本当に便利です^^ - PHPの構成に依存(
track_errors
オプションが有効になっています)、$ php_errormsg
を使用して、最後のエラーメッセージを取得します。
このコードを検討する:
// This file doesn't exist
if (!@fopen('/tmp/non-existant-file.txt', 'r')) {
var_dump($php_errormsg);
}
// My Apache server doesn't have the right to read this file
if (!@fopen('/tmp/vboxdrv-Module.symvers', 'w')) {
var_dump($php_errormsg);
}
これを取得します:
string 'fopen(/tmp/non-existant-file.txt) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: No such file or directory' (length=129)
string 'fopen(/tmp/vboxdrv-Module.symvers) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: Permission denied' (length=122)
つまり、実際の、有用で、意味のある、エラーメッセージ;-)
他のヒント
@記号を削除します。
@記号はエラーメッセージを抑制するため、関数が通常与えるエラーを抑制しています。
エラーサプレッサーを削除します。
所属していません StackOverflow