我一直在试图解决这个问题。
我从官方的php网站上找到了这段效果很好的代码片段。但是,如果我将一个图像和一个pdf放在文件夹中,它就会显示出来。照片。
我需要一种非常简单的方法来扫描一个directroy,检查它的jpg,然后只显示一张照片。
请告诉我如何更改以下代码,或者我是否需要根据自己的需要编写不同的代码。
<?php // no access
.............
// globals
.............
// make article title lower case
$str = strtolower($articleTitle);
$files= scandir("images/gallery/".$str."/");
$photos = array();
for ($x=0; $x<count($files); $x++){
$files[$x]="images/gallery/".$str."/".$files[$x];
if (is_dir($files[$x])){
$thisfolder=scandir($files[$x]);
for ($f=0; $f<count($thisfolder); $f++)
if (strpos(strtolower($thisfolder[$f]), ".jpg"))
$photos[]=$files[$x]."/".$thisfolder[$f];
}
}
$rand=rand(0, count($photos)); ?>
<img src="includes/crop.php?src=<?php echo $photos[$rand];?>&h=115&w=650&q=90" title="<?php echo $photos[$rand];?>" />
再次提前致谢:) 约翰
答案 0 :(得分:2)
更改行
$rand=rand(0, count($photos))
到
$rand=rand(0, count($photos)-1)
您是否使用rand选择随机图像,但您必须限制间隔中的值 [0,count($ photos)-1]否则会发生索引溢出。这个bug会影响你的代码,但是这个目录只包含一个问题非常明显的图像。
count($photo)
等于1,数组只包含索引为0的元素。
$ rand = rand(0,count($ photos))=&gt; $ rand = rand(0,1)=&gt; $ rand可以假设两个不同的值:0或1.在第一种情况下,所有值都按预期工作。在后者中,bug将会出现。
参考文献: http://www.php.net/rand
响应评论:在空目录的情况下代码非常有效,因为执行将跳过外部for语句。您可以使用if跳过所有代码,但效率增益可以忽略不计。
.............
$str = strtolower($articleTitle);
$files= scandir("images/gallery/".$str."/");
if (count($files)) {
$photos = array();
for ($x=0; $x<count($files); $x++){
$files[$x]="images/gallery/".$str."/".$files[$x];
if (is_dir($files[$x])){
$thisfolder=scandir($files[$x]);
for ($f=0; $f<count($thisfolder); $f++)
if (strpos(strtolower($thisfolder[$f]), ".jpg"))
$photos[]=$files[$x]."/".$thisfolder[$f];
}
}
$rand=rand(0, count($photos)-1);
echo '<img src="includes/crop.php?src=' . $photos[$rand]
. '&h=115&w=650&q=90" title="'$photos[$rand]" />';
}
我会使用不同的方法,例如:
$dirName = strtolower($articleTitle);
$oldDir = cwd();
chdir('images/gallery/'.$dirName);
$photos = glob('*.jpg');
$foreach(glob('*',GLOB_ONLYDIR) as $subdir) {
$photos = array_merge($photos, glob($subdir.'/*.jpg'));
}
if (count($photos)) {
$rand=rand(0, count($photos)-1);
echo '<img src="includes/crop.php?src=' . $photos[$rand]
. '&h=115&w=650&q=90" title="'$photos[$rand]" />';
}
chdir($oldDir);
答案 1 :(得分:0)
您可以尝试使用简单的代码
$files= scandir("images/");
$photos = "";
for ($x=0; $x < count($files); $x++){<
if (strpos(strtolower($files[$x]), ".jpg")){
$photos = "images/".$files[$x];
break;
}
}
?>
<img src="<?php echo $photos;?>" title="<?php echo $photos;?>" />