我有一个PHPcURL
用于从另一台服务器加载文件的脚本。
该文件大约 24MB。我理解为什么脚本本身加载文件需要一点时间来执行,但是在脚本运行时对网站的任何请求都将暂停,直到脚本完成为止。
在我们旧的共享服务器上使用相同脚本时,这种情况没有发生。新服务器是云服务器。我将其扩展到 10 个节点(6Ghz 专用 CPU、3760MB RAM、2500GB 带宽),它对这个问题没有影响。
我不介意脚本本身需要很长时间才能执行,因为它将成为数据馈送的自动任务。但我不能让整个网站在它运行时锁定。
知道为什么会发生这种情况吗?
更新看起来这种情况只发生在本地。如果我在脚本运行时尝试在另一台计算机上加载网站,它会按预期工作。
答案1
您可能能够“ignore_user_abort(true)”,然后使用页面上的 HTTP 重定向到另一个页面。
PHP 5 也具有不错的线程功能,这也可能有帮助。
答案2
现在,关键问题是:除了获取该文件之外,您的脚本还做了什么?处理它并将数据插入数据库?也许在您的旧环境中,MySQL 使用 InnoDB 表,而在新环境中,MySQL 使用 MyISAM 表。
MyISAM 在写入操作期间需要全表锁定,而不是 InnoDB 所具有的行级锁定,因此如果您的实际站点使用与 curl 脚本相同的表,这可能会导致您的网站挂起。