2010-11-16 3 views
5

Я пытаюсь сделать вариант file_get_content НО, не дожидаясь содержимого. В основном я запрашиваю другой php-скрипт в другом URL-адресе, который будет загружать большой файл, поэтому я не хочу ждать завершения загрузки файла. У кого-нибудь есть идея?php request url не дожидаясь ответа

Спасибо!

+1

Вы видели это http://stackoverflow.com/questions/124462/asynchronous-php-calls –

ответ

2

Я предлагаю проверить либо функцию popen, либо функции curl multi.

Самый простой способ будет сделать:

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

Если вы не хотите ждать ее завершения на всех:

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

или

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

я использовал Wget вариант, но это довольно ресурс голодный. Он может легко обрабатывать до 0,1 с и более, что очень плохо, если вам нужно периодически делать это на открытых веб-страницах. –

2

Try это на скрипте, который будет загружать этот файл:

//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 !!! 

украдена из: http://andrewensley.com/2009/06/php-redirect-and-continue-without-abort/

+0

Вы хотите сделать session_write_close() как можно ближе к началу сценария, или этот скрипт заблокирует сеанс до завершения загрузки, даже если пользователь будет прерван с их конца. –

+0

Этот код должен быть первым в файле. Все остальное (сценарий загрузки и т. Д.) Должно быть после него. В этом примере это место помечено как «// Загружается скрипт здесь» – s3v3n

+1

Хороший ответ на конкретную проблему, но не решает сам вопрос. Мне нужно что-то подобное, но у меня нет второго скрипта под моим контролем, так что это не работает для меня. –

Смежные вопросы