0

フォルダー内のすべてのjpg画像ファイルをエコーし​​ようとしています。それは機能しますが、フォルダーが空であるというエラーを表示する行がありません。代わりに php スクリプト エラーが表示されます。

別の問題は、ディレクトリに .txt ファイルが 1 つあることです。これは、特定のページのテキストを読み取ります。スクリプトの残りの部分は、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 に入る前にカウントを確認します。

$globs = glob("attractions/$cat/*.jpg");
if( $globs ){
    foreach ($globs as $filename) {
        $count++;
        $files[] = $filename;
        $filename = urlencode($filename);
    }
}
于 2013-07-13T14:33:52.793 に答える
0

scandirglob は unix 隠しファイルを見ることができないため、glob の代わりに必要なようです。

<?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

式はすでにまたはプログラミング言語に関して、Emptyまたはそれぞれを返します-したがって、中間値なしのように、制御構造でまさに結果を使用できますNon EmptyFALSETRUEIF()

詳細については、あなたの常識のこの回答を確認してください

于 2013-07-13T14:36:44.653 に答える