1

我在 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>';
}
}

?>`
4

3 回答 3

1

您无法在 cli 环境中启动会话

所以要同时运行它添加

if (!isset($argc)) {
    //Not  CLI
    session_start();
}

或者

if (PHP_SAPI === 'cli')
{
   // is cli
}

您的 $_GET 也不起作用,该值将在 $argv 数组中。您需要了解脚本如何在 CLI 中与通过 Web 服务器运行。

于 2012-10-24T19:39:18.303 回答
1

为了避免更改我的代码并且因为我想要一个易于实现的解决方案,我遵循 Dagon 的建议来使用 wget,但改为使用 CURL。所以我可以保持我的代码完全原样,只需调用我的文件以便在特定时间执行它。

在不更改我的脚本的情况下工作的代码是:

curl www.aaaaaaa.com/file-to-execute.php?arg=1

有了这个,cron 运行得很好,现在一切都很好。感谢你的帮助!

于 2012-12-31T03:04:33.443 回答
0

而不是-c您的意思是使用-fCLI 参数?

$ 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 文件作为目标脚本。)

于 2012-10-24T19:36:16.803 回答