我在这里读过Stackoverflow,文件里面的路径可能是个问题,但它看起来第一件事似乎失败了...除此之外我不知道,即使在这里检查了很多问题/答案之后。在某些时候,我认为这是因为我使用了PHP标记的简写版本(“<? ?>
”而不是“<?php ?>
”。
所以基本上,当我在浏览器“http://site.com/file.php”中键入url时,它运行正常(这是一个mysql备份+通过电子邮件发送)。但是当我尝试使用cron运行相同的文件时,我会收到错误...
我的服务器在MediaTemple上,cron是:
php -c /home/xxxxxxx/domains/xxxxxxxxxxxxxx.com/html/777/fnc/filenamexxxxxx.php --'bckup=1'
这是错误:
PHP:语法错误,意外'('在第2行的/nfs/c08/h02/mnt/xxxxxxx/domains/xxxxxxxxxxxxxxx.com/html/777/fnc/filenamexxxxxx.php
这是代码的第一部分(因为没有编辑,网站地址+电子邮件除外):
<?php
// envoi un courriel de tous les rv des 7 prochains jours pour chaque clinique à toutes les 30min (cron script lancé par cpanel)
session_start();
$bypass = 1;
//$_SESSION['rep'] = "777/";
include_once("inc_includes_principaux.php");
//error_reporting(E_ERROR);
// to send an automated backup by email, just link to this file like this with CRON:
if ($_GET['bckup']){
// va chercher les infos de connection
include_once('inc_bd_connexion.php');
// get cliniques
$cliniques = _get_clinique_info();//_p($cliniques);_x();
$date = date('Ymd');
$date7jours = _get_x_days_before($date, 7, '+');//_e($date7jours);_x();
// iterate cliniques and send email
foreach ($cliniques as $cliniqueid => $v) {
$emailthis = _get_rv_printformat($date, $date7jours, $cliniqueid);// start, end, id
// send email to users
_email('emailaddressxxxxxxxx', $emailthis, 'LCJG - Horaire de '.$v['A29'].' du '._date_en_texte($date).' au '._date_en_texte($date7jours),'emailaddressxxxxxxxx');
sleep(1);//give a break to the server and let some other tasks execute
_email('emailaddressxxxxxxxx', $emailthis, 'LCJG - Horaire de '.$v['A29'].' du '._date_en_texte($date).' au '._date_en_texte($date7jours),'emailaddressxxxxxxxx');
unset($emailthis);
echo 'LCJG - Horaire de <b>'.$v['A29'].'</b> pour les 7 prochains jours envoyé par courriel.<br>';
}
}
?>`
答案 0 :(得分:1)
你无法在cli环境中开始会话
所以要在两个添加
中运行它if (!isset($argc)) {
//Not CLI
session_start();
}
OR
if (PHP_SAPI === 'cli')
{
// is cli
}
你的$ _GET也不会工作,值将在$ argv数组中。您需要了解一些脚本如何在CLI中运行以及通过Web服务器运行。
答案 1 :(得分:1)
为了避免更改我的代码,因为我想要一个易于实现的解决方案,我遵循Dagon建议使用wget,而是使用CURL。所以我可以完全保持我的代码,只需调用我的文件,以便在特定时间执行它。
无需更改我的脚本即可运行的代码是:
curl www.aaaaaaa.com/file-to-execute.php?arg=1
有了这个,cron跑得很好,现在一切都很好。谢谢大家的帮助!
答案 2 :(得分:0)
而不是-c
你的意思是使用-f
CLI参数吗?
$ php --help
-c <path>|<file> Look for php.ini file in this directory
-f <file> Parse and execute <file>.
看起来php可能会尝试将您的脚本解析为INI文件,然后从STDIN查找您的脚本。 (否则,我不确定为什么php会忽略-c
并继续执行你的PHP文件作为目标脚本。)