gpt4 book ai didi

php - Wordpress - 从数据库中获取图像存储为 blob 数据

转载 作者:行者123 更新时间:2023-11-29 05:06:49 26 4
gpt4 key购买 nike

我有一个表单上传到数据库并将图像存储为 blob。我无法让它们输出。

上传代码:

$image =  strip_tags(file_get_contents($_FILES['image']['tmp_name']));
$image_name = strip_tags($_FILES['image']['name']);
$image_size = getimagesize($_FILES['image']['tmp_name']);
if($image_size == FALSE) {
echo 'An image has not been uploaded';
} else {
$wpdb->insert(
$table,
array(
'title' => $title,
'description' => $description,
'brand' => $brand,
'img_name' => $image_name,
'img' => $image,
)
);

显示图片的代码:

$product_id = get_query_var('id');

$image = $wpdb->get_results( "SELECT * FROM products WHERE id = $product_id");

header("Content-Type: image/jpeg");

echo '<img src="data:image/jpeg;base64,'.base64_decode($image[0]->img).'" />';

我也试过调用一个单独的文件 get.php 但那也不起作用,例如

echo '<img src="/wp-content/themes/theme/scripta/get.php?id=' . $product_id . '" />';

get.php

中使用以下内容
$id = $_GET['id'];

$image = $wpdb->get_results( "SELECT * FROM products WHERE id = $id");

header("Content-Type: image/jpeg");

print_r($image);

我需要更改什么才能使其正常工作?

最佳答案

您正在获取表中该产品 ID 的所有信息,然后尝试将其显示为图像。您需要访问结果数组中的图像或 SELECT 仅访问图像,例如使用 get_var 而不是 get_results 并选择 img 而不是 *:

$product_id = get_query_var('id');
$image = $wpdb->get_var("SELECT img FROM products WHERE id = ".$product_id);

顺便说一下,这会让您对 SQL 注入(inject)敞开大门,因此您真的应该使用 $wpdb->prepare 在您的查询中包含一个变量,例如

$image = $wpdb->get_var( 
$wpdb->prepare("SELECT img FROM products WHERE id = %d", $product_id)
);

BLOB 大小限制

请注意,MYSQL 中的 BLOB 限制为 64kb。如果您的图像大于此,您将需要使用 16MB 的 MEDIUMBLOB

保存图片路径而不是直接在数据库中作为BLOB

一个更实用的解决方案是只保存路径。

为此,您需要创建一个文件夹来上传图像(例如,在我下面的代码中,它位于网络根目录中,名为 myimages),以及一个新的 VARCHAR 或 TEXT 列在您的数据库中(在下面的示例中称为 img_path)。

/* 1. Define the path to the folder where you will upload the images to, 
Note, this is relative to your web root. */
define (MY_UPLOAD_DIR, "myimages/");

$imagefilename = basename( $_FILES['image']['name']);

/* 2. define the full path to upload the file to, including the file name */
$fulluploadpath = get_home_path(). MY_UPLOAD_DIR . $imagefilename;

$image_name = strip_tags($_FILES['image']['name']);
$image_size = getimagesize($_FILES['image']['tmp_name']);

/* 3. Do your validation checks here, e.g. */
if($image_size == FALSE) {
echo 'The image was not uploaded';
}
/* 4. if everything is ok, copy the temp file to your upload folder */
else if(move_uploaded_file($_FILES['image']['tmp_name'], $fulluploadpath )) {
/* 5. if the file was moved successfully, update the database */
$wpdb->insert(
$table,
array(
'title' => $title,
'description' => $description,
'brand' => $brand,
'img_name' => $image_name,
'img_path' => MY_UPLOAD_DIR . $imagefilename, /* save the path instead of the image */
)
);

} else {
//Display an error if the upload failed
echo "Sorry, there was a problem uploading your file.";
}

从数据库中检索图像并显示它:

$product_id = get_query_var('id');
/* query the database for the image path */
$imagepath = $wpdb->get_var(
$wpdb->prepare("SELECT img_path FROM products WHERE id = %d", $product_id)
);

/* 6. Display the image using the path.
Because the path we used is relative to the web root, we can use it directly
by prefixing it with `/` so it starts at the webroot */
if ($imagepath)
echo '<img src="/'.$imagepath.'" />';

上面的代码未经测试,但基本思想已经存在。此外,如果已存在同名文件,它将不起作用,因此您可能需要考虑向名称添加时间戳以使其唯一。

引用:

关于php - Wordpress - 从数据库中获取图像存储为 blob 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46305530/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com