PHP和图像创建中的Crontab问题

PHP和图像创建中的Crontab问题,php,image,crontab,Php,Image,Crontab,上下文: 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 . '-' .

上下文:
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" />
我编写了一个脚本,从服务器下载一个图像,将白色设置为透明,并将图像保存在根文件夹中。它还将图像的副本保存在单独的文件夹“images”中,并在名称中注明日期和时间

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

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

Crontab(以防出现问题):

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" />
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" />
包括“mysql.php”;
$im=imagecreatefromgif(“图像url”);
$hash=hash_文件('md5',“图像_url”);
$day=日期(“j”);
$month=日期(“n”);
$year=日期(“Y”);
$hour=日期(“G”);
$minute=日期(“i”);
$file='image'$一天$月份$年$小时$分钟。gif';
回声“散列:”$搞砸“
”; 回声“开始:”。日期(“H:i:s”)。“
”; $result=mysql_查询(“从图片中选择*,其中hash='$hash'限制1”); $num=mysql\u num\u行($result); 如果($num==0){ mysql_查询(“插入图片(年、月、日、小时、分钟、散列、文件)值(“$year”、“$month”、“$year”、“$hour”、“$minute”、“$hash”、“$file”)); $dest=imagecreatetruecolor(799599); 图像拷贝($dest,$im,0,0,10,49799599); $color=imagecolorexact($dest,255,255,255); imagecolortransparent($dest,$color); imagegif($dest',./image.gif'); imagegif($dest'./images/'.$file); 图像销毁($dest); 图像处理(港币);; } 回声“结束:”。日期(“H:i:s”); ?>
编辑:
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文件以使用下载的图像,但问题并没有消失。不创建任何图像

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

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

error_reporting(E_ALL);
ini_set("display_errors", 1);

在脚本文件夹(如主文件夹)中的任何其他文件夹中尝试crontab行


如果脚本在本例中运行。这样就有可能crontab根本没有为您的用户运行。然后配置cron日志或签入syslog以获取任何信息

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

*/5 * * * * www-data /usr/bin/php5 -f /var/www/radar.php > /var/www/logPHP.log 2>&1
您的
/var/log/syslog
应该抱怨crond错误,比如
缺少用户名


祝您的项目好运。

脚本由crontab运行,数据库得到更新,但图像没有创建。显然,错误的路径或用户权限将是问题所在。除了缺少favicon之外,我什么也得不到。至少不在/var/log/apache2/error.log中,我尝试了www-data,我的用户名,root。我甚至试过使用我的用户名:www-data和www-data:www-data。