草庐IT

关于目录:php readdir 和 is_dir

codeneng 2023-03-28 原文

php readdir and is_dir

我正在测试目录处理的功能。我有一个包含以下内容的折叠/目录:

0 文件夹

false 文件夹

my_pictures 文件夹

MVI_3094 mov 文件

img01 jpeg 图片

等...

我写了如下代码遍历目录,打印出具体的resutls

1
2
3
4
5
6
7
8
9
10
11
12
$handle = opendir("files/");
while(($entry = readdir($handle)) !== false)
{
    if($entry =="." || $entry =="..")
    {
        continue;
    }
    if(is_dir($entry))
    {
        echo"Directory:$entry<br />";
    }
}

我唯一的问题是第二个"if"语句没有输出

的结果

1
echo"Directory:$entry<br />";

即使条目是目录。我已经使用 "var_dump" 函数手动检查了该条目,它作为目录返回 true。

任何建议都会有所帮助


试试这个并检查。试一试...

1
2
3
4
5
6
7
8
9
10
11
12
$handle = opendir("files/");
while(($entry = readdir($handle)) !== false)
{
    if($entry =="." || $entry =="..")
    {
        continue;
    }
    elseif(is_dir("files/".$entry))
    {
        echo"Directory:$entry<br />";
    }
}

  • 作品。但我仍在试图弄清楚为什么它需要这样的逻辑。
  • Becoz is_dir 是相对的。 :) 您在 files/ 中有目录。 :) 简单的逻辑。


试试:

1
if(is_dir("files/".$entry))

readdir() 只是返回文件名。因此,您的代码在当前目录而不是子目录中查找文件。

  • 但是手册指出,如果文件名是一个目录(通过 is_dir),它应该返回 true。
  • 问题是它的文件名错误。您关心的文件名是 files/foo,但 $entry 只包含 foo
  • 我想我现在明白了。这是因为我使用的是 opendir 函数,它返回句柄而不是文件名。


$entry 是相对的... is_dir 需要一个绝对路径。

  • 你的答案有效。但是在手册中没有提到它需要绝对路径。它只声明,"文件的路径。如果文件名是相对文件名,它将相对于当前工作目录进行检查。"我像这样手动检查值:var_dump(is_dir($entry)),它返回 true。
  • chdir() 函数将更改 PHP 中的当前目录。否则它不会被 readdir 改变。


您的问题是,在 elseif(is_dir($entry)) { 中,entry 等于"file.txt"或"somedirectory"之类的字符串,它根本不是指向文件的路径。它需要是"files/file.txt"。

试试这个:

1
2
3
4
5
6
7
8
9
10
11
12
13
$dir ="files/";
$handle = opendir($dir);
while(($entry = readdir($handle)) !== false)
{
    if($entry =="." || $entry =="..")
    {
        continue;
    }
    if(is_dir($dir.$entry))
    {
        echo"Directory:$entry<br />";
    }
}

尝试使用 DirectoryIterator:

1
2
3
4
5
6
7
8
9
10
11
$iterator = new \\DirectoryIterator(realpath('files/'));

foreach($iterator as $file){

  if($file->isDot())
    continue;

  if($file->isDir())
    printf('Directory: %s <br/>', $file->getRealPath());

}

这只会探测任何目录条目的基本名称:

1
 is_dir($entry)

opendir() 结果列表将与您提供的阅读目录相关。所以你需要使用:

1
 is_dir("files/$entry")

有关关于目录:php readdir 和 is_dir的更多相关文章

  1. ruby-on-rails - active_admin 目录中的常量警告重新声明 - 2

    我正在使用active_admin,我在Rails3应用程序的应用程序中有一个目录管理,其中包含模型和页面的声明。时不时地我也有一个类,当那个类有一个常量时,就像这样:classFooBAR="bar"end然后,我在每个必须在我的Rails应用程序中重新加载一些代码的请求中收到此警告:/Users/pupeno/helloworld/app/admin/billing.rb:12:warning:alreadyinitializedconstantBAR知道发生了什么以及如何避免这些警告吗? 最佳答案 在纯Ruby中:classA

  2. ruby-on-rails - 如何在 Gem 中获取 Rails 应用程序的根目录 - 2

    是否可以在应用程序中包含的gem代码中知道应用程序的Rails文件系统根目录?这是gem来源的示例:moduleMyGemdefself.included(base)putsRails.root#returnnilendendActionController::Base.send:include,MyGem谢谢,抱歉我的英语不好 最佳答案 我发现解决类似问题的解决方案是使用railtie初始化程序包含我的模块。所以,在你的/lib/mygem/railtie.rbmoduleMyGemclassRailtie使用此代码,您的模块将在

  3. ruby-on-rails - 没有这样的文件或目录 - 用 Mini Magick 识别 - 2

    在我让另一个人重做我的前端UI之前,我的Rails应用程序运行平稳。我已经尝试解决此错误3天了。这是错误:Nosuchfileordirectory-identifyExtractedsource(aroundline#59):575859606162@post=Post.find(params[:id])authorize@postif@post.update_attributes(post_params)flash[:notice]="Postwasupdated."redirect_to[@topic,@post]else{"utf8"=>"✓","_method"=>"patc

  4. ruby - 导轨 4 : column reference "updated_at" is ambiguous with Postgres - 2

    我正在尝试使用“updated_at”字段的日期时间范围查询数据库。前端在JSON数组中发送查询:["2015-09-0100:00:00","2015-10-0223:00:00"]在RailsController中,我使用以下方法将两个字符串解析为DateTime:start_date=DateTime.parse(params[:date_range_arr][0])end_date=DateTime.parse(params[:date_range_arr][1])#...@events=@events.where('updated_atBETWEEN?AND?,start_d

  5. ruby - what is - gets is a directory - 错误信息 - 2

    我遇到了这个奇怪的错误.../Users/gideon/Documents/ca_ruby/rubytactoe/lib/player.rb:13:in`gets':Isadirectory-spec(Errno::EISDIR)player_spec.rb:require_relative'../spec_helper'#theuniverseisvastandinfinite...itcontainsagame....butnoplayersdescribe"tictactoegame"docontext"theplayerclass"doit"musthaveahumanplay

  6. ruby - Sinatra 找不到 View 目录 - 2

    我正在尝试以一种更类似于普通RubyGem结构的方式构建我的Sinatra应用程序。我有以下文件树:.├──app.rb├──config.ru├──Gemfile├──Gemfile.lock├──helpers│  ├──dbconfig.rb│  ├──functions.rb│  └──init.rb├──hidden│  └──Rakefile├──lib│  ├──admin.rb│  ├──api.rb│  ├──indexer.rb│  ├──init.rb│  └──magnet.rb├──models│  ├──init.rb│  ├──invite.rb│  ├─

  7. ruby-on-rails - 关于 Ruby 的一般问题 - 2

    我在我的rails应用程序中安装了来自github.com的acts_as_versioned插件,但有一段代码我不完全理解,我希望有人能帮我解决这个问题class_eval我知道block内的方法(或任何它是什么)被定义为类内的实例方法,但我在插件的任何地方都找不到定义为常量的CLASS_METHODS,而且我也不确定是什么here,并且有问题的代码从lib/acts_as_versioned.rb的第199行开始。如果有人愿意告诉我这里的内幕,我将不胜感激。谢谢-C 最佳答案 这是一个异端。http://en.wikipedia

  8. ruby - 如何在 ruby​​ 中复制目录结构,不包括某些文件扩展名 - 2

    我想编写一个ruby​​脚本来递归复制目录结构,但排除某些文件类型。因此,给定以下目录结构:folder1folder2file1.txtfile2.txtfile3.csfile4.htmlfolder2folder3file4.dll我想复制这个结构,但不包含.txt和.cs文件。因此,生成的目录结构应如下所示:folder1folder2file4.htmlfolder2folder3file4.dll 最佳答案 您可以使用查找模块。这是一个代码片段:require"find"ignored_extensions=[".cs"

  9. ruby - 混帐 & ruby : How can I unset the GIT_DIR variable from inside a ruby script? - 2

    我编写了一个非常简单的“部署”脚本,作为我的裸git存储库中的post-updateHook运行。变量如下livedomain=~/mydomain.comstagingdomain=~/stage.mydomain.comgitrepolocation=~/git.mydomain.com/thisrepo.git(bare)core=~/git.mydomain.com/thisrepo.gitcore==addedremoteintoeachlive&stagegitslive和stage都初始化了gitrepos(非裸),我已经将我的裸仓库作为远程添加到它们中的每一个(名为co

  10. ruby-on-rails - 安装 active admin 时 activeadmin.git (at master) is not yet checked out 错误 - 2

    Activeadmingem已添加到我的rails项目中,但每次我尝试安装railsgactive_admin:install时,我都会收到类似的错误git://github.com/activeadmin/activeadmin.git(atmaster)isnotyetcheckedout.Runbundleinstallfirst.我肯定在运行“railsgactive_admin:install”之前运行了bundle。运行“bundleshow”后,我看到我已将“*activeadmin(1.0.0.pre3f916d6)”添加到我的项目中,但不断收到此错误消息。我的gem文

随机推荐