自动循环幻灯片无法正常工作

时间:2016-04-26 06:19:27

标签: php

我正在尝试使用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>标签中显示第一张照片,但不会制作我想要的幻灯片。

1 个答案:

答案 0 :(得分:0)

  

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

我很惊讶你甚至得到了第一张照片!

您当前的代码根本无法正常运行,因为:

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

相反,你必须:

  1. 使用glob()
  2. 中的物理路径正确查找文件夹内容
  3. 使用结果时,将每个物理路径“翻译”到相应的网址(取决于您的网站本地化)
  4. 要实现此转换,您可以使用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 />';
      }
    }
    

    请注意:

      {li> + 1$root_length中也需要删除“/”,因此保留图片网址相对于网站根目录
    • 使用foreach()迭代找到的文件比for ()
    • 更简单
    • if ($files...)是为了避免在foreach返回glob()
    • 的情况下在false上触发错误