2010-02-25 44 views

Trả lời

20

đây là một cách

unlink("/path/that/does/not/exist"); 
print_r(error_get_last()); 

Xem Error handling để biết thêm chi tiết

+0

Tôi muốn xử lý lỗi này theo lập trình, nhưng hiện tại tôi chỉ đăng nhập bằng cách sử dụng đề xuất này: - if (@unlink ('xyz.abc') === false) {$ e = error_get_last (); trigger_error ($ e ['message'], E_USER_NOTICE); } –

2

Tôi không nghĩ rằng có thể lấy lại bất kỳ mã lỗi nào do hệ thống phát hành. Đó có thể là do thực tế rằng PHP được cho là có thể di chuyển được và các hệ điều hành khác nhau có các phương pháp báo cáo lỗi khác nhau.

Tất nhiên, bạn có thể thực hiện exec('rm ....') và nhận lại mức lỗi nhưng điều đó không thực sự thuận tiện và làm cho ứng dụng của bạn phụ thuộc vào quyền exec().

Nếu không, nếu bạn thực sự, thực sự cần điều này, chỉ có một cách giải quyết rất khó khăn nảy sinh trong đầu: Tạo một custom error handler function để tìm nạp lý do cho sự thất bại từ cảnh báo unlink ném - ví dụ: kiểm tra "Quyền bị từ chối" hoặc chỉ tìm nạp toàn bộ thông báo lỗi.

Tạo hàm bao bọc xung quanh unlink đặt và đặt lại trình xử lý lỗi. Một cái gì đó như thế này:

function my_unlink($file) 
{ 
    set_error_handler("my_error_handler"); 
    unlink($file); 
    restore_error_handler(); 

} 

bạn sẽ bị trôi dạt.

Nếu ai biết một giải pháp tốt hơn - Tôi muốn được quan tâm để nghe về nó, quá ....

1

này là không thể, tôi sợ. Đây là mã C xử lý unlink trong php 5.3.

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

như bạn có thể thấy, errno không được trả lại và không có cách nào để truy cập sau này.

Đã có một bugreport về điều này, nhưng dường như không thu hút được quá nhiều sự chú ý. ;)

Xem thêm điều này discussion

Các vấn đề liên quan