0

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

另一个问题是我在目录中有一个 .txt 文件,这个文件将读取特定页面的文本。脚本的其余部分将回显 jpg 文件。由于该文本文件,它可能不会回显零文件

文件夹 = cat 门类名称/标题 .txt 文件 = 页面的文本 .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>

我怎样才能解决这个问题?谢谢 :)

4

2 回答 2

2

进入foreach前检查count:

$globs = glob("attractions/$cat/*.jpg");
if( $globs ){
    foreach ($globs as $filename) {
        $count++;
        $files[] = $filename;
        $filename = urlencode($filename);
    }
}
于 2013-07-13T14:33:52.793 回答
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;
}

顺便说一句,不要使用单词来代替布尔值。后者的目的是告诉您某物是否为空。一个

a === b

表达式已经返回EmptyorNon Empty就编程语言而言,FALSETRUE分别 - 因此,您可以在控制结构中使用结果,例如IF()没有任何中间值

请检查您的常识的这个答案以获取更多详细信息

于 2013-07-13T14:36:44.653 回答