2

上下文: 我编写了一个脚本,它从服务器下载图像,将白色设置为透明,并将图像保存在根文件夹中。它还将图像的副本保存在单独的文件夹“图像”中,名称中包含日期和时间。

因为我不确切知道图像何时刷新,所以我将图像的哈希值连同创建日期和文件名一起保存在数据库中。

问题: 我希望脚本每 5 分钟自动运行一次,所以我在我的服务器(Ubuntu Server 12.04)上创建了一个 crontab。Crontab 确实每 5 分钟执行一次脚本,但是它只会将新记录添加到数据库中,而不会保存实际图像。当我尝试通过控制台或网络浏览器手动运行脚本时,它可以正常工作:保存图像并更新数据库记录。

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" />

编辑: 现在我在 crontab 中添加了另一行,它使用 wget 下载图像并将其保存到特定文件夹中。图像下载没有问题。我还编辑了 php 文件以使用下载的图像,但问题并没有消失。不创建图像。

4

3 回答 3

0

AFAIK,CLI PHP 使用的 ini 文件与与您的 Web 服务器关联的文件不同。如果这也是你的情况,那么对 include() 的调用很可能会通过完全不同的 include_path(s) 进行轮询,因此找不到 mysql.php

打开此页面的错误报告,看看是否显示错误。

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

好吧,通过脚本文件夹(如主文件夹)中的任何其他文件夹尝试您的 crontab 行。

/usr/bin/php5 -f /var/www/radar.php

如果脚本在这种情况下运行。那么可能根本没有为您的用户运行 crontab。然后配置 cron 日志或检查 syslog 以获取任何信息。

于 2013-04-08T06:50:02.300 回答
0

您的 crontab 文件缺少应该运行脚本的用户名。尝试这样的事情:

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

/var/log/syslog应该抱怨 crond 错误,例如missing username.

祝你项目好运。

于 2013-04-08T08:17:07.737 回答