2

コンテキスト: サーバーから画像をダウンロードし、白色を透明に設定し、画像をルート フォルダーに保存するスクリプトを作成しました。また、画像のコピーを別のフォルダ「images」に日付と時刻を名前に付けて保存します。

画像がいつ更新されるか正確にはわからないため、作成日とファイル名とともに画像のハッシュをデータベースに保持しています。

問題: スクリプトを 5 分ごとに自動的に実行したいので、サーバー (Ubuntu Server 12.04) に crontab を作成しました。Crontab は 5 分ごとにスクリプトを実行しますが、実際の画像を保存せずに新しいレコードをデータベースに追加するだけです。コンソールまたは Web ブラウザからスクリプトを手動で実行しようとすると、イメージが保存され、データベース レコードが更新されます。

Crontab (何か問題がある場合):

*/5 * * * * /usr/bin/php5 -f /var/www/radar.php > /var/www/logPHP.log 2>&1

PHP コード:

include 'mysql.php';

$im = imagecreatefromgif("image_url");
$hash = hash_file('md5', "image_url");

$day = date("j");
$month = date("n");
$year = date("Y");
$hour = date("G");
$minute = date("i");

$file = 'image' . $day . '-' . $month . '-' . $year . '_' . $hour . '_' . $minute . '.gif';

echo "Hash: " . $hash . "<br />";
echo "Start: " . date("H:i:s") . "<br />";

$result = mysql_query("SELECT * FROM pictures WHERE hash = '$hash' LIMIT 1");
$num = mysql_num_rows($result);
if ($num == 0) {
    mysql_query("INSERT INTO pictures (year, month, day, hour, minute, hash, file) VALUES ('$year', '$month', '$year', '$hour', '$minute', '$hash', '$file')");

    $dest = imagecreatetruecolor(799, 599);
    imagecopy($dest, $im, 0, 0, 10, 49, 799, 599);

    $color = imagecolorexact($dest, 255, 255, 255);
    imagecolortransparent($dest, $color);

    imagegif($dest, './image.gif');
    imagegif($dest, './images/' . $file);
    imagedestroy($dest);
    imagedestroy($im);
}
echo "End: " . date("H:i:s");
?>
<br /><img src="./image.gif" />

編集: wgetでイメージをダウンロードして特定のフォルダーに保存する別の行をcrontabに追加しました。問題なく画像がダウンロードされます。ダウンロードした画像を使用するようにphpファイルも編集しましたが、問題は解決しません。イメージは作成されません。

4

3 に答える 3

0

私の知る限り、CLI PHP は、Web サーバーに関連付けられているものとは異なる ini ファイルを使用します。これもあなたのケースである場合、include() への呼び出しは完全に異なる include_path(s) を介してポーリングされている可能性があり、したがって mysql.php を見つけることができません

このページのエラー報告をオンにして、エラーが表示されるかどうかを確認してください。

error_reporting(E_ALL);
ini_set("display_errors", 1);
于 2013-04-08T06:43:59.783 に答える
0

crontab ファイルに、スクリプトを実行する必要があるユーザー名がありません。そのようなことを試してください:

*/5 * * * * www-data /usr/bin/php5 -f /var/www/radar.php > /var/www/logPHP.log 2>&1

のようなcrond/var/log/syslogエラーについて不平を言うべきmissing usernameでした。

プロジェクト頑張ってください。

于 2013-04-08T08:17:07.737 に答える