Php 为什么$count没有更新?

Php 为什么$count没有更新?,php,readdir,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!="pi

我认为这与这一行有关:

   $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);

但是我不确定首先,$count应该是一个数字。做:

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

其次,恕我直言,PHP不支持这样的通配符匹配。您不能使用
“*”
进行匹配。您需要使用正则表达式在条件中进行匹配。

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

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

其次,恕我直言,PHP不支持这样的通配符匹配。您不能使用
“*”
进行匹配。您需要使用正则表达式在条件中进行匹配。

我可以看到两件会给您带来问题的事情:

分配/比较:

您有以下代码:

 $count = 0;
但是,一个等号将执行赋值,而不是比较-需要使用两个等号(=)。看见基本上,您在if语句中执行赋值所做的是:

if ($file="*.jpg" //etc...
字符串的通配符匹配

您也不能对字符串进行那样的通配符匹配($file==“*.jpg),您可以使用preg_match()和正则表达式来代替,例如

$file = '*.jpg';
if ($file) { } 
不过,这样做可能更好:

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

我可以看出两件事会给你带来麻烦:

分配/比较:

您有以下代码:

 $count = 0;
但是,一个等号将执行赋值,而不是比较-为此需要使用两个等号(=)。请参阅。在if语句中执行赋值的基本操作是:

if ($file="*.jpg" //etc...
字符串的通配符匹配

您也不能对字符串进行那样的通配符匹配($file==“*.jpg),您可以使用preg_match()和正则表达式来代替,例如

$file = '*.jpg';
if ($file) { } 
不过,这样做可能更好:

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

按照thedz和Tom Haigh的建议去做


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

按照DZ和Tom Haigh的建议进行开发


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

您要做的第一件事是调试if行。请记住,如果放置
*.gif
,它会查看文件的实际名称是否为
“*.gif”
,而不是查找“任意”gif文件,这与Windows的做法类似


我的建议是检查if的每个部分,并使其通过。然后就可以开始组装了。

您要做的第一件事就是调试if行。请记住,如果放置
*.gif
,它会查看文件的实际名称是否为
“*.gif”
,而不是查找“任意”gif文件,这与Windows的做法类似


我的建议是检查if的每个部分,并使其通过。然后你就可以开始组装了。

这应该不是问题。我刚刚试过
$count=“0”$计数++;echo$count它回显1。为什么是1而不是0?没有任何意义,没错。它比任何东西都更具风格。隐式类型转换困扰着我。我认为真正的问题是与“*”匹配的通配符@jimyi:无论如何,通过递增字符串来计数是个坏主意。@hobodave:oops,那是个打字错误。应该是0。谢谢你的接球!这不应该是个问题。我刚刚试过
$count=“0”$计数++;echo$count它回显1。为什么是1而不是0?没有任何意义,没错。它比任何东西都更具风格。隐式类型转换困扰着我。我认为真正的问题是与“*”匹配的通配符@jimyi:无论如何,通过递增字符串来计数是个坏主意。@hobodave:oops,那是个打字错误。应该是0。谢谢你的接球!为什么是$pathinfo而不是$extension?为什么是$pathinfo而不是$extension?