繁体   English   中英

PHP文件不会从Cron运行

[英]PHP File Wont Run From Cron

我有以下PHP脚本,它建立与MySQL数据库的连接并运行SQL查询以获取4个字段,然后从输出创建逗号分隔的文本文件。 如果我将此PHP文件放在我的public_html文件夹中并从我的Web浏览器浏览到它,它就能正常运行。 但是,我想将此PHP脚本放在与public_html相同级别的唯一文件夹中,并通过我的Cpanel中的CRON作业调用它。 当我这样做时,我得到附加的错误。

脚本位置 /home2/mywebsite/whereIam/myscript.php

文本文件输出位置 /home2/mywebsite/public_html/text.txt

Cron Job 0 0 * * * /home2/mywebsite/whereIam/myscript.php

错误信息
/home2/mysite/whereiam/myscript.php:第1行:?php:没有这样的文件或目录
/home2/mysite/whereiam/myscript.php:第2行:意外令牌附近的语法错误(' /home2/mysite/whereiam/myscript.php: line 2: $ fh = fopen(“/ home2
/mywebsite/public_html/text.txt“,”w“);'

<?php
    $fh = fopen("/home2/mywebsite/public_html/test.txt", "w");
    $con = mysql_connect("localhost","user_readoly","SomePassword");
    mysql_select_db("nameofDatabase", $con);

    /* insert field values into data.txt */

    $result = mysql_query("SELECT `field_129`, `field_131`,`field_26` FROM  `a_custom_database_5` WHERE `field_129` <> ''");   
    while ($row = mysql_fetch_array($result)) {          
        $num = mysql_num_fields($result) ;    
        $last = $num - 1;
        for($i = 0; $i < $num; $i++) {            
            fwrite($fh, $row[$i]);                       
            if ($i != $last) {
                fwrite($fh, ",");
            }
        }                                                                 
        fwrite($fh, "\n");
    }
    fclose($fh);
?>

有两种可能性:

  • 将cronjob更改为:

     0 0 * * * php /home2/mywebsite/whereIam/myscript.php 

    请注意, php命令已添加了作为参数的文件名。 否则,cron会尝试执行PHP文件,但它不知道它应该以PHP的形式执行。

  • 有一种方法告诉操作系统PHP文件应该作为PHP执行。 将此作为第一行添加到脚本中:

     #!/usr/bin/php 

    还要设置权限,以使文件可执行。 现在,您可以从shell执行它,就像它是一个命令一样 - 而且cronjob也可以不加修改地工作。

    这当然是假设PHP可执行文件位于/usr/bin/php 您可以使用which php命令查找系统上的位置。

选择哪个是我个人喜欢的问题。 我喜欢第二个选项,因为它允许您从命令行执行文件而无需显式使用php命令。 但是,第二个选项移动到另一个服务器,可能有不同的php路径意味着你必须编辑文件 - 第一个选项不需要。

试试这个

0 0 * * * /usr/bin/php /home2/mywebsite/whereIam/myscript.php

我还会将输出重定向到日志文件,然后将其更改为此

0 0 * * * /usr/bin/php /home2/mywebsite/whereIam/myscript.php >> /path/to/log.php 2&>1

这假设php位于/ usr / bin / php

暂无
暂无

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

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