2012-10-11 9 views
5

Ich verwende unlink auf meiner PHP-Seite. In einigen Situationen kann die Berechtigung zum Löschen des Verzeichnisses verweigert werden. StattPHP - error_get_last Methode für Warnungen?

von mit

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

auf der gerenderten Seite auftauchen, ist es für mich eine Möglichkeit, ein „warning_get_last“ zu tun, das die letzte gegebene Warnung erfassen, so dass ich ausgeben kann es schön? Oder enthält error_get_last diese?

Ich weiß, dass ich die Warnungen mit @unlink unterdrücken kann, und das kann ich auch, wenn unlink false zurück zu überprüfen, um zu sehen, aber ich möchte die Fehlermeldung wissen, dass es zusammen mit ihm wenn geht nicht fehl.

Antwort

7

Verwenden Sie error_reporting(0), um die Warnung oder Fehler in der gerenderten Seite nicht anzuzeigen. Es wird immer noch in Ihren Server-Fehlerprotokollen angezeigt und Sie können weiterhin error_get_last() verwenden, um den letzten Fehler zu erhalten.

Sie können es testen mit this out:

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

'error_reporting (E_ERROR | E_WARNING) '- bewirkt, dass error_get_last Fehler oder Warnungen anzeigt? Ich kann @ verwenden, um zu verhindern, dass die Warnungen angezeigt werden. Ich brauche nur einen Weg, um die Nachricht von ihnen zu bekommen. –

+0

Ich habe die Antwort für Klarheit aktualisiert. – Trott

+0

Ich habe die Antwort aktualisiert, aber lassen Sie mich wissen, wenn ich nur die Frage oder etwas falsch verstehe. – Trott

1

Sie Ihre eigene Fehlerbehandlung gesetzt zu schreiben, damit sie kurz vor dem Anruf, und kehrt danach wieder normal.

Verwenden Sie set-error-handler, um die Fehlerbehandlungsroutine zu aktivieren, in einer globalen Variable zu speichern (das ist die einfachste - vielleicht nicht die meiste "richtige") und anzuzeigen, wenn ein Fehler aufgetreten ist. Oder Benutzer error_get_last() (wie von Trott vorgeschlagen).

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; 
} 
0

Ich verstehe nicht, warum das Folgende schlimmer ist als die 2 anderen Vorschläge; in der Tat würde ich sagen, dass es besser ist, weil es kürzer ist als Robbie Antwort und einen globalen Effekt im Gegensatz zu Trott Antwort nicht hat:

$ok = @unlink(...); 
if ($ok === FALSE) 
    throw new Exception(error_get_last()['message']); 

Ausgabe bei der Ausführung:

PHP Fatal error: Uncaught exception 'Exception' with message 'unlink(foobar.txt): No such file or directory' in /Users/erik/code/test.php:5 
Stack trace: 
#0 {main} 
    thrown in /Users/erik/code/test.php on line 5 
Verwandte Themen