为什么$ count不更新?

时间:2009-07-26 23:03:54

标签: php readdir

   $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 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:0)

首先,$ count应该是一个数字。做:

 $count = 0;

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

答案 2 :(得分:0)

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

您是否也听说过XDebug?这将允许您设置一个环境,例如使用Eclipse并逐步执行PHP代码。如果不使用Eclipse和XDebug的组合,我就不会开发。

答案 3 :(得分:0)

您要做的第一件事是调试if行。请记住,如果您放置*.gif,它会查看该文件实际上名为"*.gif",而不是查找“任何”gif文件,类似于Windows。

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