首页 > 解决方案 > 接受来自循环的文件路径并返回图像的 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;
?>

我对这些东西特别陌生,所以如果你们检查一下,这将是一个很大的帮助!蒂亚!

标签: php

解决方案


这是发生的事情:

  1. 您通过您喜欢的浏览器访问您的网页
  2. 服务器处理您的请求,并要求 PHP 创建一个包含 3<img src="pic.php" />
  3. 服务器将 HTML 文件返回到您的浏览器
  4. 浏览器分析你的 HTML 文件,检测到它有外部资源的链接,确实有 3 次pic.php,所以它开始要求服务器返回这个文件的内容
  5. 服务器再次处理请求并要求 PHP 返回给他的内容pic.php
  6. 服务端返回这个内容,HTML放了3次

最后你可以看到,即使你循环了3次,改变了3次$_SESSION['path'],服务器在战争结束后才看到c.php,所以它返回给浏览器。

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

解决方法

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

图片.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'>";
}
?>

推荐阅读