0

cron スクリプトで行き詰まっており、あなたの助けが必要です。

私のサイトは 1and1 サーバーでホストされています。クラス関数構造を使用してphpでcronスクリプトを作成しました。

実際には 2 つのスクリプトがあります。1) init.php 2) job.php

init.php に、必要なクラスと関数を記述しました。job.php スクリプトの上部と下部に init.php を含め、他の機能 (データベース クエリと電子メールの送信) を記述しました。

ブラウザ (http://www.abc.com/job.php) を使用してスクリプトを直接実行すると、スクリプトは正常に実行されます。メールを受信して​​います。しかし、シェルを使用してこのスクリプトを cron タスクとして設定した後、応答がありません。cronのエラーログも確認する方法がわかりません。

php ファイルのサンプル構造を以下に示します。

init.php:

define('DB_SERVER','***********');
define('DB_USERNAME','*******');
define('DB_PASSWARD','******');
define('DB_DATABASE','*******');


class information{

   public function __construct(){
        $connection = mysql_connect(DB_SERVER,DB_USERNAME,DB_PASSWARD) or die ('connection error'.mysql_error());
        mysql_select_db(DB_DATABASE,$connection) or die('database error'.mysql_error());
   }

   public function configuration(){

        $sql = "SELECT * FROM config order by id";
        $exe = mysql_query($sql);

        $site_config = array();

        while($res = mysql_fetch_array($exe)){      
            $site_config[$res['name']]=$res['value'];
        }
        return $site_config;
    }

}

$obj = new information;

ジョブ.php:

require('init.php');

class Achdirect_cmi
{
    private $ID;
    private $AID;
    private $Key;

    public $site_config;

    public function __construct()
    {
        global $obj;

        $this->site_config = $obj->configuration();


        $this->ID           = $this->site_config['id']; 
        $this->AID           = $this->site_config['A_id'];
        $this->Key = $this->site_config['key'];     

    }
.
.
.
.

}

このスクリプトの実行を手伝ってください。

**cron ジョブは、SSH アクセスを使用してセットアップされます。

以下のコマンドは、cron スクリプトを設定するために使用されています。

          • /usr/bin/php /a/b/htdocs/scripts/job.php

シェル コマンドと構成が実行されるかどうかを確認するために、テスト スクリプトも追加しました。テスト スクリプトは正しく実行されました。**

機能を 1 つずつ分析した結果、以下のコードが実行されていないことがわかりました。変数は正しく初期化されていますが、「SoapClient」のオブジェクトが作成されていません。クラス SoapClient は私が定義したものではありませんが、php5 のコア機能であることに注意してください。

try{

$client = new SoapClient($url, array("location" => $location));

$params = array("ticket" => $auth_array, "MerchantID" => $MerchantID, "TransactionID" => $trace_number );

$response = $client->getTransaction($params);

}
catch (Exception $e){ 

echo $e->getMessage();
}

必要なものを提案してください。

4

1 に答える 1

0

あなたの問題は、おそらく「require('init.php');」です。

cron ジョブは、job.php ファイルがあるパスからではなく、cron がある場所から実行されます。そのため、ファイルをインクルードする場合は、インクルード ファイルのフル パスを含める必要があります。

require('/a/b/htdocs/scripts/init.php');

(それが正しいディレクトリであれば、興味深い命名構造のようです!)

于 2012-06-26T06:55:03.303 に答える