仅使用Cron执行PHP文件

时间:2011-06-20 23:26:47

标签: php apache shell cron

我有一个PHP脚本需要每天执行一次,太平洋时间凌晨3:05。我目前在我的网站的根目录中有脚本(例如,http://example.com/script.php),因此,任何在浏览器中导航到它的人都可以执行该脚本。我的服务器布局如下:

/家庭/ [用户] /example.com /

example.com 文件夹是该域的根目录。我读了另一个关于此的帖子:

PHP & cron: security issues

据说我应该将脚本移到公共目录之外,所以在我的情况下我会将它移动到 [user] 文件夹。目前我的Cron作业命令如下所示:

/ usr / local / php5 / bin / php /home/[user]/example.com/script.php

(我当然使用伪名称。)我是否只需移动文件并将命令更改为:

/ usr / local / php5 / bin / php /home/[user]/script.php

它会正常运行,但公众无法使用吗?由于脚本已经在Cron中运行,因此已经使用绝对路径(而不是相对路径)设置它需要包含的文件,所以这应该是一个简单的移动和编辑,对吗?

3 个答案:

答案 0 :(得分:7)

您有几种选择:

  • 将其移出您的网络目录
  • 添加一些检查,例如:

    <?php
    
    if( ! isset($argv) )   
        die("cannot run!");
    
  • 检查脚本运行的模式:

    $isCLI = ( php_sapi_name() == 'cli' );
    if( !$isCLI )
        die("cannot run!");
    

答案 1 :(得分:0)

你能告诉我们脚本的用途,如果它正在做一些简单的事情,例如mysql修剪:

5 3 * * * * root mysql -u username -e "UPDATE users SET days = days-1;"

可能更好,同样:

5 3 * * * * root /usr/local/php5/bin/php -r "$normal = 'php';code();$here"

可以做到这一点吗?

答案 2 :(得分:-1)

我最终做的只是将它移出公共目录,进入我的主文件夹。 CRON仍然可以从那里访问和执行它。谢谢你的帮助。