注意 - 这个问题已经解决了,但是我在这里贴出来找到洞察发生了什么,因为我不明白。了解为什么PHP 5.2.17到5.3.8会打破cron作业?
我的共享主机的默认配置是PHP 5.2.17。当我问他们,如果我能升级到5.3.X他们表示肯定,并引用:
处理程序为PHP 5.3将添加到我们的共享和经销商服务器进行 那些谁希望利用它。为了利用这个处理程序,您 需要将下面的代码添加到您的.htaccess文件:
Action application/x-hg-php53 /cgi-sys/php53
AddType application/x-hg-php53 .php
进一步阐明为什么我们目前没有在默认情况下有这样的, 是由于旧版PHP脚本与新版本的5.3版本的兼容性问题。因此,为了防止破坏我们客户网站上的旧脚本,我们将默认的PHP版本保留为5.2.X.
所以我这样做,很快就发现这使我的网站使用PDO。调用new PDO();
导致在日志中找不到类错误。
共享主机的支持回应是:
我们的PHP 5.3设施也启用了PDO了。这里的问题 似乎是由基于php.ini的php.ini for PHP 5.2引起的,因此它尝试加载PHP 5.2模块而不是PHP 5.3模块。
确定似乎是合理的,我说,现在继续解决这个问题!
他们更新的.ini文件,并添加了处理我的.htaccess和...
您的网站似乎正确加载,但我们知道,如果你发现任何问题。
这是真的,现在主站点和PDO是做工精细和phpinfo()
检查的确证实我是5.3.8,但随后几个小时后,一个cron作业死于火热的死亡:
[16-Dec-2011 03:00:01] PHP警告:PHP启动:无法加载动态库'/opt/php53/lib/php/extensions/no-debug-non-zts-20090626/pdo.so' - /opt/php53/lib/php/extensions/no-debug-non-zts-20090626/pdo.so:undefined symbol:gc_remove_zval_from_buffer in Unknown on line 0
从cron作业目录中的错误日志:
[16日 - 12月2011年3点00分01秒] PHP的警告:require_once(../ pghqClasses/PDO.php)一次function.require-] :未能打开流:在/ home/XXXXXX/pghqIncs/initCron中没有这样的文件或目录。PHP的第19行
所以再次PDO电话都是失败的,但对于cron作业此时只有。
支持球队的最后答复是:
我已经看到了这个问题之前,凡在PHP脚本的相对路径不指向正确的地方。根据PHP手册,如果CLI php和其他PHP接口的区别在于CLI PHP不会将目录更改为脚本。 http://www.php.net/manual/en/features.commandline.differences.php 为了解决这个问题,我已经添加了行:
CHDIR(目录名(FILE ));
到你的cron脚本的顶部,这样,当它被执行时,它会将目录改变为脚本的目录,因此使相对路径起作用。当从网站运行时,这一行基本上什么也不做,但它应该让你的cronjob正常运行。
它确实有效。我的cron工作正常运行,并且我的主要站点很好,每个人都很高兴5.3.8,但最后一点问题的解决完全失去了我,我希望有人向我解释包括可能会失败的原因一个cron,但不是为public_html
脚本,为什么我们是chdir()
,等等?
谢谢大家,很抱歉的长度...
谢谢安德鲁。你能解释为什么主要网站从'/ public_html /'工作,但cron作业失败'/ pghqCron /',尽管从'/ pghqIncs /'中包含两个拉包括?这是让我困惑的部分。 – Drew 2011-12-18 22:46:02
我对PHP的配置并不熟悉,但我的猜测是在php.ini或其他地方有一个配置行,它告诉在Apache中运行的PHP处理程序在哪里找到你的包含。 – 2011-12-18 22:49:59