2010-07-27 110 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