我正在尝试编写一个函数来处理mySQL / PHP中的图像,但无法确定如何存储结果。我已经包含了一个精简版的代码来演示这个问题。
image.image_o中的blob都已正确存储,可用于将图像输出到网页。该函数运行时没有错误,但之后image.image_r中的blob只有几个字节长,包含“资源ID#5”等文本
我确信我做的事情是愚蠢的 - 只是看不出它是什么。
function process_images(){
global $mysql
$sql = "select id, image_o from image";
$res = mysqli_query($mysqli, $sql);
if ($res){
while ($ay = mysqli_fetch_array($res, MYSQLI_ASSOC)){
$id = $ay['id'];
$im = imagecreatefromstring($ay['image_o']);
// do something useful with the image
$sql2 = "update image set image_r = '{$im}' where id = $id";
$res2 = mysqli_query($mysqli, $sql2);
if ($res2){
// blah blah
}else{
echo mysqli_error($mysqli)." in res2";
}
}
}else{
echo mysqli_error($mysqli)." in res";
}
}
答案 0 :(得分:0)
我同意上面的评论,这通常是不可取的。但是,这里有一篇很棒的文章,说明为什么你可能会这样做,以及如何做。它还强调了在数据库中存储图像的一些缺点。
http://forum.codecall.net/topic/40286-tutorial-storing-images-in-mysql-with-php/
您需要确保将数据读入字段。不只是文件指针:
// Temporary file name stored on the server
$tmpName = $_FILES['image']['tmp_name'];
// Read the file
$fp = fopen($tmpName, 'r');
$data = fread($fp, filesize($tmpName));
$data = addslashes($data);
fclose($fp);
// Now take the contents of data and store THAT
简而言之,imagecreatefromstring返回“成功时将返回图像资源”,而不是文件本身的内容。您需要先读取该资源的内容,然后才能存储它。使用您的代码,进行以下更改:
function process_images(){
global $mysql
$sql = "select id, image_o from image";
$res = mysqli_query($mysqli, $sql);
if ($res){
while ($ay = mysqli_fetch_array($res, MYSQLI_ASSOC)){
$id = $ay['id'];
$im = imagecreatefromstring($ay['image_o']);
$tempFileName = '/tmp/' . $id . 'jpg';
$imTempFile = imagegd($im, $tempFileName);
$fh = fopen($tempFileName, "r");
$data = fread($fh, filesize($tempFileName));
// do something useful with the image
$sql2 = "update image set image_r = '{$data}' where id = $id";
$res2 = mysqli_query($mysqli, $sql2);
if ($res2){
// blah blah
}else{
echo mysqli_error($mysqli)." in res2";
}
//delete the temp file
unlink($tempFileName);
}
}else{
echo mysqli_error($mysqli)." in res";
}
}