自动循环胶片显示窗格不起作用


Auto looping filmstrip not working

我正在用PHP尝试不同的事情,从我的摄影作品创建一个网站。有许多现成的画廊,但这不是我要找的。

我有基础,这是保存在文件夹中的照片,其名称与内容相关。文件夹的名称显示在表格中,单击名称时,想法是打开另一个页面,该页面将显示所选文件夹中所有照片的幻灯片放映。

当前使用:

$Dir =$_GET[file];
$files = glob("images/$Dir/*.jpg");
for ($i=0; $i<=count($files); $i++)
{   
  $num = $files[$i];
  echo '<img src="'.$num.'" alt="random image" />'."<br /><br />";
}

这将打开正确的文件夹并在 <div> 、标签中显示第一张照片,但不会生成我想要的胶片。

这将打开正确的文件夹并显示第一张照片

我很惊讶你竟然能看到第一张照片!

您当前的代码根本无法工作,因为:

  • $files = glob($pattern)期望$pattern并将每个$files[$i]作为物理路径返回
  • <img src="source">希望source是一个网址
  • 所以编写'<img src=" . $files[$i] . '">'没有意义:它分配了一个物理路径
  • ,其中需要URL是
  • 更重要的是,您的初始$files = glob("images/$Dir/*.jpg");无法返回任何内容,因为images/不是系统中任何路径的根。

相反,您必须:

  1. 使用文件夹内容的物理路径正确查找文件夹内容glob()
  2. 使用结果时,将每个物理路径"翻译"为相应的URL(取决于您的网站本地化)

要实现此转换,您可以使用 dirname($_SERVER["SCRIPT_FILENAME"]) ,它为您提供脚本的完整物理路径:您必须将其附加到glob()模式,然后将其从找到的文件路径中删除。

最后你可以写这样的东西:

$site_root = dirname($_SERVER["SCRIPT_FILENAME"]);
$root_length = strlen($site_root) + 1;
if ($files = glob("$site_root/images/$_GET[file]/*.jpg")) {
  foreach ($files as $file) {   
    echo '<img src="' . substr($file, $root_length) . '" alt="random image" /><br /><br />';
  }
}

请注意:

  • $root_length中的+ 1也需要删除"/",因此保持图像 URL 相对于站点根目录
  • 使用 foreach() 循环访问找到的文件比for ()更简单
  • if ($files...)是为了避免在glob()返回false的情况下对foreach触发错误