PHP是否限制文件之间的数据传输?

时间:2018-06-29 10:04:03

标签: php

在一个文件中,我进行查询并获得结果。

index.php(将链接输出到浏览器)

foreach ($conn->query($sql) as $info) {
$output_html = '<a href = addsearch.php?id='.$info['id'].' target=_blank \>'.$title_.'</a>';
print("$output_html<br>");
}
$_SESSION['info'] = $info; // now it's works such way

在其他文件中,我希望我不使用GET,POST,SESSION方法即可得到结果的副本。 (我不需要在GET \ POST中,因为数据保留在最近RAM区域中的服务器上。也不想使用SESSION变量,因为它使用HDD。)

addsearch.php(仅在用户单击链接时启动)

session_start();
print_r($_SESSION['info']); // works now
...

还有其他获取数据的方法吗?任何全局RAM变量或缓存,文件之间的公共共享资源。

我尝试了PHP manual中的第一个示例:

<?php
$a = 1;
include 'b.inc';
?>

但是它不起作用:-),因为我分别启动文件,所以它们具有不同的过程。

1 个答案:

答案 0 :(得分:3)

PHP并没有什么限制,它一开始就不知道该数据。有两部分可以理解这一点:

  1. PHP是无共享架构。
  2. HTTP是无状态的。

第一个 是PHP的设计决策:每个请求都接收一个全新的环境,因此在用户发出的HTTP请求之间数据不会保存在内存中。这使该语言更具可预测性,因为在一页上执行操作对另一页几乎没有副作用。

但是,第二个更为基础:即使PHP在两次请求之间存储数据,它也会将每个访问您网站的用户的数据存储在一个容器中。那是因为HTTP没有对“状态”的任何本机跟踪,因此来自同一用户的两个请求在本质上看起来与来自不同用户的两个请求相同。

这就是cookie和会话进入的地方:您将cookie发送带有ID的Cookie到用户的浏览器,然后将一些数据绑定到该ID,并存储在服务器上的某个位置。那个地方不需要在磁盘上-可以在内存存储中,例如memcache或Redis,也可以在数据库中,等等-但是由于PHP的“无共享”模型,它不能只是在PHP变量中。

另一个相关的概念是缓存:将(慢速计算的)结果(再次存储在磁盘上,存储在内存中,等等)存储起来,以便在被要求再次进行相同的计算时< / em>,您只需查找答案即可。会话有利于记住客户放入购物车中的内容,而缓存则有利于向输入相同搜索的每个客户显示相同的搜索结果集。