在PHP中跨脚本读取和写入全局变量

时间:2009-09-16 23:02:27

标签: php scripting webserver global-variables data-transfer

PHP是否具有可由一个正在运行的脚本修改并由另一个脚本读取的全局变量?

8 个答案:

答案 0 :(得分:12)

不,根据设计,PHP是一种“无共享”架构,这意味着在同时运行的进程之间或在一个接一个地运行的请求之间不共享任何内容。有多种方法可以共享数据,但您必须明确地这样做。

如果您只想分享来自同一用户的2个请求,那么会话或Cookie可能就好了。

如果要在多个用户之间共享,您可能需要某种共享持久性,或者在缓存中短期(例如,memcached),或者像数据库一样更健壮。

无论哪种方式,实际上都会在每个请求中检索和重建数据。在会话的情况下,它会自动为您处理。

答案 1 :(得分:2)

您实际上可以使用shared memoryAPC(使用共享内存本身)来执行此操作。

答案 2 :(得分:1)

脚本之间唯一可以访问的是超全局$ _SESSION数组。这是因为您存储在数组中的任何内容都会被发送到cookie,然后可以通过下一个PHP脚本来获取。

全局变量只是意味着无论范围如何都可以在脚本中访问它们;这并不意味着它们可以在脚本之间发送。

所以要么你必须使用$ _SESSION数组传输变量(这会在客户端计算机上存储一个cookie,所以不要通过该数组发送任何敏感信息),或者你可以在脚本之间发送POST或GET来发送变量。

答案 3 :(得分:1)

每个请求都由自己的php实例处理。 php中的全局变量只能在同一个php实例中访问。但是,您可以使用memchached module之类的东西在不同实例之间共享数据(通常应该比将数据写入文件系统更快)。

答案 4 :(得分:0)

不是这样,但您可以使用cookie或会话在用户浏览体验期间维护数据,或者如果信息需要持续存在,您可以写入磁盘上的数据库或文件。

答案 5 :(得分:0)

PHP中全局变量的另一个常见替代是共享使用像MySQL这样的数据库(尽管不是完美的)

答案 6 :(得分:-1)

全局变量在大多数编程中都很糟糕。它们在webapps等多线程/多用户系统中尤其糟糕。避免。如果必须使用全局变量(而不是全局常量),请将它们放在具有保护更新的事务的数据库中。

因为你谈到了不同的脚本,听起来你真正想要的是一个更加面向应用程序的语言的Web应用程序框架 - 比如Django(python)或Rails(ruby)。这些让您可以将代码视为一个有凝聚力的PROGRAM,而不是许多处理Web请求的松散连接的脚本。

答案 7 :(得分:-1)

我制作了一个很小的库(〜2 KB; <100行),您可以执行此操作:varDx

它具有写入,读取,修改,检查和删除数据的功能。 它实现了序列化,因此支持所有数据类型。

这是使用方法:

<?php
require 'varDx.php';
$dx = new \varDx\cDX; //create an object
$dx->def('file.dat'); //define data file

$val1 = "this is a string";
$dx->write('data1', $val1); //writes key to file
echo $dx->read('data1'); //returns key value from file
相关问题