上下文: 我写了一个脚本,从服务器下载图像,将白色设置为透明,并将图像保存在根文件夹中。它还将图像的副本保存在单独的文件夹“images”中,其名称中包含日期和时间。
因为我不确切知道图像刷新的时间,所以我会在数据库中保留图像的哈希值以及创建日期和文件名。
问题: 我希望脚本每5分钟自动运行一次,所以我在服务器上创建了一个crontab(Ubuntu Server 12.04)。 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" />
修改 现在我在crontab中添加了另一行,用wget下载图像并将其保存到特定文件夹中。图像下载没有问题。我还编辑了php文件以使用下载的图像,但问题不会消失。没有创建图像。
答案 0 :(得分:0)
AFAIK,CLI PHP使用与您的Web服务器关联的文件不同的ini文件。如果这也是你的情况,那么调用include()可能会通过完全不同的include_path(s)进行轮询,因此无法找到mysql.php
打开此页面的错误报告,看看是否显示错误。
error_reporting(E_ALL);
ini_set("display_errors", 1);
答案 1 :(得分:0)
尝试通过脚本文件夹中的任何其他文件夹(如主文件夹)尝试crontab行。
/usr/bin/php5 -f /var/www/radar.php
如果脚本在这种情况下运行。然后,crontab可能根本不为您的用户运行。然后配置cron日志或检查syslog以获取任何信息。
答案 2 :(得分:0)
您的crontab文件错过了应该运行该脚本的用户名。尝试类似的东西:
*/5 * * * * www-data /usr/bin/php5 -f /var/www/radar.php > /var/www/logPHP.log 2>&1
您的/var/log/syslog
应该抱怨像missing username
这样的crond错误。
祝你好运。