2009-07-26 22 views
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.*") 

が、イム必ず

答えて

6

私はあなたの問題を引き起こしされる2つの物事を見ることができます代入、比較ではなく、これには2つの等号(==)を使用する必要があります。 http://php.net/manual/en/language.operators.comparison.phpを参照してください。基本的に何をif文で割り当てを行うことでやっていることは次のとおりです。文字列

$file = '*.jpg'; 
if ($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 
} 
+0

なぜ$ extensionではなく$ pathinfoですか?私はばかだから – imHavoc

+0

。ありがとう、訂正した –

0

まず、$数は数あるべきではありません。実行します。

$count = 0; 

第二に、私の知る限り、PHPはそのように一致するワイルドカードをサポートしていません。あなたは一致するのに"*"を使うことはできません。条件付きで一致させるには、正規表現を使用する必要があります。

割り当て/比較:しかし

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

、単一の等号が実行されます:

あなたは、コードを持っている

+0

これは問題ではありません。私は '$ count =" 0 "を試しました。 $ count ++; echo $ count; 'echo'ed 1。 – jimyi

+0

なぜ0ではなく1?意味がない。 – hobodave

+0

それは本当です。それは何よりも文体的だった。暗黙の型変換は私を悩ます。私が思う本当の問題は、 "*"と一致するワイルドカードです。 – thedz

0

thedzとTom Haighが示唆しているようにします。

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

0

最初に行うべきことは、if行をデバッグすることです。 *.gifと入力すると、Windowsのような「any」gifファイルを探すのではなく、実際にファイル名が"*.gif"であることがわかります。

私が示唆しているのは、ifの各セグメントを調べて、それを通過させることです。それをまとめることができます。

関連する問題