質問

(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)

つまり、実際の、有用で、意味のある、エラーメッセージ;-)

他のヒント

@記号を削除します。

@記号はエラーメッセージを抑制するため、関数が通常与えるエラーを抑制しています。

エラーサプレッサーを削除します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top