() Çağrısı belirtilen yolda için false döndüren bağlantısını kesmek için, nasıl başarısızlığın nedeni (yani EISDIR, ENOENT, ELOOP vb) ne öğrenebilirim? PHP 5.x redhat linux üzerinde çalışan.
Burada bir yolu
unlink("/path/that/does/not/exist");
print_r(error_get_last());
Error handling daha fazla bilgi için bkz:
Ben sistem tarafından verilen herhangi bir hata kodu (ler) geri almak için mümkün olduğunu sanmıyorum. Belki PHP taşınabilir olması gerekiyordu, ve farklı işletim raporlama hataları farklı yöntemler var olduğu gerçeğine aşağı.
Elbette bir exec('rm ....') yapmak ve geri hata düzeyi olsun ama bu çok taşınabilir değil, ve app exec() haklarına bağlı kılar olabilir.
Eğer gerçekten bu ihtiyaç Aksi takdirde, sadece çok hacky çözüm akla geliyor: Bir custom error handler function that tries to fetch the reason for the failure from the warning unlink atar oluşturma - örneğin, "İzin engellendi" kontrol, ya da sadece tüm hata mesajı getir.
Etrafında sarıcı işlev oluşturmak unlink setleri ve hata işleyicisi yeniden ayarlar. Böyle bir şey:
function my_unlink($file)
{
set_error_handler("my_error_handler");
unlink($file);
restore_error_handler();
}
sen benim drift olsun.
Herkes daha iyi bir çözüm bilen varsa - Ben de, bu konuda duymak ilgi duyarım ....
Bu Korkarım, mümkün değildir. İşte php 5.3 bağlantısını kolları C kodu bulunuyor.
ret = VCWD_UNLINK(url); <-- calls unlink(2)
if (ret == -1) {
if (options & REPORT_ERRORS) {
php_error_docref1(NULL TSRMLS_CC, url, E_WARNING, "%s", strerror(errno));
}
return 0;
}
Gördüğünüz gibi, errno döndü ve daha sonra erişmek için hiçbir yolu yoktur değildir.
Orada bir bugreport bu konuda zaten, ama çok fazla dikkat çekmek için görünmüyor. ;)
Ayrıca bakınız bu discussion