2017-05-23 21 views
2

私はループを実行する毎分cronジョブを実行しています。私は各ループの結果をログファイルに出力しています。この関数はクラスの内部にあり、関数が手動で呼び出されると完全に正常に実行されます。しかし、関数がcronジョブを介して呼び出された場合、file_put_contents()は何もしません(この関数の残りの部分はテーブル挿入と同じです)。PHP cronジョブがfile_put_contents()経由でログを実行していません

protected function updatePair($time, $pair_reference, $price, $exchange_id) { 

    $exchange_reference = get_field('reference', $exchange_id); 

    global $wpdb; 
    $table = $wpdb->prefix . $pair_reference . '_' . $exchange_reference; 

    // Insert time and price into table 
    $wpdb->insert($table, array(
     "time" => $time, 
     "price" => $price 
    )); 

    //Write action to txt log 
    $log = "Pair: ".$pair_reference.' - '.date("F j, Y, g:i a").PHP_EOL. 
      "Attempt: Finished".PHP_EOL. 
      "-------------------------".PHP_EOL; 
    //- 
    file_put_contents('log/exchange.txt', $log, FILE_APPEND); 

} 
+0

を持っていませんでした。 chmod 0777 -R log/ – JYoThI

+0

この関数は、手動で呼び出されたときにログファイルに書き込みます。つまり、$ class-> updatePair(...)ですが、cronがそれを行うと決めるときではありません。 cronには異なる権限が必要ですか?初心者の疑問を言いなさい。 – Nick

+0

あなたはapacheユーザに許可を与える必要があります – JYoThI

答えて

0

まずログフォルダが存在したり、コードの下にすることにより確認することができていることを確認してください。

if(!file_exists(__DIR__ . '/log') && !is_dir(__DIR__ . '/log')){ 
    mkdir(__DIR__ . '/log'); 
} 

セカンド使用を絶対パス:あなたはフォルダをログに記録する書き込みpersmissionを

file_put_contents(__DIR__ . '/log/exchange.txt', $log, FILE_APPEND); 
+0

まだ関数はcronでは実行されていませんが、手動呼び出しでは機能します。確かに非常に奇妙です。 – Nick

+0

あなたのcronjobを追加するには? 'crontab -u user -e'を使っていますか? –

+0

WP cron for WordPress、この特定のインスタンスではcrontabを使用していません。 – Nick

関連する問題