2009-07-30 6 views
9

私は巨大な古い(2001年頃の)PHP Webサービスをデバッグしようとしていますが、ファイルオープンエラーが発生しています。 fopen呼び出しがインクルードされたモジュールに含まれている場合、呼び出し元はファイルを開くことができないが、理由は記録されていないことを記録しています。PHPファイルオープン失敗の理由を出力する方法

実際にオープンを行うコードは次のとおりです。

// Read the file 
    if (!($fp = @fopen($fileName, 'rb'))) { 
    $errStr = "Failed to open '{$fileName}' for read."; 
    break; // try-block 
    } 

のfopenが失敗した理由をどのように見つけることができますか?

答えて

1

グレート答えはすでに@ operatorについて、与えられているが、ここでは有用である可能性がより情報のカップルはどちらかあなたや他の誰かに、です:場合

  • は、デバッグ目的のために、あなたは無効にする必要があります(もしあなたのPHP的な設定によって
  • ^^をコード化され、あなたがうまく設計されていない古いアプリケーションのいくつかの種類を維持しているときに非常に便利です/- もthe manualを参照してください - @ operatorは、あなたがscream extensionインストールすることができますtrack_errorsオプションが有効になっています)を使用すると、$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) 
    

    だから、本物の、便利な、意味のある、エラーメッセージ;-)

    // This file doesn't exist 
    if ([email protected]('/tmp/non-existant-file.txt', 'r')) { 
        var_dump($php_errormsg); 
    } 
    
    // My Apache server doesn't have the right to read this file 
    if ([email protected]('/tmp/vboxdrv-Module.symvers', 'w')) { 
        var_dump($php_errormsg); 
    } 
    

    あなたはこれを取得します:

コードのこの部分を考慮すると

9

@記号を削除します。

@記号はエラーメッセージを抑制します。したがって、通常はエラーが発生しません。