PHP 文件不会 运行 来自 Cron
PHP File Wont Run From Cron
我有以下 PHP 脚本,它建立到 MySQL 数据库的连接并运行 SQL 查询以获取 4 个字段,然后创建一个逗号分隔的文本文件输出。如果我将这个 PHP 文件放在我的 public_html 文件夹中并从我的网络浏览器浏览到它,它可以正常运行。但是,我想将此 PHP 脚本放在与 public_html 相同级别的唯一文件夹中,并通过我的 Cpanel 中的 CRON 作业调用它。当我这样做时,我得到了附加的错误。
脚本位置
/home2/mywebsite/whereIam/myscript.php
文本文件输出位置
/home2/mywebsite/public_html/text.txt
Cron 作业
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);
?>
试试这个
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
有两种可能:
将 cronjob 更改为:
0 0 * * * php /home2/mywebsite/whereIam/myscript.php
请注意,php
命令已添加为参数文件名。否则,cron 会尝试执行 PHP 文件,但它不知道它应该作为 PHP.
执行
有一种方法可以告诉 OS PHP 文件应该作为 PHP 执行。将此作为第一行添加到脚本中:
#!/usr/bin/php
同时设置文件可执行权限。现在,您可以从 shell 中执行它,就好像它是一个命令一样 - 而且 cronjob 无需修改即可工作。
这当然是假设 PHP 可执行文件在 /usr/bin/php
中。您可以使用命令 which php
查找系统上的位置。
我想选择哪个是个人喜好的问题。我喜欢第二个选项,因为它允许您从命令行执行文件,而无需显式使用 php
命令。但是,如果第二个选项移动到另一台服务器,路径可能与 php
不同,则意味着您必须编辑文件 - 第一个选项不需要这样做。
我有以下 PHP 脚本,它建立到 MySQL 数据库的连接并运行 SQL 查询以获取 4 个字段,然后创建一个逗号分隔的文本文件输出。如果我将这个 PHP 文件放在我的 public_html 文件夹中并从我的网络浏览器浏览到它,它可以正常运行。但是,我想将此 PHP 脚本放在与 public_html 相同级别的唯一文件夹中,并通过我的 Cpanel 中的 CRON 作业调用它。当我这样做时,我得到了附加的错误。
脚本位置 /home2/mywebsite/whereIam/myscript.php
文本文件输出位置 /home2/mywebsite/public_html/text.txt
Cron 作业 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);
?>
试试这个
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
有两种可能:
将 cronjob 更改为:
0 0 * * * php /home2/mywebsite/whereIam/myscript.php
请注意,
php
命令已添加为参数文件名。否则,cron 会尝试执行 PHP 文件,但它不知道它应该作为 PHP. 执行
有一种方法可以告诉 OS PHP 文件应该作为 PHP 执行。将此作为第一行添加到脚本中:
#!/usr/bin/php
同时设置文件可执行权限。现在,您可以从 shell 中执行它,就好像它是一个命令一样 - 而且 cronjob 无需修改即可工作。
这当然是假设 PHP 可执行文件在
/usr/bin/php
中。您可以使用命令which php
查找系统上的位置。
我想选择哪个是个人喜好的问题。我喜欢第二个选项,因为它允许您从命令行执行文件,而无需显式使用 php
命令。但是,如果第二个选项移动到另一台服务器,路径可能与 php
不同,则意味着您必须编辑文件 - 第一个选项不需要这样做。