2011-06-10 75 views
0

通過實例講解: f.php:如何通過一個php代碼異步運行其他php代碼?

d$=$_Get['ad']; 
print d$; 

的index.php:

for $i=0 to 200000 
    // run f.php?ad=i$ 

運行f.php但不等待完成f.php 如何能做到這一點?

  1. 我發現php asynchronus但我不現在這工作真的或其它現有的解決方案,或者這是最好的解決辦法?!

  2. 何時使用exec和如何?

+0

exec用於運行外部代碼,例如從程序獲取系統統計信息。你真的想看看分叉。 – 2011-06-10 18:59:36

+1

相關問題:[PHP執行後臺進程](http://stackoverflow.com/questions/45953/php-execute-a-background-process),[如何在窗體後面的後臺運行PHP腳本提交?](http://stackoverflow.com/questions/4626860/how-can-i-run-a-php-script-in-the-background-after-a-form-is-submitted) – netcoder 2011-06-10 19:04:55

回答

4

您尋找的術語稱爲分叉。這裏是所有需要將您的代碼分成async procs的PHP文檔的鏈接。

http://php.net/manual/en/function.pcntl-fork.php

+0

怎麼發送數據給孩子做的叉? – naser 2011-06-10 19:17:20

+0

在var中定義它,例如$ child_data =「some data」;然後fork你的子進程(子進程可以訪問父進程中的所有變量)。唯一不能分叉的是像mysql這樣的資源連接,那些需要在新fork中重新創建的東西。 – 2011-06-10 19:19:10

1

如果您正在運行Linux,並有機會獲得PHP CLI可以有這樣的事情:

<?php 
// this will launch worker to run something... 
shell_exec('php worker.php >/dev/null &'); 

// the rest of the flow goes here 
... 
?> 

worker.php可以書面方式東東數據庫,發送電子郵件,無論..

+0

shell_exec仍然阻塞,因爲它返回輸出。注意&最後讓事情(在linux/unix中)在後臺運行。如果你不添加&然後這個解決方案不會工作,也不是理想的解僱後臺工作,因爲這將在longrun變得非常繁瑣。 – 2011-06-10 19:07:34

+1

@George,完全同意......這只是一個簡單的簡單修復。 – Frankie 2011-06-10 19:14:50

+1

哈哈,你叫我喬治:p – 2011-06-10 19:19:57