2013-05-25 27 views
5

tôi thành công lấy các trang web vớiLàm thế nào để tránh đào tạo Quản lý lỗi: "Không thể giải quyết tên máy chủ"

file_get_contents("http://www.site.com"); 

Tuy nhiên, nếu url không tồn tại, hoặc không thể truy cập, tôi nhận được

Warning: file_get_contents(http://www.site.com) [function.file-get-contents]: 
failed to open stream: operation failed in /home/track/public_html/site.php 
on line 773 

Có thể echo "Site not reachable"; thay vì lỗi không?

+1

thử '@file_get_contents (...) ':) – migg

+0

Cảm ơn. Tuy nhiên, tôi đã đọc ở đâu đó mà tôi không nên sử dụng nó bởi vì nó không phải là một cách tốt. – user198989

+0

Câu hỏi trùng lặp: http://stackoverflow.com/questions/272361/how-can-i-handle-the-warning-of-file-get-contents-function-in-php. –

Trả lời

7

Bạn có thể sử dụng silence operator@ cùng với $php_errormsg:

if(@file_get_contents($url) === FALSE) { 
    die($php_errormsg); 
} 

Trường hợp @ ngăn chặn các thông báo lỗi, nội dung tin nhắn sẽ có sẵn cho đầu ra trong $php_errormsg

Nhưng lưu ý rằng $php_errormsg bị vô hiệu hóa bởi mặc định. Bạn sẽ phải bật track_errors. Vì vậy, thêm ở phía trên cùng của mã của bạn:

ini_set('track_errors', 1); 

Tuy nhiên có một cách mà không phụ thuộc vào lỗi theo dõi:

if(@file_get_contents($url) === FALSE) { 
    $error = error_get_last(); 
    if(!$error) { 
     die('An unknown error has occured'); 
    } else { 
     die($error['message']); 
    } 
} 
2

này nên làm việc:

@file_get_contents("http://www.site.com"); 

Các @ ngăn chặn cảnh báo và lỗi được xuất bởi PHP. Bạn sẽ phải đối phó với một phản ứng trống rỗng mình sau đó.

0

Bạn có thể tắt cảnh báo trong PHP:

Turn off warnings and errors on php/mysql

Xem trong tài liệu:

http://il1.php.net/manual/en/function.file-get-contents.php

Return Values: The function returns the read data or FALSE on failure.

hoặc ghi @, trước khi chức năng, cho tránh để xem lỗi:

@file_ge t_contents (...

+0

Hmm, nhưng lỗi luôn là cách tốt để xử lý vấn đề, chỉ cái này là kinh tởm đối với tôi. – user198989

+0

Nếu yêu cầu không thành công có thể có nhiều vấn đề.Cách tốt hơn để làm việc trên phần mở rộng PHP - CURL, nếu bạn muốn biết chính xác điều gì xảy ra, sau khi yêu cầu. - Có thể yêu cầu DNS không thành công - Trang sai 404, 501 - Thời gian chờ của máy chủ. Dù sao bạn nhận được FALSE, nếu yêu cầu sai. Không chắc chắn, nếu nó cần phải làm hơn ngoại lệ .. Tốt hơn anyway trong máy chủ sản xuất để vô hiệu hóa cảnh báo. – CETb

6

tôi sẽ perfer để kích hoạt ngoại lệ thay vì thông báo lỗi:

function exception_error_handler($errno, $errstr, $errfile, $errline) { 
    // see http://php.net/manual/en/class.errorexception.php 
    throw new ErrorException($errstr, $errno, 0, $errfile, $errline); 
} 

set_error_handler("exception_error_handler"); 

Bây giờ bạn có thể bắt lỗi như thế này:

try { 
    $content = file_get_contents($url); 
} catch (ErrorException $ex) { 
    echo 'Site not reachable (' . $ex->getMessage() . ')'; 
} 
+0

Hãy thử bắt là hoàn hảo :) –

+1

Nhưng bạn sẽ gặp rắc rối sâu với việc xử lý lỗi như thế này – migg

+0

'Làm việc với @ thực sự có thể được coi là sai' LOL: D Có, bạn đã trình bày một lựa chọn tốt nhưng hãy cẩn thận khi nói những điều như vậy – hek2mgl

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