【问题标题】:PHP File Wont Run From CronPHP 文件不会从 Cron 运行
【发布时间】:2015-03-20 15:12:30
【问题描述】:

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

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

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

定时任务 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);
?>

【问题讨论】:

  • 您忘记在 CRON 作业中包含 PHP 可执行文件,因此它试图将 PHP 代码作为 bash 脚本执行。您的 cron 命令应如下所示:php /home2/mywebsite/whereIam/myscript.php
  • 尝试像0 0 * * * php /home2/mywebsite/whereIam/myscript.php这样将命令添加到cron作业中,有帮助吗?或者,您可以在脚本的第一行添加#!/usr/bin/php,并将权限设置为可执行。
  • 成功了!太开心了,谢谢!

标签: php mysql cron fopen


【解决方案1】:

有两种可能:

  • 将 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 路径不同的服务器意味着您必须编辑文件 - 第一个选项不需要这样做。

【讨论】:

    【解决方案2】:

    试试这个

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      • 2014-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-01
      • 1970-01-01
      相关资源
      最近更新 更多