如果文件夹是空的echo消息,如果没有显示所有的jpg文件

时间:2013-07-13 14:31:56

标签: php html

我试图回显文件夹中的所有jpg图像文件。 它工作,但我没有行显示错误,文件夹是空的正确写入。它显示了一个php脚本错误,

  

另一个问题是我在目录中有一个.txt文件,这个   一个人将阅读特定页面的文本。脚本的其余部分   将回显jpg文件。因此,它可能无法回显零文件   文本文件

     

folder = cat gategory name / title .txt file =页面的文本   .jpg文件=是类别图片

错误是:

警告:在第67行的/home/ranshow/domains/show.webking.co.il/public_html/modules/attractions.php中为foreach()提供的参数无效 画廊是空的,没有图片显示 0

<div style="text-align: center;margin-top:25px;margin-bottom: 50px;">
    <?
    $count = "0";

    foreach (glob("attractions/$cat/*.jpg") as $filename) {
    $count++;
    $files[] = $filename;
    $filename = urlencode($filename);
    }

    if($count == "0") { echo "Gallery is empty, no pics to show"; }
    else {
    ?>
    <?
    foreach ($files as $filename) {
    ?>
    <a id="thumb1" href="img.php?img=<?=$filename;?>" class="highslide" onclick="return hs.expand(this)">
    <img src="img.php?img=<?=$filename;?>" width="167" height="150" style="margin: 2px;d0b28c;padding:1px;border: 1px solid #c1c1c1;">
    </a>
    <?
    }
    ?>
    <?
    }
    ?>
    <br />
    <i><?=$count;?> <?=$lang['attractions']['totalimages'];?></i>
    <br />
</div>

我该如何解决这个问题?谢谢:))

2 个答案:

答案 0 :(得分:2)

在输入foreach之前检查计数:

$globs = glob("attractions/$cat/*.jpg");
if( $globs ){
    foreach ($globs as $filename) {
        $count++;
        $files[] = $filename;
        $filename = urlencode($filename);
    }
}

答案 1 :(得分:0)

似乎你需要scandir而不是glob,因为glob看不到unix隐藏文件。

<?php
$pid = basename($_GET["prodref"]); //let's sanitize it a bit
$dir = "/assets/$pid/v";

if (is_dir_empty($dir)) {
  echo "the folder is empty"; 
}else{
  echo "the folder is NOT empty";
}

function is_dir_empty($dir) {
  if (!is_readable($dir)) return NULL; 
  return (count(scandir($dir)) == 2);
}
?>

请注意,此代码不是效率的顶峰,因为没有必要只读取所有文件来判断目录是否为空。所以,更好的版本将是

function is_dir_empty($dir) {
  if (!is_readable($dir)) return NULL; 
  $handle = opendir($dir);
  while (false !== ($entry = readdir($handle))) {
    if ($entry != "." && $entry != "..") {
      return FALSE;
    }
  }
  return TRUE;
}

顺便说一下,不要使用单词来替换 boolean 值。后者的目的是告诉你某些事情是否空洞。一个

a === b

表达式已分别在编程语言EmptyNon Empty方面返回FALSETRUE - 因此,您可以在控件结构中使用结果{IF() 1}}没有任何中间值

请查看Your Common Sense的答案以获取更多详情