我怎样才能让 PHP 内联显示图片
how can i make PHP to display pictures inline
我需要帮助以内嵌方式显示文件夹中的所有图片,而不是相互重叠。
<?php
$files = glob("bilder/*.*");
for ($i=1; $i<count($files); $i++)
{
$image = $files[$i];
$supported_file = array(
'gif',
'jpg',
'jpeg',
'png'
);
$ext = strtolower(pathinfo($image, PATHINFO_EXTENSION));
if (in_array($ext, $supported_file)) {
echo '<img src="'.$image .'" width="400" height="500" />'."<br /><br />";
} else {
continue;
}
}
?>
您应该使用 css 类 和样式。
echo '<img src="'.$image .'" class="someClass" />';
然后将您的样式表包含在 html head
<link rel="stylesheet" href="stylesheet.css">
最后在 stylesheet.css
中设置您的图像样式
.someClass{
display: inline-block;
padding: 3px;
}
所有这些都是最基本的 html 和 css 东西。请考虑在提问之前阅读一些教程。
没有任何其他 HTML,图像默认内联显示。但是你用 "<br /><br />"
添加的中断使这种行为无效,并使图像换行到一列中。
所以只需删除那些中断。如果您关心的是包装 HTML 代码本身,则插入换行符 (\n
)。
我借此机会强调您的 PHP 代码中可以改进的某些方面:
- 当那是循环的最后一条语句时,执行
continue;
是没有用的。你可以把 else
块放在外面;
- PHP 有一个很好的循环数组结构,即
foreach
。使代码更紧凑的同时提高了可读性;
- 您在循环的每次迭代中将变量 $supported_file 初始化为相同的值:这应该发生在循环之外;
- 要过滤文件名数组,可以使用
preg_grep
;
- 因为 HTML 支持单引号作为值分隔符,而 PHP 将在双引号中扩展变量名,你(在我看来)通过切换使用 double/single 得到更好的代码引号。
此代码的清理结果:
$files = preg_grep('/^.*\.gif|jpg|jpeg|png$/i', glob("bilder/*.*"));
foreach ($files as $image) {
echo "<img src='$image' width='400' height='500'/>\n";
}
关于应用于图像的 HTML 属性 width
和 height
:
这确实是要避免的事情。您应该改为使用这些图像的正确尺寸,因为图像可能会因强加尺寸而变得丑陋。如果它们是您的图像,则使这些图像具有合适的尺寸。我在上面的代码中保留了这些属性,但请重新考虑你如何处理图像大小。
我还注意到您在 pastebin.com 上分享的 HTML 中的一个问题:
title
和 meta
标签应该移到 head
标签中,它们不应作为 html
标签的直接子标签出现。
- 另请注意,您通过
body
标签加载了背景图片。我希望您没有误解,因为该图像肯定会与您制作的其他 img
标签重叠。
我需要帮助以内嵌方式显示文件夹中的所有图片,而不是相互重叠。
<?php
$files = glob("bilder/*.*");
for ($i=1; $i<count($files); $i++)
{
$image = $files[$i];
$supported_file = array(
'gif',
'jpg',
'jpeg',
'png'
);
$ext = strtolower(pathinfo($image, PATHINFO_EXTENSION));
if (in_array($ext, $supported_file)) {
echo '<img src="'.$image .'" width="400" height="500" />'."<br /><br />";
} else {
continue;
}
}
?>
您应该使用 css 类 和样式。
echo '<img src="'.$image .'" class="someClass" />';
然后将您的样式表包含在 html head
<link rel="stylesheet" href="stylesheet.css">
最后在 stylesheet.css
中设置您的图像样式.someClass{
display: inline-block;
padding: 3px;
}
所有这些都是最基本的 html 和 css 东西。请考虑在提问之前阅读一些教程。
没有任何其他 HTML,图像默认内联显示。但是你用 "<br /><br />"
添加的中断使这种行为无效,并使图像换行到一列中。
所以只需删除那些中断。如果您关心的是包装 HTML 代码本身,则插入换行符 (\n
)。
我借此机会强调您的 PHP 代码中可以改进的某些方面:
- 当那是循环的最后一条语句时,执行
continue;
是没有用的。你可以把else
块放在外面; - PHP 有一个很好的循环数组结构,即
foreach
。使代码更紧凑的同时提高了可读性; - 您在循环的每次迭代中将变量 $supported_file 初始化为相同的值:这应该发生在循环之外;
- 要过滤文件名数组,可以使用
preg_grep
; - 因为 HTML 支持单引号作为值分隔符,而 PHP 将在双引号中扩展变量名,你(在我看来)通过切换使用 double/single 得到更好的代码引号。
此代码的清理结果:
$files = preg_grep('/^.*\.gif|jpg|jpeg|png$/i', glob("bilder/*.*"));
foreach ($files as $image) {
echo "<img src='$image' width='400' height='500'/>\n";
}
关于应用于图像的 HTML 属性 width
和 height
:
这确实是要避免的事情。您应该改为使用这些图像的正确尺寸,因为图像可能会因强加尺寸而变得丑陋。如果它们是您的图像,则使这些图像具有合适的尺寸。我在上面的代码中保留了这些属性,但请重新考虑你如何处理图像大小。
我还注意到您在 pastebin.com 上分享的 HTML 中的一个问题:
title
和meta
标签应该移到head
标签中,它们不应作为html
标签的直接子标签出现。- 另请注意,您通过
body
标签加载了背景图片。我希望您没有误解,因为该图像肯定会与您制作的其他img
标签重叠。