2015-06-25 30 views
8

Bối cảnh:Gọi để URLFetch thất bại với lỗi ứng dụng 5 cho url x

Tôi đang sử dụng Google App Engine và đang gặp một lỗi lạ trong bánh xích trang web của tôi.

Tôi có một chương trình phụ trợ sẽ tự động thu thập dữ liệu trang web mỗi tối. Điều này được xúi giục bởi một nhiệm vụ được đẩy lên pushQueue do giới hạn thời gian trong php.

Vấn đề:

Khi tôi tự chạy kịch bản tạo ra các nhiệm vụ, nhiệm vụ hoàn thành như mong đợi với không có lỗi. Tuy nhiên khi cron khởi chạy tác vụ tôi nhận được lỗi sau.

Gọi để URLFetch thất bại với lỗi ứng dụng 5 cho url x

Code:

function url_get_contents ($Url) { 
    global $retry; 
    try { 
     if (!function_exists('curl_init')){ 
      die('CURL is not installed!'); 
     } 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, $Url); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
     $output = curl_exec($ch); 
     curl_close($ch); 
     return $output; 
    } catch (Exception $e) { 
     syslog(LOG_INFO, 'Caught exception: ', $e->getMessage()); 
     if($retry > 0){ 
      $retry -= 1; 
      return url_get_contents($Url); 
     } 
     else{ 
      return null; 
     } 
    } 
} 

Nhờ syslog Tôi có thể thấy rằng $ url là tốt mà là lái xe cho tôi điên như nó hoạt động khi cùng một kịch bản chính xác được khởi chạy thủ công không thông qua cron.

Làm cách nào để khắc phục sự cố này?

Xin cảm ơn trước.

+1

Kiểm tra nếu php của bạn có cấu hình đúng cho môi trường cli. – Inurosen

+1

Ah có thể là vậy, tôi không cho rằng bạn biết cách kiểm tra điều này trên GAE? Tôi có một php.ini, nhưng làm thế nào để tôi tìm ra nếu nó là một cli php sử dụng? – Grushton94

+1

Tại sao không sử dụng file_get_contents() - mà cũng sử dụng trình xử lý URLFetch, nhưng sẽ cho bạn biết nếu vấn đề là cURL hay không. – Tom

Trả lời

1

EDIT: curl chắc chắn được cài đặt, vì bạn có một tuyên bố kiểm tra nó ở nơi đầu tiên, vì vậy câu trả lời của tôi không còn đứng.

Danh sách lỗi CURL http://curl.haxx.se/libcurl/c/libcurl-errors.html cho biết lỗi 5 là CURLE_COULDNT_RESOLVE_PROXY. Bằng cách nào đó curl của bạn không thể truy cập web, có thể.

Curl có thể không được bật cho môi trường CLI của bạn.

Kiểm tra cấu hình ở đây:

php5/  phpmyadmin/ 
[email protected]:~# cd /etc/php5 
[email protected]:/etc/php5# ls 
apache2 cli conf.d mods-available 
[email protected]:/etc/php5# cd cli/ 
[email protected]:/etc/php5/cli# ls 
conf.d php.ini 
[email protected]:/etc/php5/cli# cd conf.d 
[email protected]:/etc/php5/cli/conf.d# ls 
10-pdo.ini 20-gd.ini  20-mssql.ini 20-mysql.ini  20-pdo_mysql.ini 
20-curl.ini 20-mcrypt.ini 20-mysqli.ini 20-pdo_dblib.ini 
[email protected]:/etc/php5/cli/conf.d# 
4

"ứng dụng lỗi 5" có nghĩa là thời hạn yêu cầu được vượt quá.

Bạn có thể tăng thời hạn theo yêu cầu bằng cách sử dụng tùy chọn CURLOPT_TIMEOUT, vì vậy bạn mã có thể giống như thế:

$ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $Url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 60); // 60 second timeout 
    $output = curl_exec($ch); 
Các vấn đề liên quan