【问题标题】:PHP cli command line safe_mode restrictionPHP cli 命令行 safe_mode 限制
【发布时间】:2011-06-12 00:56:48
【问题描述】:

我正在使用 Kohana 框架 (3.0.9),它会生成每日日志。如果在 CRON 运行脚本的前一天创建了日志文件,我想邮寄日志文件,但经过几天的尝试,我无法弄清楚如何在 PHP CLI 模式中推迟 safe_mode。

当我在网络上运行我的脚本时,没有问题。但我想在我的 Plesk 9.5.2 服务器上(或以 root 用户身份在命令行上)将脚本作为 CRON 任务运行,但出现以下错误:

ErrorException [ 2 ]: dir(): 安全模式限制生效。 uid 为 10001 的脚本不允许访问 uid 48 ~ APPPATH/classes/controller/ajax.php 拥有的 /var/www/vhosts/mydomain.com/subdomains/mysubdomain/httpdocs/application/logs/2011/01 [ 181]

我已经在我的 Plesk 控制面板中关闭了安全模式,这对于 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',但是目录代表每个月的每日日志文件总是报错。

【问题讨论】:

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


    【解决方案1】:

    现在你可以像这样从 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 确实以 ROOT 身​​份运行 cron,但默认情况下它也会在安全模式开启的情况下运行 PHP,这意味着当您在 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
    

    【讨论】:

    • 我爱你ck_!!你拯救了我的一天(还有我的头发!!)
    【解决方案2】:

    您是否在 CLI 的 php.ini 中禁用了安全模式?

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

    【讨论】:

      猜你喜欢
      • 2020-12-01
      • 1970-01-01
      • 2012-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多