PHP cli命令行safe_mode限制

时间:2011-01-19 20:30:52

标签: php cron command-line-interface plesk safe-mode

我正在使用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',但是每月用日常日志文件代表的目录总是会出错。

2 个答案:

答案 0 :(得分:15)

现在您可以从UI安排php脚本执行,如下所示:

plesk schedule cron url php script

如果您仍然需要通过命令行执行脚本,请注意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?

您可以通过运行以下命令php --ini来查找此文件的位置。在此文件中搜索safe_mode,并将该行更改为safe_mode = Off