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

我可以看到两件事会导致您出现问题:

分配/比较:

你有代码:

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

但是,单个等号将执行分配,而不是比较 - 为此您需要使用两个等号 (==)。请参阅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;

其次,AFAIK,PHP 不支持这样的通配符匹配。你不能"*"用来匹配。您需要使用正则表达式来匹配条件。

于 2009-07-26T23:05:27.507 回答
0

按照 thedz 和 Tom Haigh 的建议去做。

您还听说过XDebug吗?这将允许您使用 Eclipse 设置环境并逐步执行您的 PHP 代码。如果不使用 Eclipse 和 XDebug 的组合,我不会进行开发。

于 2009-07-26T23:10:31.227 回答
0

您要做的第一件事是调试 if 行。请记住,如果您*.gif输入 ,它会查看文件是否实际命名为"*.gif",而不是像 Windows 所做的那样寻找“任何” gif 文件。

我的建议是遍历 if 的每个部分,并让它通过。然后你可以开始把它放在一起。

于 2009-07-26T23:11:00.273 回答