同一个PHP脚本的实例可以交叉通信吗?

时间:2009-09-16 01:07:46

标签: php scripting webserver communication data-transfer

我假设对于每个页面请求,Web服务器(例如Apache)在内存中创建一个新的脚本实例。这些实例可以在运行时相互通信吗?并传递数据?

4 个答案:

答案 0 :(得分:3)

如果你想在PHP中的脚本之间传递数据,我建议使用memcached或数据库。或者可能是APC。

如果脚本属于同一个会话,理论上它们可以通过会话进行通信,但在大多数情况下这实际上是单向通信,因为任何时候只有一个脚本可以访问会话(session_start()锁定会话,直到该脚本隐式或显式地结束会话。)

答案 1 :(得分:2)

我相信Martin和Cletus的建议是有效的。我的选择将是脚本最终目标的功能。

  • 你会扔多少数据?你能处理外部流程的开销吗?
  • 您要交换什么样的数据?它正常化了吗?或者它现在值得正常化吗?
  • 您以后需要参考这些数据吗?或者可以在处理后丢弃它?
  • 这些脚本是否会在不同的服务器上运行?

  • 具有锁定机制的平面文件

  • 关系数据库
  • 文档数据库(键/值存储,是否持久)<​​/ li>
  • 共享内存(APC或核心功能)
  • 消息队列(Active MQ和公司)

我认为通过外部化流程可以获得最大的价值,因为您可以拥有多台机器管理消息/数据,而不止一台机器生成/消费它们。

答案 2 :(得分:1)

PHP脚本操作的模型实际上并不包含这些脚本在内存中的任何持久性概念,因为通常它们被设计为仅运行所需页面所需的最少时间。这将使得很难对这些脚本之间的有状态通信进行任何有意义的使用,因为通常一旦页面被提供,脚本就没有其他功能了。因此,通常PHP脚本之间的任何通信都是通过操纵数据库条目等来完成的。

如果您要进行某种连续处理,而您希望传递数据,那么您可能需要查看其他Web应用程序模型,例如servlet。

答案 3 :(得分:1)

你应该可以使用一些共享内存来执行此操作,如下所述:http://blog.taragana.com/index.php/archive/how-to-use-shared-memory-in-php/(假设您没有在Windows上运行)