8

unlinkPHPページで使用しています。場合によっては、ディレクトリを削除するためのアクセス許可が拒否されることがあります。持つ代わりに

Warning: unlink(stuff/New folder) [function.unlink]: Permission denied in ... on line 30

レンダリングされたページに表示されますが、最後に与えられた警告をキャプチャする「warning_get_last」を実行して、それをうまく出力できる方法はありますか? それともerror_get_lastこれらを含みますか?

警告を抑制することができ、false を返す@unlinkかどうかを確認することもできますが、失敗した場合unlinkに付随するエラー メッセージを知りたいです。

4

3 に答える 3

12

error_reporting(0)レンダリングされたページに警告やエラーを表示しないために使用します。サーバーエラーログには引き続き表示されerror_get_last()、最後のエラーを取得するために引き続き使用できます.

これでテストできます:

error_reporting(0);
unlink('some file that does not exist'); // generates a warning
print_r(error_get_last());

EDITED: 後続のコードに影響を与えることに注意してくださいerror_reporting(0)。そのため、エラー表示を抑制したいコードを実行した後、必要なレベルに戻す必要があります。

于 2012-10-11T04:56:36.693 に答える
1

独自のエラー ハンドラを設定し、呼び出しの直前にそれを有効にして、後で通常の状態に戻します。

set-error-handlerを使用してエラー ハンドラーをオンにし、グローバル変数に保存し (これが最も単純で、おそらく最も「正しい」とは言えません)、エラーが発生したかどうかを示します。または、ユーザー error_get_last() (Trott の提案による)。

function myErrorHandler($errno, $errstr, $errfile, $errline) {
    global $lastErrorString;
    $lastErrorString = $errstr;
    return false;
}

// Calling function:
global $lastErrorString;
$lastErrorString=false;
$old_error_handler = set_error_handler("myErrorHandler");
unlink($file);
restore_error_handler();
if ($lastErrorString !== false) {
    echo 'Went wrong: ' . $lastErrorString;
}
于 2012-10-11T05:01:13.620 に答える