PHP文件从循环接受文件路径并返回图像

时间:2018-11-18 08:47:47

标签: php

我正在尝试通过循环显示数据库中的多个图像。基本上就是这样

while loop is running{
$_SESSION['path'] = $imageURL;
echo '<img src="pic.php">';
}

我的想法是pic php获取路径然后显示它。然后进入另一个路径,它再次返回图像。

却没有。它只是返回最后检索到的图像,并重复进行直到循环完成。

所以不显示a.png,b.png和c.png。显示的是3 c.png。

这是我的pic.php

<?php
session_start();
$name = $_SESSION['path'];
$fp = fopen($name, 'rb');

header("Content-Type: image/png");
header("Content-Length: " . filesize($name));

fpassthru($fp);
exit;
?>

我对这个东西特别陌生,所以如果你们检查一下,它将对您有很大的帮助! TYIA!

1 个答案:

答案 0 :(得分:1)

发生了什么事

  1. 您通过喜欢的浏览器访问网页
  2. 服务器处理您的请求,并要求PHP创建包含3个<img src="pic.php" />
  3. 的HTML文件。
  4. 服务器将HTML文件返回到您的浏览器
  5. 浏览器分析您的HTML文件并检测到它具有指向外部资源的链接,实际上它有3次pic.php,因此它开始要求服务器返回此文件的内容
  6. 服务器再次处理请求,并要求PHP将pic.php的内容退还给他。
  7. 服务器返回此内容,并且 HTML将其放置3次

即使您循环3次并更改3次$_SESSION['path'],您也可以看到最后,服务器在战争后出现 ,并且仅看到c.php,因此将其返回到浏览器。

您应该采用另一种策略来获取图像。

解决方法

解决此问题的一种方法是按需获取图像,如下所示:

pic.php

<?php
session_start();

$name = filter_var($_GET['q'], FILTER_SANITIZE_URL);

$fp = fopen($name, 'rb');

header("Content-Type: image/png");
header("Content-Length: " . filesize($name));

fpassthru($fp);
exit;
?>

index.php (您访问的文件)

<?php
while loop is running{
    echo "<img src='pic.php?q=$imageURL'>";
}
?>