我目前有一个网站已被我的托管服务提供商两次暂停“过度使用系统资源”。在每种情况下,我的一个PHP脚本在服务器上剩下300-400个拷贝。PHP脚本崩溃和最大执行时间
脚本本身从家里的网络摄像头拉出图像并将其复制到服务器。他们利用文件锁来确保一次只能写入一个文件。任何查看页面的客户端都会每3秒调用一次脚本。
最初我很困惑,因为我已经理解PHP脚本完成(返回结果)或崩溃(返回内部服务器错误页面)。然而,我知道“已停用的脚本”是非常普遍的现象。
任何人都可以教育我吗?我已经谷歌搜索到死亡,但我看不到脚本可以在崩溃的状态下结束。当它达到最大执行时间时会不会超时?
我的托管服务提供商在Linux平台上将PHP设置为CGI。我相信我实际上已经发现我的脚本存在这个问题,因为我没有意识到这个群是一个阻塞函数(并且我没有使用LOCK_NB掩码)。我假设以某种方式,我的脚本的数百个副本最终阻止等待资源变得可用,并导致崩溃?这听起来似乎合理吗?我不愿意重新启用该网站,以免再次被暂停。
任何见解非常感谢。
我看不出为什么你需要一个文件锁定 - 或者更重要的是,为什么多个运行脚本需要写入同一个文件。这听起来像你可能在setInterval()方法上调用ajax,而应该在前一个ajax调用的成功处理程序中调用'setTimeout()'。如果你是'flock()'文件,确保你在完成之后立即记住'LOCK_UN',并且记住如果你正在读它,你不需要'LOCK_EX','LOCK_SH '就足够了。 – DaveRandom 2012-08-15 12:12:01
这听起来像是实际提供商的问题;他们是否使用Apache/suPHP? – 2012-08-15 12:23:40
@Jack起初,我认为这实际上可以通过mod_php来看到(刚刚测试过) - 因为'flock()'会阻塞,当你在* nix上运行时,如果脚本从不到达锁定队列的顶部。这是非常愚蠢的,但显然是这样。在['set_time_limit()'手册页](http://php.net/manual/en/function.set-time-limit.php)上也有关于此的说明。 – DaveRandom 2012-08-15 12:28:43