2012-10-11 17 views
5

Sto usando unlink sulla mia pagina PHP. In alcune situazioni, l'autorizzazione può essere negata per l'eliminazione della directory. Invece di averePHP - error_get_last metodo per gli avvisi?

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

visualizzati nella pagina visualizzata, c'è un modo per me di fare un "warning_get_last" che catturerà l'ultima data di avvertimento, così posso uscita piacevolmente? O lo error_get_last include questi?

so di poter sopprimere gli avvertimenti con @unlink e che posso anche controllare per vedere se unlink restituisce false, ma vorrei conoscere il messaggio di errore che va di pari passo con essa se lo fa sicuro.

risposta

7

Utilizzare error_reporting(0) per non mostrare l'avviso o eventuali errori nella pagina visualizzata. Verrà comunque visualizzato nei log degli errori del server e sarà comunque possibile utilizzare error_get_last() per ottenere l'ultimo errore.

È possibile verificare il lavoro svolto con questo:

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) '- causerà error_get_last per visualizzare errori o avvisi? Posso usare @ per interrompere la visualizzazione degli avvertimenti. Ho solo bisogno di un modo per ottenere il messaggio da loro. –

+0

Ho aggiornato la risposta per chiarezza. – Trott

+0

Ho aggiornato la risposta, ma fatemi sapere se sto solo fraintendendo la domanda o qualcosa del genere. – Trott

1

si scrive impostare il proprio gestore degli errori, abilitare appena prima della chiamata, e tornare alla normalità dopo.

Utilizzare set-error-handler per attivare il gestore degli errori, salvare su una variabile globale (che è la più semplice - forse non la più "corretta") e mostrare se c'è stato un errore. O utente error_get_last() (come suggerito da 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; 
} 
0

Non riesco a capire perché le seguenti sono peggio delle altre 2 proposte; in realtà io direi che è meglio perché è più breve di risposta di Robbie e non ha un effetto globale a differenza di risposta di Trott:

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

uscita quando viene eseguito:

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 
Problemi correlati