2009-09-16 34 views

回答

12

否,通过设计PHP是一个“无共享”架构,这意味着什么也不在同一时间运行的进程之间或在运行了一个又一个的请求之间共享。有办法共享数据,但你必须明确地做。

如果你只是想从同一个用户,会话或饼干2个请求之间共享可能是要走的路。

如果你想在多个用户之间共享,您可能需要某种形式的共享持久性的,无论是短期内的高速缓存(如memcached的)或更强健如数据库。

无论哪种方式,数据实际上是检索和重建每个请求。它只是在会话中自动处理。

0

不是这样,但你可以使用cookie或会话,以保持数据的用户的浏览体验时间,或者你可以写一个数据库,或者如果信息需要持续超过该磁盘上的文件。

1

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

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

因此,要么使用$ _SESSION数组传递变量(这会在客户端计算机上存储Cookie,因此不要通过该数组发送任何敏感信息),要么您可以在脚本之间传递POST或GET发送变量。

+3

会话数据本身不存储在cookie中,但在服务器上。只有会话ID作为cookie头被发送到客户端。 – VolkerK 2009-09-16 23:10:16

1

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

2

实际上,你可以做到这一点使用shared memory,或APC(这是使用共享内存本身)。

0

在PHP全局变量的另一个常见的替换是共享使用一个数据库如MySQL(虽然不是一个完美的)

-1

全局变量是大多数编程坏。它们在多线程/多用户系统(如webapps)中尤其糟糕。避免。如果您必须使用全局变量(而不是全局常量),则将它们置于数据库中并使用保留更新的事务。

由于您谈论了不同的脚本,它听起来像你真正想要的是一个更加面向应用的语言的web应用程序框架,如Django(python)或Rails(ruby)。这些让你更像是一个凝聚的PROGRAM,而不是许多处理Web请求的松散连接的脚本。

2

您可以使用$_SESSION,即:

SCRIPT1。PHP

<?php 
session_start(); 
$_SESSION['myVar'] = "something"; 
?> 

script2.php

<?php 
session_start(); 
echo $_SESSION['myVar']; 
//something 
?>