2010-07-27 106 views
2

是否可以爲與其他PHP會話相關的請求創建一個http響應?如果是這樣,該怎麼做?如何爲與其他PHP會話相關的請求創建http響應?

我正在創建一種腳本語言,以使PHP開發人員更輕鬆地處理電話交互。我的應用程序接收電話呼叫,然後激活與這些呼叫相關的用戶腳本。

腳本是實時處理的。由於我不知道腳本中的命令數量,我必須爲每個命令創建和發送單獨的REST響應,直到有人發出掛斷。

有沒有辦法做到這一點,而不必停止當前功能,發送響應,然後在下次電話服務器向我發送請求時恢復腳本?

理想情況下,我很樂意留在當前的PHP函數中,爲每個http請求發送響應,而不必在每次都停下來...會捲曲 - 還是其他任何內容 - 都可以幫助我?

由於提前,

利奧

回答

0

我希望我得到了你想要做的,
好,如果你想要的其他會議的ID,只需使用session_id()功能向右什麼設置實際使用哪個會話,例如:

#Assuming url like www.example.com/?session_id=123456; 
$current_session_id = session_id(); 
$desired_session_id = $_GET['session_id']; 

session_id($desired_session_id); #that's where we switch to the desired session 
var_dump($_SESSION); #will dump session with id 123456 
session_id($current_session_id); #switching back to the previous session id 

這應該工作,我相信我在過去使用過類似的東西,但請仔細檢查一下。

+0

你好密碼,謝謝你的回覆。 調用session_id()的想法很有趣。但是如何創建和發送另一個會話的http響應而不必退出當前的函數呢?我需要用叉子嗎?我必須使用捲曲嗎? 再次感謝, 獅子座 – 2010-07-27 14:04:55

0

您可以使用多捲髮送多個請求,但它似乎需要按順序發送命令。另一種選擇是使用分叉,它創建當前進程的副本。你可以檢查你是否是「父母」或「孩子」的過程。然後「父母」過程監視「孩子」過程。我已經完成了50個子進程的運行,這個進程從1個父進程開始運行。 http://php.net/manual/en/function.pcntl-fork.php

如果您只是想發送命令,而不關心輸出,只需使用exec函數即可。在下面的例子中,PHP不會等待響應或腳本完成。

exec("send_command.php > /dev/null &"); 
+0

布倫特,你好,感謝您的消息。 fork()的用法看起來很有趣。但是,根據PHP手冊(http://www.php.net/manual/en/intro.pcntl.php): *「不應在Web服務器環境中啓用過程控制」 *「此擴展名( PCNTL)在Windows平臺上不可用「 」exec「也看起來有點危險並且依賴於平臺。會有其他的選擇嗎? 例如,是否可以使用curl爲另一個會話創建響應? 謝謝, 獅子座 – 2010-07-27 14:14:17

+0

正確,pcntl不應該在Apache或其他Web服務下使用。您通常在命令行PHP(即exec)下使用它。我所有的建議都是假設一個Unix環境。 「exec」會在調用它的用戶帳戶下運行,因此它具有內置限制。它只是執行一個系統命令,在這種情況下是一個你創建的腳本。不是很危險,除非你傳遞任意參數。 – 2010-07-28 01:10:18