0
   $dir_handle = @opendir($url) or die("Unable to open $url");
   $count = "0";
   while ($file = readdir($dir_handle)) {
      if (!is_dir($url.'/'.$file) && ($file="*.jpg" || $file="*.gif" || $file="*.png") && $file!="picture0.*") {
         $galleryEventFile[$count] = $file;
         $count++;
      }
   }
   closedir($dir_handle);

私はそれがこの行と関係があると思います:

if (!is_dir($url.'/'.$file) && ($file="*.jpg" || $file="*.gif" || $file="*.png") && $file!="picture0.*")

確信はないけど

4

4 に答える 4

6

問題の原因となる 2 つのことがわかります。

割り当て/比較:

あなたはコードを持っています:

if ($file="*.jpg" //etc...

ただし、単一の等号は比較ではなく代入を実行します。これには 2 つの等号 (==) を使用する必要があります。http://php.net/manual/en/language.operators.comparison.phpを参照してください。基本的に、if ステートメントで割り当てを行うことによって行っていることは次のとおりです。

$file = '*.jpg';
if ($file) { } 

文字列のワイルドカード マッチング

また、文字列に対して ($file == "*.jpg) のようなワイルドカード マッチングを行うことはできません。代わりに preg_match() と正規表現を使用して調べることができます。

if (!preg_match('/\.jpg$/i', $file)) {
    //not .jpg
}

ただし、次のようなことを行う方が良い場合があります。

//get file extension
$extension = pathinfo($file, PATHINFO_EXTENSION);

$allowedExtensions = array('jpg', 'png', 'gif');

//check in allowed list
if (!in_array(strtolower($extension), $allowedExtensions)) {
    //not valid
}
于 2009-07-26T23:09:16.890 に答える
0

まず、$count は数値でなければなりません。行う:

 $count = 0;

第二に、知る限り、PHP はそのようなワイルドカード マッチングをサポートしていません。合わせてのご利用はできません"*"。条件で一致させるには、正規表現を使用する必要があります。

于 2009-07-26T23:05:27.507 に答える
0

thedz と Tom Haigh の提案に従ってください。

XDebugについても聞いたことがありますか? これにより、たとえば Eclipse を使用して環境をセットアップし、PHP コードをステップ実行できます。Eclipse と XDebug の組み合わせを使用せずに開発することはありません。

于 2009-07-26T23:10:31.227 に答える
0

最初に行うことは、if 行をデバッグすることです。を入力すると、Windows と同様に、「任意の」gif ファイルを検索するのではなく*.gif、ファイルが実際に という名前であることを確認することを忘れないでください。"*.gif"

私が提案したいのは、if の各セグメントを調べて、それを通過させることです。その後、組み立てを開始できます。

于 2009-07-26T23:11:00.273 に答える