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

コードを変更しないようにするため、また実装が簡単なソリューションが必要だったため、Dagonの提案に従ってwgetを使用しましたが、代わりにCURLを使用しました。そのため、コードをそのままにして、特定の時間に実行するためにファイルを呼び出すことができました。

スクリプトを変更せずに機能したコードは次のとおりです。

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

これにより、cronは完全に実行され、すべてが正常になりました。助けてくれてありがとう!

于 2012-12-31T03:04:33.443 に答える
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 に答える
0

代わりに、 CLI パラメータ-cを使用するつもりですか?-f

$ php --help
-c <path>|<file> Look for php.ini file in this directory
-f <file>        Parse and execute <file>.

PHP がスクリプトを INI ファイルとして解析し、S​​TDIN からスクリプトを探しているようです。-c(それ以外の場合、なぜ php が を無視して PHP ファイルをターゲット スクリプトとして実行するのかわかりません。)

于 2012-10-24T19:36:16.803 に答える