php - PHP的维护状态

这将是一个新手问题,但我正在学习php只是为了实现解决方案的唯一目的(atm),这是我在过去18个小时中学到的所有关于php的知识。

目标是将间接添加到我的javascript get请求中,以允许另一个网站的跨域访问。我也不想扼杀所说的网站,并希望采取保障措施。我不能依靠他们在javascript中,因为那不能说明其他发送请求的同伴。

所以现在我有以下临时代码,没有任何限制措施:

<?php

  $expires = 15;

  if(!$_GET["target"])
    exit();
  $fn = md5($_GET["target"]);
  if(!$_GET["cache"]) {
    if(!array_search($fn, scandir("cache/")) ||
      time() - filemtime($file) > $expires)
      echo file_get_contents("cache/".$fn);
    else
      echo file_get_contents(file);
  }
  else if($_GET["data"]) {
    file_put_contents("cache/".$fn, $_GET["data"]);
  }
?>


据我所知,它工作得很好(不考虑不可能的校验和冲突)。现在我想知道的是,我在Google中的搜索查询拒绝为我提供什么,实际上是php如何启动以及何时终止。

显然,如果我正在运行自己的Web服务器,我对此会有更多了解:我不是,我也没有外壳访问权限。

基本上,我试图弄清楚我是否可以控制脚本何时在代码中结束,以及对php文件的每个“获取”请求是否会启动脚本的新实例,或者是否可以“唤醒”相同的脚本脚本。我要跟踪的原因是,例如,它是否已在过去的n毫秒内向“目标”发送了一个请求,将值转储到保存文件然后一次又一次地恢复它似乎有点浪费。不需要在内存中保留很长时间。

最佳答案

每个HTTP请求都会启动一个新的解释器实例。无论这是一个全新的过程,还是对现有过程的重用,它基本上都是一个实现细节。

通常,这会推动您朝着简单,可扩展的良好方向发展:您可以运行多个服务器进程和线程,并且不会因请求是否返回相同实例而产生不同的行为。

在Linux上,加载最近处理过的文件将非常快,因为它直接来自缓存。不用担心

通过直接将请求参数附加到路径上,您会遇到严重的安全漏洞:人们可以得到data=../../../etc/passwd,以此类推。阅读http://www.php.net/manual/en/security.variables.php,依此类推。 (在这个特定示例中,您在将输入放入路径之前先对其进行哈希处理,因此这不是实际问题,但需要注意。)

更一般而言,如果要在多个请求之间保留缓存,那么最近这些天的典型用途是使用memcached