2012-11-28 11 views
5

Próbuję uzyskać plik xml z curl z adresu url. Chodzi o to, że plik jest generowany na żądanie za pośrednictwem skryptu, który zajmuje do 80-100 sekund, a więc mój curl spada z błędem limitu czasu.Limit czasu zwijania podczas pobierania xml

url wygląda mniej więcej tak:

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

Próbowałem ustawić CURLOPT_TIMEOUT i CURLOPT_CONNECTTIMEOUT, a także set_time_limit() dla samego skryptu (który pracuje w porządku), ale nic się nie zmieniło - wciąż limit czasu.

Curl kod wygląda następująco:

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

Ktoś ma jakieś pomysły?

+0

Musisz potrzeba zwiększenia limitu czasu wykonywania skryptu od ustawień serwera. –

+0

Jakiego limitu czasu dostaniesz i skąd to wiesz? Podaj szczegóły proszę – Ranty

+0

Czas wykonania jest nadpisany przez set_time_limit() zgodnie z phpinfo(), ale nawet jeśli nie jest - domyślnie ustawiony jest na 180 sekund, co samo w sobie wystarcza. – user976258

Odpowiedz

1

wierzę może być uderzanie default_socket_timeout w php.ini, który wynosi 60 sekund domyślnie.

Spróbuj zmienić i sprawdź, czy działa. Jeśli nie, spróbuj tego.

$xml = file_get_contents($url); 

Spowoduje to używać obwolut, które można przeczytać o tutaj: http://php.net/manual/en/wrappers.php

I trzeba również zapewnić, że wymagane owijarki do wykorzystania przez file_get_contents są włączone w php.ini (które zazwyczaj pozwalają więc powinieneś być w porządku, ale po prostu sprawdź, aby się upewnić).

Korzystanie które mogą ominąć limit czasu, gdy występują, jeśli limit czasu jest egzekwowane przez CURL i pamiętać, aby dostosować default_socket_timeout w php.ini od 60 sekund do czegoś innego, które wierzę, może być problem

INI Ustawienia aby sprawdzić

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

+0

@ user1834735, @VBAssassin Przepraszam, miałeś na myśli 'file_get_contents()'? Ponieważ nie znam żadnych funkcji o nazwie 'get_file_content()' i moje Google też ich nie zna. Natomiast 'file_get_contents()' nie zadziała. Po kilkugodzinnej burzy mózgów z większością biura doszliśmy do wniosku, że ten problem to rzadka kombinacja konfiguracji Apache, dyrektyw php.ini i pecha głównie dlatego, że tym razem idziemy z Pearl i kończę pytanie. Ale dzięki wam wszystkim za twój czas i tak, wszyscy byliście naprawdę pomocni. – user976258

+0

Pearl? Masz na myśli Perla? ;) poprawiono literówkę. "Po kilkugodzinnej burzy mózgów z większością biura" Naprawdę?Nad czymś takim? :/Czy nie ma starszych programistów PHP, ponieważ senior powinien znać wszystkie miejsca, w których należy szukać tego rodzaju problemu. Powodzenia :) – VBAssassin

+0

Tak, Perl, mah złe. I tak naprawdę, nad czymś takim. Po pierwsze, tak naprawdę nie mamy starszego programisty PHP - NAPRAWDĘ - a po drugie, był to bardzo nudny dzień, więc to była dla nas jakaś rozrywka :) W każdym razie dziękuję. – user976258

0

Czy URL jest żądaniem GET? Jeśli tak, spróbuj

$xml = get_file_content($url); 
+0

Nie ma takiej funkcji w php – Piero