2010-03-20 7 views
0

Ниже приведен код, как будто он должен работать; однако, blob в базе данных содержит только 0 после запуска функции. Правильно ли выглядит код ниже? Если нет, то как я могу это исправить?Миниатюры, а затем Сохранение как Blob с PHP в Wordpress

$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'"); 

Thank :)!

+0

Вы уверены, что хотите сохранить картину в базе данных? Я предполагаю, что ваш следующий вопрос будет состоять в том, как отобразить его :) –

+0

hahaha, no i know how to display it ... Обычно я храню файлы в базе данных ... Может быть, я не буду хранить в БД. Возможно, это пустая трата ресурсов. – Parris

+0

Хотя это имело смысл, когда я шел по этому пути. – Parris

ответ

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. ваши изображения меньше, чем 2 МБ
  2. Вы намерены хранить не более загар 1Гб в общей сложности (и даже на 1 Гб вы растягивая его).

Во всех остальных случаях сохраните изображение на диске и сохраните местоположение указанного изображения в базе данных.

+0

Было что-то не так ... Пекка тоже была права, но я принял твое, потому что ты изменил в коде все больше вещей. Согласен. Я не думаю, что более 5 мегабайт будет храниться. Пока каждая картина составляет 1кб или меньше. – Parris

+0

«Были некоторые вещи неправильные», пожалуйста, укажите, что было не так. – Jacco

1

Вам обязательно нужно добавить кавычки; а затем I угадать вам нужно было бы mysql_real_escape_string() весь эскиз.

$thumbnail = mysql_real_escape_string($thumbnail); 

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