質問

mkdir()は正しく機能しています。この質問は、エラーをキャッチすることに関するものです。ディレクトリが存在するときにこれを印刷する代わりに、カスタムログでメッセージにメッセージを書き込ませたいと思います。この例外を作成するにはどうすればよいですか。

警告:mkdir()[function.mkdir]:ファイルが存在する

役に立ちましたか?

解決

カスタムログでメッセージを送信してもらいたいです。

ソリューションは非常に簡単です。 PHPはすでにあなたのためにすべてを持っています:

ini_set('display_errors',0);
ini_set('log_errors',1);
ini_set('error_log','/path/to/custom.log');

またはphp.iniまたは.htaccessの同じ設定
可能な各エラーを手動で記述するよりも良いと思います

このエラーを記録したくない場合(エラーではなくアプリケーションロジックの一部である可能性があるため)、最初にフォルダーの存在を確認できます

if (!file_exists($folder)) mkdir($folder);
else {/*take some appropriate action*/}

他のヒント

エラーメッセージがグローバルに(構成またはランタイム)を抑制することで、エラーメッセージの表示を停止できます。 display_errors function callを次のようにプレフィックスすることにより、設定、またはケースごと @-キャラクター。 (例えば @mkdir('...')).

その後、確認できます error_get_last いつ mkdir 戻り値 false.

エラーログのグローバルルールが適用されます。エラーを手動で記録できます error_log.

詳細については、マニュアルセクションを参照してください エラー処理.

編集:

コメントで示唆されているように、カスタムエラーハンドラーも可能性があり、間違いなくより堅牢です(実装に応じて)が、確かにエレガントなソリューションです。

function err_handler($errno, $errstr) {
    // Ignore or log error here
}

set_error_handler('err_handler');

これにより、明示的にエコーしない限り、エラーメッセージは表示されません。ただし、カスタムエラーハンドラーを使用する場合は注意してください error_get_last 戻ります NULL.

このようなクラスでシステムコール機能を書き換えることができます。

file: system.php

namespace abc;

class System {

    const CAN_NOT_MAKE_DIRECTORY = 1;

    static public function makeDirectory($path) {
        $cmd = "mkdir " . $path;
        $output = \shell_exec($cmd . " 2>&1"); // system call
        if ($output != "") {
            throw new \Exception($output, System::CAN_NOT_MAKE_DIRECTORY);
        }
        return(\TRUE);
    }

}

次に、メソッドを呼び出して例外を傍受できます。

file: index.php

namespace abc;
require 'system.php';

try {
    System::makeDirectory($directoryName);
} catch (\Exception $e) {
    throw new \Exception($e->getMessage(), System::CAN_NOT_MAKE_DIRECTORY);
} 

これで、すべてのシステムエラーをで処理できます try {...} catch(...) {...} finally {...} 通常は。

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