英文:
Send image to browser as a PHP post response
问题
所以,我正在使用CURL进行POST请求:
<?php
$url = 'http://url/to/site';
$data = array(
"tk" => $_GET["tk"]
);
$ch = curl_init($url);
// 设置请求选项
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
$response = curl_exec($ch);
if (curl_errno($ch)) {
$response = curl_error($ch);
}
curl_close($ch);
echo $response;
在另一个网站上,我使用tk进行数据库搜索,然后发送响应:
$bs = new lecRed; // lecRed是我之前创建和使用过的一个类
$tk = $_POST["tk"];
$rspta = $bs->searchByTK($tk)->fetchObject(); // 在这里从数据库中检索信息
$arr = array(
"id" => $rspta->ide,
"name" => $rspta->name,
"adsc" => $rspta->adsc,
"pic" => $rspta->pic
);
echo "<h1>ID: " . $arr["id"] . "</h1>";
echo "<h1>NAME: " . $arr["name"] . "</h1>";
echo "<h1>ADSC: " . $arr["adsc"] . "</h1>";
到目前为止,一切正常。但现在我想要"echo"图片。我在服务器上有这张图片(与上一个PHP文件相同的路径)。
我尝试了以下代码:
echo "<img src='".$arr["pic"]."' />";
但它没有起作用。我还尝试了以下代码:
$file = 'img/' . $arr["pic"];
$type = 'image/jpeg';
header('Content-Type:' . $type);
header('Content-Length: ' . filesize($file));
readfile($file);
但它只显示了一些奇怪的字符:
我尝试了以下代码:
$file = 'img/' . $arr["pic"];
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
但结果还是一样。
我还尝试使用GD库:
header('content-type: image/jpeg');
$image_file_path = "img/" . $arr["pic"];
switch (pathinfo($image_file_path)['extension']) {
case 'png':
$image = imagecreatefrompng($image_file_path);
break;
case 'gif':
$image = imagecreatefromgif($image_file_path);
break;
default:
$image = imagecreatefromjpeg($image_file_path);
}
echo imagejpeg($image);
imagedestroy($image);
但仍然没有起作用。我已经没有其他选择了。有人有任何想法吗?
英文:
So, I'm making a post request with CURL:
<?php
$url = 'http://url/to/site';
$data = array(
"tk" => $_GET["tk"]
);
$ch = curl_init($url);
//seteamos la petición
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
$response = curl_exec($ch);
if (curl_errno($ch)) {
$response = curl_error($ch);
}
curl_close($ch);
echo $response;
and in the other site I'm doing a database search with the tk, and then sending a response:
$bs = new lecRed; //lecRed it's a class I created and used before
$tk = $_POST["tk"];
$rspta = $bs->searchByTK($tk)->fetchObject();//here I retrieve the info from the DB
$arr = array(
"id" => $rspta->ide,
"name" => $rspta->name,
"adsc" => $rspta->adsc,
"pic" => $rspta->pic
);
echo "<h1>ID: " . $arr["id"] . "</h1>";
echo "<h1>NAME: " . $arr["name"] . "</h1>";
echo "<h1>ADSC: " . $arr["adsc"] . "</h1>";
So far it is working fine. But now I want to "echo" the image. I have the image in the server (in the same route as the last php file).
I tried doing:
echo "<img src='".$arr["pic"]."' />";
but it didn't worked. I also tried:
$file = 'img/' . $arr["pic"];
$type = 'image/jpeg';
header('Content-Type:' . $type);
header('Content-Length: ' . filesize($file));
readfile($file);
but it only shows this weird characters:
I tried this:
$file = 'img/' . $arr["pic"];
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
but it's more of the same.
I also tried using de gd library:
header('content-type: image/jpeg');
$image_file_path = "img/" . $arr["pic"];
switch (pathinfo($image_file_path)['extension']) {
case 'png':
$image = imagecreatefrompng($image_file_path);
break;
case 'gif':
$image = imagecreatefromgif($image_file_path);
break;
default:
$image = imagecreatefromjpeg($image_file_path);
}
echo imagejpeg($image);
imagedestroy($image);
But nothing worked. I ran out of options. Anyone have any idea?
答案1
得分: 2
一种解决方案是使用“数据URL”:<img src="data:..."
https://www.w3docs.com/snippets/html/how-to-display-base64-images-in-html.html
使用Base64编码的图像可以通过使用
<img>
标签嵌入到HTML中。这可以通过减少浏览器发出的额外HTTP请求来提高较小图像的页面加载时间。Base64编码和数据URL是相辅相成的,因为数据URL减少了浏览器显示HTML文档所需的HTTP请求数量。
<img>
标签具有一个src属性,其中包含图像的数据URL。数据URL由两部分组成,用逗号分隔。第一部分指定了Base64编码的图像,第二部分指定了图像的Base64编码字符串。
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" />
此链接提供了几个示例,使用PHP的base64_encode()
函数:
英文:
One solution is to use a "Data URL": <img src="data:...
> https://www.w3docs.com/snippets/html/how-to-display-base64-images-in-html.html
>
> Images encoded with Base64 can be embedded in HTML by using the <img>
> tag. This can help to increase the page load time for smaller images
> by saving the browser from making additional HTTP requests.
>
> Base64 encoding and Data URL go hand-in-hand, as Data URLs reduce the
> number of HTTP requests that are needed for the browser to display an
> HTML document.
>
> The <img>
tag has a src attribute and contains the Data URL of the
> image. A Data URL is composed of two parts, which are separated by a
> comma. The first part specifies a Base64 encoded image, and the second
> part specifies the Base64 encoded string of the image.
>
> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4
> //8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" />
This link has several examples, using PHP base64_encode():
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论