Przez cały dzień bawiłem się cURL iNIE mogę sprawić, by zachowywał się w jakikolwiek sposób, ponieważ przeczytałem, że inni ludzie go uruchomili. Bez względu na to, jak to robię, cała moja witryna zawiesza się, dopóki nie zakończy przetwarzania. Próbowałem nawet uruchomić go w następujący sposób:
exec("curl -d $params $url -k &");
Wciąż NIE działało jako proces w tle. Teraz, jeśli zrobię to w skorupce, będzie dobrze. Teraz jestem całkowicie zagubiony. Próbowałem dzisiaj tak wielu metod i nie mogę tego uruchomić jako procesu w tle. Jestem teraz tak sfrustrowany, że nie działa tak, jak powinien, pewnie brakuje mi czegoś małego, ale po prostu nie mogę go znaleźć. Kod jest prosty (na razie):
$url = "path_to_script.php";
$params = "id=$id&etc=etc";
$command = "curl -d "$params" "$url" -k &";
exec($command);
Wywoływany skrypt to:
$id = $_POST["id"];
$etc = $_POST["etc"];
$temp = file_get_contents("remote file");
$fp = fopen("test.txt", "w");
fwrite($fp, $temp);
fclose($fp);
Działa poprawnie, z wyjątkiem tego, żefile_get_contents trwa ponad 30 sekund, a cały serwer jest zamrożony, dopóki się nie skończy. Jest to powtarzane około 70 razy. Dlaczego nie działa jako proces w tle?!?!
Idealnie chcę użyć curl_multi do przetwarzania ich wszystkich jednocześnie, ale ja mieć aby działał w tle i po prostu nie robię tego poprawnie.
Odpowiedzi:
3 dla odpowiedzi № 1Michael Mior ma rację, musisz gdzieś przekierować wyjście. Jeśli nie zależy ci na tym, dokąd to idzie, coś takiego powinno zrobić:
exec ("curl -d $ params $ url> / dev / null 2> & 1");