缩略图然后在Wordpress中使用PHP保存为Blob

时间:2010-03-20 19:46:29

标签: php mysql wordpress file-upload thumbnails

以下代码似乎应该有效;但是,数据库中的blob在运行函数后仅包含0。以下代码看起来准确吗?如果没有,我该如何解决?

$tmpName  = $_FILES['picture']['tmp_name'];

$fp      = fopen($tmpName, 'r');
$binary = fread($fp, filesize($tmpName));
fclose($fp);

$originalImage = imagecreatefromstring($binary);
$tempImage = imagecreate(100,100);
imagecopyresized($tempImage,$originalImage,0,0,0,0,100,100);
ob_start();
imageJPEG($tempImage);
$thumbnail = ob_get_contents();
ob_end_clean();

$wpdb->query("UPDATE ".$wpdb->prefix."items SET picture = $thumbnail WHERE id=$id'");

谢谢:))

2 个答案:

答案 0 :(得分:1)

你肯定需要添加引号;然后我你必须mysql_real_escape_string()整个缩略图代码。

$thumbnail = mysql_real_escape_string($thumbnail);

$wpdb->query("UPDATE ".$wpdb->prefix."items SET picture = '$thumbnail' WHERE 
             id='$id'");

答案 1 :(得分:1)

您可能希望将blob /图片数据作为十六进制发送到数据库,因为这是最有效的方法:

if ( is_uploaded_file($_FILES['picture']['tmp_name']) ) {
    $originalImage = imagecreatefromjpeg($_FILES['picture']['tmp_name']);
    $thumbImage = imagecreatetruecolor(100, 100);
    imagecopyresized($thumbImage, $originalImage, 0, 0, 0, 0, 100,100);

    imagedestroy($originalImage); // Free the memory as soon as possible

    ob_start();
    imagejpeg( $thumbImage, NULL, JPEG_QUALITY);
    $thumbData = ob_get_contents();
    ob_end_clean();

    imagedestroy($thumbImage);


    $wpdb->query("UPDATE ".$wpdb->prefix."items SET picture = x'".bin2hex($thumbData)."' WHERE id=$id'");
}

请注意x'".bin2hex($thumbData)."' x将字符串的内容标记为十六进制。

请注意:
关于将图像存储在数据库中是否是一个好主意存在很多争论。普遍的共识是,这是一个坏主意,除非:

  1. 您的图片尺寸小于2MB
  2. 你打算不再存储1GB棕褐色(即使是1GB你也可以拉伸它)。
  3. 在所有其他情况下,将图像存储在磁盘上并将所述图像的位置存储在数据库中。