2010-11-16 17 views
5

Próbuję zrobić odmianę file_get_content, ale nie czekając na treść. Zasadniczo żądam innego skryptu php w innym adresie URL, który pobierze duży plik, więc nie chcę czekać na zakończenie ładowania pliku. Ktoś ma jakiś pomysł?URL żądania php bez oczekiwania na odpowiedź

Dziękujemy!

+1

Widziałeś ten http://stackoverflow.com/questions/124462/asynchronous-php-calls –

Odpowiedz

2

Sugerowałbym sprawdzenie funkcji popen lub funkcji curl multi.

Najprostszym sposobem byłoby zrobić:

$fh = popen("php /path/to/my/script.php"); 

// Do other stuff 

// Wait for script to finish 
while (fgets($fh) !== false) {} 

// Close the file handle 
pclose($fh); 

Jeśli nie chcesz czekać na zakończenie procesu w ogóle:

exec("php /path/to/my/script.php >> /dev/null &"); 

lub

exec("wget http//www.example.com/myscript.php"); 
+0

używałem wariant wget ale jest to dość zasobożerne. Przetwarzanie może potrwać do 0,1 s, co jest dość niekorzystne, jeśli trzeba to robić okresowo na odsłoniętych stronach internetowych. –

2

Try to na skrypcie, który pobierze ten plik:

//Erase the output buffer 
ob_end_clean(); 
//Tell the browser that the connection's closed 
header("Connection: close"); 

//Ignore the user's abort. 
ignore_user_abort(true); 

//Extend time limit to 30 minutes 
set_time_limit(1800); 
//Extend memory limit to 10MB 
ini_set("memory_limit","10M"); 
//Start output buffering again 
ob_start(); 

//Tell the browser we're serious... there's really 
//nothing else to receive from this page. 
header("Content-Length: 0"); 

//Send the output buffer and turn output buffering off. 
ob_end_flush(); 
//Yes... flush again. 
flush(); 

//Close the session. 
session_write_close(); 

// Download script goes here !!! 

skradziony: http://andrewensley.com/2009/06/php-redirect-and-continue-without-abort/

+0

Należy wykonać session_write_close() tak blisko początku skryptu, jak to możliwe, lub ten skrypt zablokuje sesję, dopóki pobieranie się nie zakończy, nawet jeśli użytkownik zakończył działanie. –

+0

Ten kod powinien być pierwszym w pliku. Cała reszta (skrypt pobierania i tak dalej) powinna być po nim. W tym przykładzie to miejsce jest oznaczone jako '// Download script goes here' – s3v3n

+1

Dobra odpowiedź na dany problem, ale nie rozwiązuje problemu. Potrzebuję czegoś podobnego, ale nie mam drugiego skryptu pod moją kontrolą, więc to nie działa dla mnie. –

Powiązane problemy