2012-11-28 5 views
5

Vì vậy, tôi cố gắng lấy tệp xml với curl từ url. Thing là, tập tin được tạo ra theo yêu cầu thông qua kịch bản, trong đó mất đến 80-100 giây và vì vậy curl của tôi là rơi ra với lỗi thời gian chờ.Curl timeout khi tải xuống xml

url trông giống như sau:

https://domain/mancgi/report?params&out=xml 

Tôi cố gắng để thiết lập CURLOPT_TIMEOUTCURLOPT_CONNECTTIMEOUT, và cũng set_time_limit() cho kịch bản gốc (trong đó hoạt động tốt), nhưng có gì thay đổi - vẫn timeout.

Curl mã trông như thế này:

set_time_limit(1000); 
$curl = curl_init($url); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 0); 
curl_setopt($curl, CURLOPT_TIMEOUT, 300); 
$xml = curl_exec($curl); 

Bất cứ ai có bất kỳ ý tưởng?

+0

Bạn có cần phải tăng giới hạn thời gian thực hiện kịch bản từ thiết lập máy chủ. –

+0

Bạn sẽ nhận được loại thời gian chờ nào và bạn biết điều đó như thế nào? Cung cấp chi tiết xin vui lòng – Ranty

+0

Thời gian thực hiện được ghi đè bởi set_time_limit() theo phpinfo(), nhưng ngay cả khi nó không - theo mặc định nó được thiết lập để 180 giây, đó là đủ của chính nó. – user976258

Trả lời

1

Tôi tin rằng bạn có thể nhấn default_socket_timeout trong php.ini là 60 giây theo mặc định.

Thử thay đổi và xem nó có hoạt động không. Nếu không, hãy thử thay vào đó.

$xml = file_get_contents($url); 

Việc làm này sẽ sử dụng giấy gói mà bạn có thể đọc về ở đây: http://php.net/manual/en/wrappers.php

Và bạn sẽ cũng cần phải đảm bảo rằng những gói cần thiết để sử dụng bởi file_get_contents được kích hoạt trong php.ini (mà thường được cho phép vì vậy bạn nên được ok, nhưng chỉ cần kiểm tra để chắc chắn).

dùng có thể bỏ qua thời gian chờ bạn đang gặp nếu thời gian chờ được thi hành bởi CURL và nhớ để điều chỉnh default_socket_timeout trong php.ini TỪ 60 GIÂY để cái gì khác mà tôi tin rằng có thể vấn đề của bạn

Các INI Cài đặt để Kiểm tra

http://php.net/manual/en/filesystem.configuration.php

+0

@ user1834735, @VBAssassin Xin lỗi, ý của bạn là 'file_get_contents()'? Bởi vì tôi không biết hàm nào bằng tên của 'get_file_content()' và Google của tôi cũng không biết chúng. Và 'file_get_contents()' sẽ không thực hiện thủ thuật. Sau vài giờ đồng hồ với hầu hết các văn phòng, chúng tôi đã kết luận rằng vấn đề này là một sự kết hợp hiếm có của cấu hình Apache, chỉ thị php.ini và may mắn chủ yếu là vì vậy chúng ta sẽ cùng với Pearl lần này và tôi sẽ đóng câu hỏi. Nhưng nhờ tất cả các bạn cho thời gian của bạn anyway, tất cả các bạn đã thực sự thực sự hữu ích. – user976258

+0

Trân Châu? Bạn có nghĩa là Perl? ;) sửa lỗi đánh máy. "Sau vài giờ động não với hầu hết văn phòng" Thật sao?Trên một cái gì đó như thế này? :/Không có nhà phát triển PHP cao cấp nào là một cấp cao nên đã biết tất cả những nơi để tìm loại vấn đề này. Chúc may mắn :) – VBAssassin

+0

Vâng, Perl, mah xấu. Và yep, thực sự, trên một cái gì đó như thế này. Đầu tiên, chúng tôi thực sự không có một nhà phát triển PHP cao cấp - REALLY - và thứ hai, đó là một ngày rất nhàm chán vì vậy đây là loại giải trí cho tất cả chúng ta :) Cảm ơn anyway, chúc may mắn cho bạn quá. – user976258

0

URL có phải là yêu cầu GET không? Nếu vậy hãy thử

$xml = get_file_content($url); 
+0

Không có chức năng như vậy trong php – Piero