我正在使用Kohana框架(3.0.9),它生成每日日志。我希望邮寄日志文件,如果在CRON运行脚本的前一天发送了一个日志文件,但经过几天的尝试后,我无法弄清楚如何在PHP CLI模式中推迟safe_mode。
当我在网上运行我的脚本时,没有问题。但我想在我的Plesk 9.5.2服务器上运行脚本作为CRON任务(或以root用户身份在命令行上运行)我收到以下错误:
ErrorException [2]:dir():安全模式限制有效。其uid为10001的脚本不允许访问uid 48~APPATATH / classes / controller / ajax.php所拥有的/var/www/vhosts/mydomain.com/subdomains/mysubdomain/httpdocs/application/logs/2011/01 [ 181]
我已经在我的Plesk控制面板中关闭了SAFE MODE,它适用于Web请求,但不能在命令行或作为CRON任务。
我正在使用以下代码来测试它是否正常工作:
$d = dir(APPPATH.'logs/2011/01/');
echo "Handle: " . $d->handle . "\n";
echo "Path: " . $d->path . "\n";
while (false !== ($entry = $d->read())) {
echo $entry."\n";
}
$d->close();
我可以阅读目录APPPATH.'logs /',以及目录APPPATH.'logs / 2011',但是每月用日常日志文件代表的目录总是会出错。
答案 0 :(得分:15)
现在您可以从UI安排php脚本执行,如下所示:
如果您仍然需要通过命令行执行脚本,请注意Plesk的PHP二进制文件放在:
# 7.0
/opt/plesk/php/7.0/bin/php
# 5.6
/opt/plesk/php/5.6/bin/php
# 5.5
/opt/plesk/php/5.5/bin/php
# and so on
原始答案:
我知道这已经有几个月了,但对于使用Plesk,cron和PHP时遇到问题的下一个人,这就是答案。
虽然Plesk确实将cron作为ROOT运行,但它默认运行PHP并且安全模式为ON,这意味着当您在Plesk中设置需要PHP的cron时,它将具有您从shell无法获得的限制或来自网络。
所以你要做的是使用CLI /etc/php.ini选项覆盖,如下所示:
/usr/bin/php -q -d safe_mode=Off /var/www/vhosts/path-to-your-php-file.php
答案 1 :(得分:1)
您是否在php.ini中为CLI禁用了safe_mode? p>
您可以通过运行以下命令php --ini
来查找此文件的位置。在此文件中搜索safe_mode
,并将该行更改为safe_mode = Off
。