我正在用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/
不是系统中任何路径的根。
相反,您必须:
- 使用文件夹内容的物理路径正确查找文件夹内容
glob()
- 使用结果时,将每个物理路径"翻译"为相应的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
触发错误