打印 1 而不是文件名

printing 1 instead of filenames

我有一些图片集在我指定的 directory.And 我想使用 readdir() function.But 获取他们的名字而不是显示他们的名字,它打印出一系列 1.How这可以正确完成??我也想知道这种行为的原因

$dir='c:/xampp/htdocs/practice/haha/';
echo getcwd().'</br>';
if(is_dir($dir)){
echo dirname($dir);
     $file=opendir($dir);

     while($data=readdir($file)!==false){
        echo $data.'</br>';
     }

}

运算符优先级。这一行:

 while($data=readdir($file)!==false){

正在parsed/executed作为

 while ($data = (readdir($file) !== false))
                ^------------------------^

注意额外的括号。 $data 正在获取 !== 比较的布尔 TRUE 结果。您需要改写为

 while(($data = readdir($file)) !== false){
       ^----------------------^

这将使 $data 获取从 readdir 返回的字符串,然后将该字符串与布尔值 false.

进行比较

相关文档:http://php.net/manual/en/language.operators.precedence.php

$data=readdir($file)!==false

您正在将布尔结果设置为 $data。您肯定是想这样做:

($data=readdir($file))!==false

您可能可以使用 scandir

来实现
function list_directory($directory) {
  $result = new stdClass();
  $result->path = $directory;
  $result->children = array();
  $dir = scandir($directory);
  foreach($dir as $file) {
    if($file == '.' || $file == '..') continue;
    $result->children[] = 
        !is_dir($directory.$file) ? $file :
            list_directory($directory.$file.'/');
  }
  return $result;
}

$dir='c:/xampp/htdocs/practice/haha/';

$result = list_directory($dir);
echo '<code><pre>';
var_dump($result);
echo '</pre></code>';

您可以在函数中添加文件类型过滤器,或限制递归深度等。