2012-10-11 25 views
5

PHP sayfamda unlink kullanıyorum. Bazı durumlarda, dizini silmek için izin reddedilebilir. Bunun yerine PHP - uyarılar için error_get_last yöntemi?

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

hale sayfasında görünüyorsa sahip, elimden çıktı o güzel son verilen uyarı çekecek "warning_get_last" yapmak için benim için bir yol var, bu yüzden? Yoksa error_get_last içerir mi?

ben @unlink birlikte uyarı bastırmak ve ben de eğer unlink döner sahte görmek için kontrol edebilirsiniz biliyorum, ama başarısız oluyor eğer onunla birlikte gider hata mesajı bilmek istiyorum.

cevap

7

İşlenen sayfadaki uyarıyı veya hatalarını göstermem için error_reporting(0) kullanın. Sunucu hata kayıtlarınızda hala görünecek ve son hatayı almak için hala error_get_last()'u kullanabilirsiniz.

Bu olayda bunu test edebilirsiniz: Kendi hata işleyicisi ayarlamak yazma

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) '- error_get_last'ın hata veya uyarı göstermesine neden olur mu? Uyarıların görüntülenmesini durdurmak için @ 'yi kullanabilirim. Mesajı onlardan almanın bir yoluna ihtiyacım var. –

+0

Açıklık için cevabı güncelledim. – Trott

+0

Cevabı güncelledim, ancak soruyu veya bir şeyi yanlış anlamış olursam haber ver. – Trott

1

, sadece aramadan önce etkinleştirmek ve daha sonra tekrar normale döner.

Hata işleyiciyi açmak için set-error-handler kullanın, bir genel değişkene kaydedin (bu en basit - belki de en fazla değil ") ve bir hata olup olmadığını gösterir. Veya user error_get_last() (Trott tarafından tasnif edildiği gibi).

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

Aşağıdakilerin neden diğer 2 öneriden daha kötü olduğunu göremiyorum; çalıştırdığınızda

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

Çıktı: aslında ben Robbie'nin cevap daha kısa olduğunu ve trött cevabı aksine küresel etkiye sahip olmadığı için daha iyi olduğunu söyleyebilirim

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 
İlgili konular