繁体   English   中英

只有cron才能运行php脚本

[英]run php script only by cron

我知道如何使用cron运行脚本,但我需要的是只能通过cron运行我的脚本。

谢谢!

如此重复帖子中所述:

PHP和cron:安全问题

您应该将此文件保留在public_html之外。

但有时候,这是不可能的。 我的脑子去了Moodle ,那里有类似的功能。 这就是他们所做的。

来自cron.php

...

/// The current directory in PHP version 4.3.0 and above isn't necessarily the
/// directory of the script when run from the command line. The require_once()
/// would fail, so we'll have to chdir()

    if (!isset($_SERVER['REMOTE_ADDR']) && isset($_SERVER['argv'][0])) {
        chdir(dirname($_SERVER['argv'][0]));
    }

...

/// check if execution allowed
    if (isset($_SERVER['REMOTE_ADDR'])) { // if the script is accessed via the web.
        if (!empty($CFG->cronclionly)) { 
            // This script can only be run via the cli.
            print_error('cronerrorclionly', 'admin');
            exit;
        }
        // This script is being called via the web, so check the password if there is one.
        if (!empty($CFG->cronremotepassword)) {
            $pass = optional_param('password', '', PARAM_RAW);
            if($pass != $CFG->cronremotepassword) {
                // wrong password.
                print_error('cronerrorpassword', 'admin'); 
                exit;
            }
        }
    }

...

您应该将此脚本保留在公用文件夹之外。 此外,为文件设置适当的权限,以便公共用户无法执行脚本。 将下面的代码段放在脚本的顶部。

if(php_sapi_name() !== 'cli'){
    die('Can only be executed via CLI');
}

请注意,在设置cron作业时,需要使用PHP可执行文件的完整路径。 例如:/ usr / local / bin / php(您的路径可能与此不同)

您需要一个PHP CLI / CGI可执行文件。 假设php程序位于/usr/local/bin/php ,您可以使用:

/usr/local/bin/php /path/to/your/script.php

另见: http//nl.php.net/manual/en/features.commandline.usage.php

请在PHP文件的顶部添加此脚本:

$isCLI = ( php_sapi_name() == 'cli' );
if( !$isCLI )
    die("Sorry! Cannot run in a browser! This script is set to run via cron job");

然后,如果您尝试通过浏览器运行PHP文件,则无法运行它。 将显示此错误消息。 但与此同时,它可以通过cron作业运行。

尝试仅为cron守护程序用户授予执行权限,也许可以获得所需的权限。

问候!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM