CINXE.COM

PHP: opendir - Manual

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>PHP: opendir - Manual </title> <link rel="icon" type="image/svg+xml" sizes="any" href="https://www.php.net/favicon.svg?v=2"> <link rel="icon" type="image/png" sizes="196x196" href="https://www.php.net/favicon-196x196.png?v=2"> <link rel="icon" type="image/png" sizes="32x32" href="https://www.php.net/favicon-32x32.png?v=2"> <link rel="icon" type="image/png" sizes="16x16" href="https://www.php.net/favicon-16x16.png?v=2"> <link rel="shortcut icon" href="https://www.php.net/favicon.ico?v=2"> <link rel="search" type="application/opensearchdescription+xml" href="http://php.net/phpnetimprovedsearch.src" title="Add PHP.net search"> <link rel="alternate" type="application/atom+xml" href="https://www.php.net/releases/feed.php" title="PHP Release feed"> <link rel="alternate" type="application/atom+xml" href="https://www.php.net/feed.atom" title="PHP: Hypertext Preprocessor"> <link rel="canonical" href="https://www.php.net/manual/en/function.opendir.php"> <link rel="shorturl" href="https://www.php.net/opendir"> <link rel="alternate" href="https://www.php.net/opendir" hreflang="x-default"> <link rel="contents" href="https://www.php.net/manual/en/index.php"> <link rel="index" href="https://www.php.net/manual/en/ref.dir.php"> <link rel="prev" href="https://www.php.net/manual/en/function.getcwd.php"> <link rel="next" href="https://www.php.net/manual/en/function.readdir.php"> <link rel="alternate" href="https://www.php.net/manual/en/function.opendir.php" hreflang="en"> <link rel="alternate" href="https://www.php.net/manual/de/function.opendir.php" hreflang="de"> <link rel="alternate" href="https://www.php.net/manual/es/function.opendir.php" hreflang="es"> <link rel="alternate" href="https://www.php.net/manual/fr/function.opendir.php" hreflang="fr"> <link rel="alternate" href="https://www.php.net/manual/it/function.opendir.php" hreflang="it"> <link rel="alternate" href="https://www.php.net/manual/ja/function.opendir.php" hreflang="ja"> <link rel="alternate" href="https://www.php.net/manual/pt_BR/function.opendir.php" hreflang="pt_BR"> <link rel="alternate" href="https://www.php.net/manual/ru/function.opendir.php" hreflang="ru"> <link rel="alternate" href="https://www.php.net/manual/tr/function.opendir.php" hreflang="tr"> <link rel="alternate" href="https://www.php.net/manual/uk/function.opendir.php" hreflang="uk"> <link rel="alternate" href="https://www.php.net/manual/zh/function.opendir.php" hreflang="zh"> <link rel="stylesheet" type="text/css" href="/cached.php?t=1707321815&amp;f=/fonts/Fira/fira.css" media="screen"> <link rel="stylesheet" type="text/css" href="/cached.php?t=1707321815&amp;f=/fonts/Font-Awesome/css/fontello.css" media="screen"> <link rel="stylesheet" type="text/css" href="/cached.php?t=1738926002&amp;f=/styles/theme-base.css" media="screen"> <link rel="stylesheet" type="text/css" href="/cached.php?t=1730558402&amp;f=/styles/theme-medium.css" media="screen"> <base href="https://www.php.net/manual/en/function.opendir.php"> <meta name="Description" content="PHP is a popular general-purpose scripting language that powers everything from your blog to the most popular websites in the world." /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:site" content="@official_php" /> <meta name="twitter:title" content="PHP: Hypertext Preprocessor" /> <meta name="twitter:description" content="PHP is a popular general-purpose scripting language that powers everything from your blog to the most popular websites in the world." /> <meta name="twitter:creator" content="@official_php" /> <meta name="twitter:image:src" content="https://www.php.net/images/meta-image.png" /> <meta itemprop="name" content="PHP: Hypertext Preprocessor" /> <meta itemprop="description" content="PHP is a popular general-purpose scripting language that powers everything from your blog to the most popular websites in the world." /> <meta itemprop="image" content="https://www.php.net/images/meta-image.png" /> <meta property="og:image" content="https://www.php.net/images/meta-image.png" /> <meta property="og:description" content="PHP is a popular general-purpose scripting language that powers everything from your blog to the most popular websites in the world." /> <link href="https://fosstodon.org/@php" rel="me" /> <!-- Matomo --> <script> var _paq = window._paq = window._paq || []; /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ _paq.push(["setDoNotTrack", true]); _paq.push(["disableCookies"]); _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { var u="https://analytics.php.net/"; _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '1']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); })(); </script> <!-- End Matomo Code --> </head> <body class="docs "> <nav class="navbar navbar-fixed-top"> <div class="navbar__inner"> <a href="/" aria-label="PHP Home" class="navbar__brand"> <img src="/images/logos/php-logo-white.svg" aria-hidden="true" width="80" height="40" > </a> <div id="navbar__offcanvas" tabindex="-1" class="navbar__offcanvas" aria-label="Menu" > <button id="navbar__close-button" class="navbar__icon-item navbar_icon-item--visually-aligned navbar__close-button" > <svg xmlns="http://www.w3.org/2000/svg" width="24" viewBox="0 0 24 24" fill="currentColor"><path d="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z" /></svg> </button> <ul class="navbar__nav"> <li class="navbar__item"> <a href="/downloads.php" class="navbar__link " > Downloads </a> </li> <li class="navbar__item"> <a href="/docs.php" aria-current="page" class="navbar__link navbar__link--active " > Documentation </a> </li> <li class="navbar__item"> <a href="/get-involved.php" class="navbar__link " > Get Involved </a> </li> <li class="navbar__item"> <a href="/support.php" class="navbar__link " > Help </a> </li> <li class="navbar__item"> <a href="/releases/8.4/index.php" class="navbar__link navbar__release" > <img src="/images/php8/logo_php8_4.svg" alt="PHP 8.4"> </a> </li> </ul> </div> <div class="navbar__right"> <!-- Desktop default search --> <form action="/manual-lookup.php" class="navbar__search-form" > <label for="navbar__search-input" aria-label="Search docs"> <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" width="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" > <circle cx="11" cy="11" r="8"></circle> <line x1="21" y1="21" x2="16.65" y2="16.65"></line> </svg> </label> <input type="search" name="pattern" id="navbar__search-input" class="navbar__search-input" placeholder="Search docs" accesskey="s" > <input type="hidden" name="scope" value="quickref"> </form> <!-- Desktop encanced search --> <button id="navbar__search-button" class="navbar__search-button" hidden > <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" width="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" > <circle cx="11" cy="11" r="8"></circle> <line x1="21" y1="21" x2="16.65" y2="16.65"></line> </svg> Search docs </button> <!-- Mobile default items --> <a id="navbar__search-link" href="/lookup-form.php" aria-label="Search docs" class="navbar__icon-item navbar__search-link" > <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" width="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" > <circle cx="11" cy="11" r="8"></circle> <line x1="21" y1="21" x2="16.65" y2="16.65"></line> </svg> </a> <a id="navbar__menu-link" href="/menu.php" aria-label="Menu" class="navbar__icon-item navbar_icon-item--visually-aligned navbar_menu-link" > <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" width="24" viewBox="0 0 24 24" fill="currentColor" > <path d="M3,6H21V8H3V6M3,11H21V13H3V11M3,16H21V18H3V16Z" /> </svg> </a> <!-- Mobile enhanced items --> <button id="navbar__search-button-mobile" aria-label="Search docs" class="navbar__icon-item navbar__search-button-mobile" hidden > <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" width="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" > <circle cx="11" cy="11" r="8"></circle> <line x1="21" y1="21" x2="16.65" y2="16.65"></line> </svg> </button> <button id="navbar__menu-button" aria-label="Menu" class="navbar__icon-item navbar_icon-item--visually-aligned" hidden > <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" width="24" viewBox="0 0 24 24" fill="currentColor" > <path d="M3,6H21V8H3V6M3,11H21V13H3V11M3,16H21V18H3V16Z" /> </svg> </button> </div> <div id="navbar__backdrop" class="navbar__backdrop" ></div> </div> <div id="flash-message"></div> </nav> <div class="headsup"><a href='/index.php#2025-02-13-2'>PHP 8.3.17 Released!</a></div> <nav id="trick"><div><dl> <dt><a href='/manual/en/getting-started.php'>Getting Started</a></dt> <dd><a href='/manual/en/introduction.php'>Introduction</a></dd> <dd><a href='/manual/en/tutorial.php'>A simple tutorial</a></dd> <dt><a href='/manual/en/langref.php'>Language Reference</a></dt> <dd><a href='/manual/en/language.basic-syntax.php'>Basic syntax</a></dd> <dd><a href='/manual/en/language.types.php'>Types</a></dd> <dd><a href='/manual/en/language.variables.php'>Variables</a></dd> <dd><a href='/manual/en/language.constants.php'>Constants</a></dd> <dd><a href='/manual/en/language.expressions.php'>Expressions</a></dd> <dd><a href='/manual/en/language.operators.php'>Operators</a></dd> <dd><a href='/manual/en/language.control-structures.php'>Control Structures</a></dd> <dd><a href='/manual/en/language.functions.php'>Functions</a></dd> <dd><a href='/manual/en/language.oop5.php'>Classes and Objects</a></dd> <dd><a href='/manual/en/language.namespaces.php'>Namespaces</a></dd> <dd><a href='/manual/en/language.enumerations.php'>Enumerations</a></dd> <dd><a href='/manual/en/language.errors.php'>Errors</a></dd> <dd><a href='/manual/en/language.exceptions.php'>Exceptions</a></dd> <dd><a href='/manual/en/language.fibers.php'>Fibers</a></dd> <dd><a href='/manual/en/language.generators.php'>Generators</a></dd> <dd><a href='/manual/en/language.attributes.php'>Attributes</a></dd> <dd><a href='/manual/en/language.references.php'>References Explained</a></dd> <dd><a href='/manual/en/reserved.variables.php'>Predefined Variables</a></dd> <dd><a href='/manual/en/reserved.exceptions.php'>Predefined Exceptions</a></dd> <dd><a href='/manual/en/reserved.interfaces.php'>Predefined Interfaces and Classes</a></dd> <dd><a href='/manual/en/reserved.attributes.php'>Predefined Attributes</a></dd> <dd><a href='/manual/en/context.php'>Context options and parameters</a></dd> <dd><a href='/manual/en/wrappers.php'>Supported Protocols and Wrappers</a></dd> </dl> <dl> <dt><a href='/manual/en/security.php'>Security</a></dt> <dd><a href='/manual/en/security.intro.php'>Introduction</a></dd> <dd><a href='/manual/en/security.general.php'>General considerations</a></dd> <dd><a href='/manual/en/security.cgi-bin.php'>Installed as CGI binary</a></dd> <dd><a href='/manual/en/security.apache.php'>Installed as an Apache module</a></dd> <dd><a href='/manual/en/security.sessions.php'>Session Security</a></dd> <dd><a href='/manual/en/security.filesystem.php'>Filesystem Security</a></dd> <dd><a href='/manual/en/security.database.php'>Database Security</a></dd> <dd><a href='/manual/en/security.errors.php'>Error Reporting</a></dd> <dd><a href='/manual/en/security.variables.php'>User Submitted Data</a></dd> <dd><a href='/manual/en/security.hiding.php'>Hiding PHP</a></dd> <dd><a href='/manual/en/security.current.php'>Keeping Current</a></dd> <dt><a href='/manual/en/features.php'>Features</a></dt> <dd><a href='/manual/en/features.http-auth.php'>HTTP authentication with PHP</a></dd> <dd><a href='/manual/en/features.cookies.php'>Cookies</a></dd> <dd><a href='/manual/en/features.sessions.php'>Sessions</a></dd> <dd><a href='/manual/en/features.file-upload.php'>Handling file uploads</a></dd> <dd><a href='/manual/en/features.remote-files.php'>Using remote files</a></dd> <dd><a href='/manual/en/features.connection-handling.php'>Connection handling</a></dd> <dd><a href='/manual/en/features.persistent-connections.php'>Persistent Database Connections</a></dd> <dd><a href='/manual/en/features.commandline.php'>Command line usage</a></dd> <dd><a href='/manual/en/features.gc.php'>Garbage Collection</a></dd> <dd><a href='/manual/en/features.dtrace.php'>DTrace Dynamic Tracing</a></dd> </dl> <dl> <dt><a href='/manual/en/funcref.php'>Function Reference</a></dt> <dd><a href='/manual/en/refs.basic.php.php'>Affecting PHP's Behaviour</a></dd> <dd><a href='/manual/en/refs.utilspec.audio.php'>Audio Formats Manipulation</a></dd> <dd><a href='/manual/en/refs.remote.auth.php'>Authentication Services</a></dd> <dd><a href='/manual/en/refs.utilspec.cmdline.php'>Command Line Specific Extensions</a></dd> <dd><a href='/manual/en/refs.compression.php'>Compression and Archive Extensions</a></dd> <dd><a href='/manual/en/refs.crypto.php'>Cryptography Extensions</a></dd> <dd><a href='/manual/en/refs.database.php'>Database Extensions</a></dd> <dd><a href='/manual/en/refs.calendar.php'>Date and Time Related Extensions</a></dd> <dd><a href='/manual/en/refs.fileprocess.file.php'>File System Related Extensions</a></dd> <dd><a href='/manual/en/refs.international.php'>Human Language and Character Encoding Support</a></dd> <dd><a href='/manual/en/refs.utilspec.image.php'>Image Processing and Generation</a></dd> <dd><a href='/manual/en/refs.remote.mail.php'>Mail Related Extensions</a></dd> <dd><a href='/manual/en/refs.math.php'>Mathematical Extensions</a></dd> <dd><a href='/manual/en/refs.utilspec.nontext.php'>Non-Text MIME Output</a></dd> <dd><a href='/manual/en/refs.fileprocess.process.php'>Process Control Extensions</a></dd> <dd><a href='/manual/en/refs.basic.other.php'>Other Basic Extensions</a></dd> <dd><a href='/manual/en/refs.remote.other.php'>Other Services</a></dd> <dd><a href='/manual/en/refs.search.php'>Search Engine Extensions</a></dd> <dd><a href='/manual/en/refs.utilspec.server.php'>Server Specific Extensions</a></dd> <dd><a href='/manual/en/refs.basic.session.php'>Session Extensions</a></dd> <dd><a href='/manual/en/refs.basic.text.php'>Text Processing</a></dd> <dd><a href='/manual/en/refs.basic.vartype.php'>Variable and Type Related Extensions</a></dd> <dd><a href='/manual/en/refs.webservice.php'>Web Services</a></dd> <dd><a href='/manual/en/refs.utilspec.windows.php'>Windows Only Extensions</a></dd> <dd><a href='/manual/en/refs.xml.php'>XML Manipulation</a></dd> <dd><a href='/manual/en/refs.ui.php'>GUI Extensions</a></dd> </dl> <dl> <dt>Keyboard Shortcuts</dt><dt>?</dt> <dd>This help</dd> <dt>j</dt> <dd>Next menu item</dd> <dt>k</dt> <dd>Previous menu item</dd> <dt>g p</dt> <dd>Previous man page</dd> <dt>g n</dt> <dd>Next man page</dd> <dt>G</dt> <dd>Scroll to bottom</dd> <dt>g g</dt> <dd>Scroll to top</dd> <dt>g h</dt> <dd>Goto homepage</dd> <dt>g s</dt> <dd>Goto search<br>(current page)</dd> <dt>/</dt> <dd>Focus search box</dd> </dl></div></nav> <div id="goto"> <div class="search"> <div class="text"></div> <div class="results"><ul></ul></div> </div> </div> <div id="breadcrumbs" class="clearfix"> <div id="breadcrumbs-inner"> <div class="next"> <a href="function.readdir.php"> readdir &raquo; </a> </div> <div class="prev"> <a href="function.getcwd.php"> &laquo; getcwd </a> </div> <ul> <li><a href='index.php'>PHP Manual</a></li> <li><a href='funcref.php'>Function Reference</a></li> <li><a href='refs.fileprocess.file.php'>File System Related Extensions</a></li> <li><a href='book.dir.php'>Directories</a></li> <li><a href='ref.dir.php'>Directory Functions</a></li> </ul> </div> </div> <div id="layout" class="clearfix"> <section id="layout-content"> <div class="page-tools"> <div class="change-language"> <form action="/manual/change.php" method="get" id="changelang" name="changelang"> <fieldset> <label for="changelang-langs">Change language:</label> <select onchange="document.changelang.submit()" name="page" id="changelang-langs"> <option value='en/function.opendir.php' selected="selected">English</option> <option value='de/function.opendir.php'>German</option> <option value='es/function.opendir.php'>Spanish</option> <option value='fr/function.opendir.php'>French</option> <option value='it/function.opendir.php'>Italian</option> <option value='ja/function.opendir.php'>Japanese</option> <option value='pt_BR/function.opendir.php'>Brazilian Portuguese</option> <option value='ru/function.opendir.php'>Russian</option> <option value='tr/function.opendir.php'>Turkish</option> <option value='uk/function.opendir.php'>Ukrainian</option> <option value='zh/function.opendir.php'>Chinese (Simplified)</option> <option value='help-translate.php'>Other</option> </select> </fieldset> </form> </div> </div><div id="function.opendir" class="refentry"> <div class="refnamediv"> <h1 class="refname">opendir</h1> <p class="verinfo">(PHP 4, PHP 5, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">opendir</span> &mdash; <span class="dc-title">Open directory handle</span></p> </div> <div class="refsect1 description" id="refsect1-function.opendir-description"> <h3 class="title">Description</h3> <div class="methodsynopsis dc-description"> <span class="methodname"><strong>opendir</strong></span>(<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$directory</code></span>, <span class="methodparam"><span class="type"><span class="type"><a href="language.types.null.php" class="type null">?</a></span><span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span></span> <code class="parameter">$context</code><span class="initializer"> = <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong></span></span>): <span class="type"><span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>|<span class="type"><a href="language.types.value.php" class="type false">false</a></span></span></div> <p class="para rdfs-comment"> Opens up a directory handle to be used in subsequent <span class="function"><a href="function.closedir.php" class="function">closedir()</a></span>, <span class="function"><a href="function.readdir.php" class="function">readdir()</a></span>, and <span class="function"><a href="function.rewinddir.php" class="function">rewinddir()</a></span> calls. </p> </div> <div class="refsect1 parameters" id="refsect1-function.opendir-parameters"> <h3 class="title">Parameters</h3> <p class="para"> <dl> <dt><code class="parameter">directory</code></dt> <dd> <p class="para"> The directory path that is to be opened </p> </dd> <dt><code class="parameter">context</code></dt> <dd> <p class="para"> For a description of the <code class="parameter">context</code> parameter, refer to <a href="ref.stream.php" class="link">the streams section</a> of the manual. </p> </dd> </dl> </p> </div> <div class="refsect1 returnvalues" id="refsect1-function.opendir-returnvalues"> <h3 class="title">Return Values</h3> <p class="para"> Returns a directory handle <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> on success, or <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> on failure </p> </div> <div class="refsect1 errors" id="refsect1-function.opendir-errors"> <h3 class="title">Errors/Exceptions</h3> <p class="para"> Upon failure, an <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> is emitted. </p> <p class="para"> This may happen if <code class="parameter">directory</code> is not a valid directory, the directory can not be opened due to permission restrictions, or due to filesystem errors. </p> </div> <div class="refsect1 changelog" id="refsect1-function.opendir-changelog"> <h3 class="title">Changelog</h3> <table class="doctable informaltable"> <thead> <tr> <th>Version</th> <th>Description</th> </tr> </thead> <tbody class="tbody"> <tr> <td>8.0.0</td> <td> <code class="parameter">context</code> is now nullable. </td> </tr> </tbody> </table> </div> <div class="refsect1 examples" id="refsect1-function.opendir-examples"> <h3 class="title">Examples</h3> <p class="para"> <div class="example" id="example-2238"> <p><strong>Example #1 <span class="function"><strong>opendir()</strong></span> example</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$dir </span><span style="color: #007700">= </span><span style="color: #DD0000">"/etc/php5/"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Open a known directory, and proceed to read its contents<br /></span><span style="color: #007700">if (</span><span style="color: #0000BB">is_dir</span><span style="color: #007700">(</span><span style="color: #0000BB">$dir</span><span style="color: #007700">)) {<br /> if (</span><span style="color: #0000BB">$dh </span><span style="color: #007700">= </span><span style="color: #0000BB">opendir</span><span style="color: #007700">(</span><span style="color: #0000BB">$dir</span><span style="color: #007700">)) {<br /> while ((</span><span style="color: #0000BB">$file </span><span style="color: #007700">= </span><span style="color: #0000BB">readdir</span><span style="color: #007700">(</span><span style="color: #0000BB">$dh</span><span style="color: #007700">)) !== </span><span style="color: #0000BB">false</span><span style="color: #007700">) {<br /> echo </span><span style="color: #DD0000">"filename: </span><span style="color: #0000BB">$file</span><span style="color: #DD0000"> : filetype: " </span><span style="color: #007700">. </span><span style="color: #0000BB">filetype</span><span style="color: #007700">(</span><span style="color: #0000BB">$dir </span><span style="color: #007700">. </span><span style="color: #0000BB">$file</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /> }<br /> </span><span style="color: #0000BB">closedir</span><span style="color: #007700">(</span><span style="color: #0000BB">$dh</span><span style="color: #007700">);<br /> }<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div> </div> <div class="example-contents"><p>The above example will output something similar to:</p></div> <div class="example-contents screen"> <div class="examplescode"><pre class="examplescode">filename: . : filetype: dir filename: .. : filetype: dir filename: apache : filetype: dir filename: cgi : filetype: dir filename: cli : filetype: dir</pre> </div> </div> </div> </p> </div> <div class="refsect1 seealso" id="refsect1-function.opendir-seealso"> <h3 class="title">See Also</h3> <p class="para"> <ul class="simplelist"> <li><span class="function"><a href="function.is-dir.php" class="function" rel="rdfs-seeAlso">is_dir()</a> - Tells whether the filename is a directory</span></li> <li><span class="function"><a href="function.readdir.php" class="function" rel="rdfs-seeAlso">readdir()</a> - Read entry from directory handle</span></li> <li><span class="function"><a href="function.dir.php" class="function" rel="rdfs-seeAlso">dir()</a> - Return an instance of the Directory class</span></li> </ul> </p> </div> </div> <div class="contribute"> <h3 class="title">Found A Problem?</h3> <div> </div> <div class="edit-bug"> <a href="https://github.com/php/doc-base/blob/master/README.md" title="This will take you to our contribution guidelines on GitHub" target="_blank" rel="noopener noreferrer">Learn How To Improve This Page</a> • <a href="https://github.com/php/doc-en/blob/master/reference/dir/functions/opendir.xml">Submit a Pull Request</a> • <a href="https://github.com/php/doc-en/issues/new?body=From%20manual%20page:%20https:%2F%2Fphp.net%2Ffunction.opendir%0A%0A---">Report a Bug</a> </div> </div><section id="usernotes"> <div class="head"> <span class="action"><a href="/manual/add-note.php?sect=function.opendir&amp;repo=en&amp;redirect=https://www.php.net/manual/en/function.opendir.php">+<small>add a note</small></a></span> <h3 class="title">User Contributed Notes <span class="count">33 notes</span></h3> </div><div id="allnotes"> <div class="note" id="119685"> <div class="votes"> <div id="Vu119685"> <a href="/manual/vote-note.php?id=119685&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd119685"> <a href="/manual/vote-note.php?id=119685&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V119685" title="63% like this..."> 8 </div> </div> <a href="#119685" class="name"> <strong class="user"><em>sergio dot barrios at upr dot edu dot cu</em></strong></a><a class="genanchor" href="#119685"> &para;</a><div class="date" title="2016-08-02 03:08"><strong>8 years ago</strong></div> <div class="text" id="Hcom119685"> <div class="phpcode"><code><span class="html">iterated function that searches a folder or file in a directory.<br /><br /><span class="default">&lt;?php<br /><br />$root </span><span class="keyword">= </span><span class="string">'../Classes'</span><span class="keyword">;<br /></span><span class="default">$search_parameter </span><span class="keyword">= </span><span class="string">"CachedObjectStorageFactory.php"</span><span class="keyword">;<br /><br /></span><span class="comment">//if we call the function spider as spider($root); <br />//will show all the directory content including subdirectories<br /><br />//if we call the function spider as spider('../Classes', 'Shared');<br />//and will show the address of the directory<br /><br /></span><span class="default">spider</span><span class="keyword">(</span><span class="default">$root</span><span class="keyword">, </span><span class="default">$search_parameter</span><span class="keyword">);<br /></span><span class="default">closedir</span><span class="keyword">();<br /> <br />function </span><span class="default">spider</span><span class="keyword">(</span><span class="default">$dir</span><span class="keyword">,</span><span class="default">$fileName</span><span class="keyword">=</span><span class="string">""</span><span class="keyword">){<br /> <br /> </span><span class="default">$handle </span><span class="keyword">= </span><span class="default">opendir</span><span class="keyword">(</span><span class="default">$dir</span><span class="keyword">);<br /> <br /> while(</span><span class="default">$file</span><span class="keyword">= </span><span class="default">readdir</span><span class="keyword">(</span><span class="default">$handle</span><span class="keyword">)){<br /><br /> if(</span><span class="default">$file </span><span class="keyword">!= </span><span class="string">"." </span><span class="keyword">&amp;&amp; </span><span class="default">$file </span><span class="keyword">!= </span><span class="string">".."</span><span class="keyword">){<br /> <br /> if(</span><span class="default">$fileName</span><span class="keyword">==</span><span class="string">""</span><span class="keyword">) <br /> echo </span><span class="default">$dir</span><span class="keyword">.</span><span class="string">"/"</span><span class="keyword">.</span><span class="default">$file</span><span class="keyword">.</span><span class="string">"&lt;br&gt;"</span><span class="keyword">; <br /> else<br /> if(</span><span class="default">$file </span><span class="keyword">== </span><span class="default">$fileName</span><span class="keyword">) <br /> echo </span><span class="default">$dir</span><span class="keyword">.</span><span class="string">"/"</span><span class="keyword">.</span><span class="default">$file</span><span class="keyword">.</span><span class="string">"&lt;br&gt;"</span><span class="keyword">; <br /> <br /> <br /> if(!</span><span class="default">is_file</span><span class="keyword">(</span><span class="default">$dir</span><span class="keyword">.</span><span class="string">"/"</span><span class="keyword">.</span><span class="default">$file</span><span class="keyword">)) <br /> </span><span class="default">spider</span><span class="keyword">(</span><span class="default">$dir</span><span class="keyword">.</span><span class="string">"/"</span><span class="keyword">.</span><span class="default">$file</span><span class="keyword">,</span><span class="default">$fileName</span><span class="keyword">);<br /> <br /> } <br /> }<br /> <br />} <br /><br /></span><span class="default">?&gt;</span></span></code></div> </div> </div> <div class="note" id="119237"> <div class="votes"> <div id="Vu119237"> <a href="/manual/vote-note.php?id=119237&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd119237"> <a href="/manual/vote-note.php?id=119237&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V119237" title="60% like this..."> 9 </div> </div> <a href="#119237" class="name"> <strong class="user"><em>hz_php at hotmail dot com { hussam alzahabi }</em></strong></a><a class="genanchor" href="#119237"> &para;</a><div class="date" title="2016-04-24 10:59"><strong>8 years ago</strong></div> <div class="text" id="Hcom119237"> <div class="phpcode"><code><span class="html">Sometimes the programmer needs to access folder content which has arabic name but the opendir function will return null resources id<br /><br />for that we must convert the dirname charset from utf-8 to windows-1256 by the iconv function just if the preg_match function detect arabic characters and use " U " additionality to enable multibyte matching<br /><br /><span class="default">&lt;?php<br /><br />$dir </span><span class="keyword">= (</span><span class="string">"./"</span><span class="keyword">); </span><span class="comment">// on this file dir<br /> <br />// detect if the path has arabic characters and use " u " optional to enable function to match multibyte characters<br /><br /></span><span class="keyword">if (</span><span class="default">preg_match</span><span class="keyword">(</span><span class="string">'#[\x{0600}-\x{06FF}]#iu'</span><span class="keyword">, </span><span class="default">$dir</span><span class="keyword">) ) <br />{<br /><br /> </span><span class="comment">// convert input ( utf-8 ) to output ( windows-1256 ) <br /> <br /> </span><span class="default">$dir </span><span class="keyword">= </span><span class="default">iconv</span><span class="keyword">(</span><span class="string">"utf-8"</span><span class="keyword">,</span><span class="string">"windows-1256"</span><span class="keyword">,</span><span class="default">$dir</span><span class="keyword">);<br /> <br />}<br /><br /> if( </span><span class="default">is_dir</span><span class="keyword">(</span><span class="default">$dir</span><span class="keyword">) ) <br /> {<br /> <br /> <br /> if( ( </span><span class="default">$dh </span><span class="keyword">= </span><span class="default">opendir</span><span class="keyword">(</span><span class="default">$dir</span><span class="keyword">) ) !== </span><span class="default">null </span><span class="keyword">) <br /> {<br /> <br /> <br /> while ( ( </span><span class="default">$file </span><span class="keyword">= </span><span class="default">readdir</span><span class="keyword">(</span><span class="default">$dh</span><span class="keyword">) ) !== </span><span class="default">false </span><span class="keyword">) <br /> {<br /> <br /> <br /> echo </span><span class="string">"filename: "</span><span class="keyword">.</span><span class="default">$file </span><span class="keyword">.</span><span class="string">" filetype : "</span><span class="keyword">.</span><span class="default">filetype</span><span class="keyword">(</span><span class="default">$dir</span><span class="keyword">.</span><span class="default">$file</span><span class="keyword">).</span><span class="string">"&lt;br/&gt;"</span><span class="keyword">;<br /> <br /> <br /> }<br /> <br /> }<br /> <br /> <br /> }<br /><br /></span><span class="default">?&gt;</span></span></code></div> </div> </div> <div class="note" id="90373"> <div class="votes"> <div id="Vu90373"> <a href="/manual/vote-note.php?id=90373&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd90373"> <a href="/manual/vote-note.php?id=90373&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V90373" title="57% like this..."> 8 </div> </div> <a href="#90373" class="name"> <strong class="user"><em>DaveRandom</em></strong></a><a class="genanchor" href="#90373"> &para;</a><div class="date" title="2009-04-18 09:08"><strong>15 years ago</strong></div> <div class="text" id="Hcom90373"> <div class="phpcode"><code><span class="html">A couple of notes on Matt's posts on Windows Network Drives:<br /><br />Since the system() command writes the output of the executed shell command straight to the output buffer, if you wish to hide the return of the mapping command (i.e. "The command completed succesfully" or an error message) from a web browser, you need to alter the command that is sent to the shell so that the output of that command is hidden.<br /><br />You probably thinking "why not just use exec()?", and it's a reasonable question, but for some reason it doesn't always work - I guess it's another NT user permissions issue. If you want to guarantee you app will work with no messing around on the host system, use the system() command.<br /><br />In the Windows command shell, you can hide the output of a command by sending both the output (1) and error (2) messages to "nul" using pipes, in other words "&gt;nul 2&gt;&amp;1" on the end of the command. The username and password order in the "net use..." command needs switching in Matt's post.<br /><br />Here (<a href="http://networkm.co.uk/static/drive.html" rel="nofollow" target="_blank">http://networkm.co.uk/static/drive.html</a>) is a function I wrote to dynamically choose which drive letter to use, based on what is currently mapped and accessible to PHP.<br /><br /><span class="default">&lt;?php<br /><br /></span><span class="comment">// Define the parameters for the shell command<br /></span><span class="default">$location </span><span class="keyword">= </span><span class="string">"\\servername\sharename"</span><span class="keyword">;<br /></span><span class="default">$user </span><span class="keyword">= </span><span class="string">"USERNAME"</span><span class="keyword">;<br /></span><span class="default">$pass </span><span class="keyword">= </span><span class="string">"PASSWORD"</span><span class="keyword">;<br /></span><span class="default">$letter </span><span class="keyword">= </span><span class="string">"Z"</span><span class="keyword">;<br /><br /></span><span class="comment">// Map the drive<br /></span><span class="default">system</span><span class="keyword">(</span><span class="string">"net use "</span><span class="keyword">.</span><span class="default">$letter</span><span class="keyword">.</span><span class="string">": \""</span><span class="keyword">.</span><span class="default">$location</span><span class="keyword">.</span><span class="string">"\" "</span><span class="keyword">.</span><span class="default">$pass</span><span class="keyword">.</span><span class="string">" /user:"</span><span class="keyword">.</span><span class="default">$user</span><span class="keyword">.</span><span class="string">" /persistent:no&gt;nul 2&gt;&amp;1"</span><span class="keyword">);<br /><br /></span><span class="comment">// Open the directory<br /></span><span class="default">$dir </span><span class="keyword">= </span><span class="default">opendir</span><span class="keyword">(</span><span class="default">$letter</span><span class="keyword">.</span><span class="string">":/an/example/path"</span><span class="keyword">)<br /><br />...<br /><br /></span><span class="default">?&gt;</span></span></code></div> </div> </div> <div class="note" id="46126"> <div class="votes"> <div id="Vu46126"> <a href="/manual/vote-note.php?id=46126&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd46126"> <a href="/manual/vote-note.php?id=46126&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V46126" title="66% like this..."> 2 </div> </div> <a href="#46126" class="name"> <strong class="user"><em>sandy at montana-riverboats dot com</em></strong></a><a class="genanchor" href="#46126"> &para;</a><div class="date" title="2004-09-29 09:08"><strong>20 years ago</strong></div> <div class="text" id="Hcom46126"> <div class="phpcode"><code><span class="html"><span class="default">&lt;?php<br /></span><span class="comment">/*<br />** This recursive file lister only slurps in one page at time,<br />** so it doesn't take forever to load when operating over<br />** a large system.....comes with an "Up" link for every page too.<br />*/<br /><br /></span><span class="default">$PHP_SELF </span><span class="keyword">= </span><span class="default">$_SERVER</span><span class="keyword">[</span><span class="string">'PHP_SELF'</span><span class="keyword">];<br /></span><span class="default">$DOCUMENT_ROOT </span><span class="keyword">= </span><span class="default">$_SERVER</span><span class="keyword">[</span><span class="string">'DOCUMENT_ROOT'</span><span class="keyword">];<br /></span><span class="comment"># activate the next line (and deactivate the last) to<br /># use this script in a $DOCUMENT_ROOT/~anybody<br /># environment.<br />#$DOCUMENT_ROOT="/home/sandy/public_html/";<br /><br /></span><span class="default">$tdir </span><span class="keyword">= </span><span class="default">$_GET</span><span class="keyword">[</span><span class="string">'dir'</span><span class="keyword">];<br />echo </span><span class="string">"tdir==</span><span class="default">$tdir</span><span class="string">&lt;br&gt;"</span><span class="keyword">;<br /></span><span class="default">$tparent_path </span><span class="keyword">= </span><span class="default">$_GET</span><span class="keyword">[</span><span class="string">'parent_path'</span><span class="keyword">];<br /></span><span class="default">$dbg </span><span class="keyword">= </span><span class="default">$_GET</span><span class="keyword">[</span><span class="string">'dbg'</span><span class="keyword">];<br /><br />if(!</span><span class="default">strstr</span><span class="keyword">(</span><span class="default">$tdir</span><span class="keyword">, </span><span class="default">$DOCUMENT_ROOT</span><span class="keyword">))<br /> </span><span class="default">$tdir </span><span class="keyword">= </span><span class="default">getcwd</span><span class="keyword">();<br />if(!</span><span class="default">strstr</span><span class="keyword">(</span><span class="default">$tparent_path</span><span class="keyword">, </span><span class="default">$DOCUMENT_ROOT</span><span class="keyword">))<br /> </span><span class="default">$tparent_path </span><span class="keyword">= </span><span class="default">$tdir</span><span class="keyword">;<br /><br />if (!isset (</span><span class="default">$tdir</span><span class="keyword">))<br /> {<br /> </span><span class="default">$dir </span><span class="keyword">= </span><span class="default">getcwd </span><span class="keyword">();<br /> }<br />else<br /> </span><span class="default">$dir </span><span class="keyword">= </span><span class="default">$tdir</span><span class="keyword">;<br /><br />if (!isset (</span><span class="default">$tparent_path</span><span class="keyword">))<br /> {<br /> </span><span class="default">$parent_path </span><span class="keyword">= </span><span class="default">$dir</span><span class="keyword">;<br /> }<br />else<br /> </span><span class="default">$parent_path </span><span class="keyword">= </span><span class="default">$tparent_path</span><span class="keyword">;<br /><br />echo </span><span class="string">"&lt;br&gt;"</span><span class="keyword">;<br />if (!isset (</span><span class="default">$tdir</span><span class="keyword">))<br /> {<br /> </span><span class="default">$upurl </span><span class="keyword">= </span><span class="default">$PHP_SELF</span><span class="keyword">;<br /> }<br />else<br /> {<br /> if (</span><span class="default">$parent_path </span><span class="keyword">== </span><span class="default">$DOCUMENT_ROOT</span><span class="keyword">)<br /> </span><span class="default">$parent_parent_path </span><span class="keyword">= </span><span class="default">$parent_path</span><span class="keyword">;<br /> else<br /> </span><span class="default">$parent_parent_path </span><span class="keyword">= </span><span class="default">dirname </span><span class="keyword">(</span><span class="default">$parent_path</span><span class="keyword">);<br /> </span><span class="default">$upurl </span><span class="keyword">= </span><span class="default">$PHP_SELF</span><span class="keyword">.</span><span class="string">"?dir="</span><span class="keyword">.</span><span class="default">$parent_path</span><span class="keyword">.</span><span class="string">"&amp;parent_path="</span><span class="keyword">.<br /> </span><span class="default">$parent_parent_path</span><span class="keyword">;<br /> }<br /><br />if(</span><span class="default">$dbg</span><span class="keyword">==</span><span class="default">1</span><span class="keyword">)<br />{<br /> echo </span><span class="string">"PHP_SELF: </span><span class="default">$PHP_SELF</span><span class="string">&lt;br&gt;\n"</span><span class="keyword">;<br /> echo </span><span class="string">"DOCUMENT_ROOT: </span><span class="default">$DOCUMENT_ROOT</span><span class="string">&lt;br&gt;\n"</span><span class="keyword">;<br /> echo </span><span class="string">"dir: </span><span class="default">$dir</span><span class="string">&lt;br&gt;\n"</span><span class="keyword">;<br /> echo </span><span class="string">"parent_path: </span><span class="default">$parent_path</span><span class="string">&lt;br&gt;\n"</span><span class="keyword">;<br /> echo </span><span class="string">"upurl: </span><span class="default">$upurl</span><span class="string">&lt;br&gt;\n"</span><span class="keyword">;<br />}<br /><br />echo </span><span class="string">"&lt;a href=\"</span><span class="default">$upurl</span><span class="string">\"&gt; &lt;h3&gt;Up&lt;/h3&gt; &lt;/a&gt;\n"</span><span class="keyword">;<br />echo </span><span class="string">"&lt;h2&gt;</span><span class="default">$dir</span><span class="string">&lt;/h2&gt;\n"</span><span class="keyword">;<br /><br /></span><span class="default">create_tree </span><span class="keyword">(</span><span class="default">$dir</span><span class="keyword">, </span><span class="default">$parent_path</span><span class="keyword">);<br /><br />function<br /></span><span class="default">urlFromPath </span><span class="keyword">(</span><span class="default">$path</span><span class="keyword">)<br />{<br /> global </span><span class="default">$PHP_SELF</span><span class="keyword">;<br /> global </span><span class="default">$DOCUMENT_ROOT</span><span class="keyword">;<br /> </span><span class="default">$prefix </span><span class="keyword">= </span><span class="string">""</span><span class="keyword">;<br /> if (</span><span class="default">substr </span><span class="keyword">(</span><span class="default">$path</span><span class="keyword">, </span><span class="default">0</span><span class="keyword">, </span><span class="default">1</span><span class="keyword">) != </span><span class="string">"/"</span><span class="keyword">)<br /> </span><span class="default">$prefix </span><span class="keyword">= </span><span class="string">"/"</span><span class="keyword">;<br /> </span><span class="default">$url </span><span class="keyword">= </span><span class="default">$prefix</span><span class="keyword">.</span><span class="default">ereg_replace </span><span class="keyword">(</span><span class="default">$DOCUMENT_ROOT</span><span class="keyword">, </span><span class="string">""</span><span class="keyword">, </span><span class="default">$path</span><span class="keyword">);<br /> return </span><span class="default">$url</span><span class="keyword">;<br />}<br /><br />function<br /></span><span class="default">create_tree </span><span class="keyword">(</span><span class="default">$dir</span><span class="keyword">, </span><span class="default">$parent_path</span><span class="keyword">)<br />{<br /> if (</span><span class="default">$handle </span><span class="keyword">= </span><span class="default">opendir </span><span class="keyword">(</span><span class="default">$dir</span><span class="keyword">))<br /> {<br /> </span><span class="default">$i </span><span class="keyword">= </span><span class="default">0</span><span class="keyword">;<br /> while (</span><span class="default">false </span><span class="keyword">!== (</span><span class="default">$file </span><span class="keyword">= @</span><span class="default">readdir </span><span class="keyword">(</span><span class="default">$handle</span><span class="keyword">)))<br /> {<br /> if (</span><span class="default">$file </span><span class="keyword">!= </span><span class="string">"." </span><span class="keyword">&amp;&amp; </span><span class="default">$file </span><span class="keyword">!= </span><span class="string">".."</span><span class="keyword">)<br /> {<br /> </span><span class="default">$list</span><span class="keyword">[</span><span class="default">$i</span><span class="keyword">] = </span><span class="default">$file</span><span class="keyword">;<br /> </span><span class="default">$i</span><span class="keyword">++;<br /> }<br /> }<br /> </span><span class="default">$dir_length </span><span class="keyword">= </span><span class="default">count </span><span class="keyword">(</span><span class="default">$list</span><span class="keyword">);<br /> echo </span><span class="string">"&lt;ul&gt;"</span><span class="keyword">;<br /> for (</span><span class="default">$i </span><span class="keyword">= </span><span class="default">0</span><span class="keyword">; </span><span class="default">$i </span><span class="keyword">&lt; </span><span class="default">$dir_length</span><span class="keyword">; </span><span class="default">$i</span><span class="keyword">++)<br /> {<br /> global </span><span class="default">$PHP_SELF</span><span class="keyword">;<br /> global </span><span class="default">$DOCUMENT_ROOT</span><span class="keyword">;<br /> </span><span class="default">$label </span><span class="keyword">= </span><span class="default">$list</span><span class="keyword">[</span><span class="default">$i</span><span class="keyword">];<br /> </span><span class="default">$test </span><span class="keyword">= </span><span class="default">$dir</span><span class="keyword">.</span><span class="string">"/"</span><span class="keyword">.</span><span class="default">$label</span><span class="keyword">;<br /> </span><span class="default">$alink </span><span class="keyword">= </span><span class="default">$dir</span><span class="keyword">.</span><span class="string">"/"</span><span class="keyword">.</span><span class="default">ereg_replace</span><span class="keyword">(</span><span class="string">" "</span><span class="keyword">,</span><span class="string">"%20"</span><span class="keyword">,</span><span class="default">$label</span><span class="keyword">);<br /> if (!</span><span class="default">strstr </span><span class="keyword">(</span><span class="default">$PHP_SELF</span><span class="keyword">, </span><span class="default">$label</span><span class="keyword">))<br /> {<br /> if (</span><span class="default">is_dir </span><span class="keyword">(</span><span class="default">$test</span><span class="keyword">))<br /> {<br /> </span><span class="default">$tmp </span><span class="keyword">= </span><span class="default">$PHP_SELF</span><span class="keyword">. </span><span class="string">"?dir="</span><span class="keyword">.</span><span class="default">$alink</span><span class="keyword">.</span><span class="string">"&amp;parent_path="</span><span class="keyword">.</span><span class="default">$dir</span><span class="keyword">;<br /> </span><span class="default">$url </span><span class="keyword">= </span><span class="default">ereg_replace</span><span class="keyword">(</span><span class="string">" "</span><span class="keyword">, </span><span class="string">"%20"</span><span class="keyword">, </span><span class="default">$tmp</span><span class="keyword">);<br /> echo </span><span class="string">"</span><span class="default">$url</span><span class="string">&lt;br&gt;\n"</span><span class="keyword">;<br /> echo </span><span class="string">"&lt;a href=\"</span><span class="default">$url</span><span class="string">\"&gt;&lt;b&gt;</span><span class="default">$label</span><span class="string">&lt;/b&gt;/&lt;/a&gt;&lt;br&gt;\n"</span><span class="keyword">;<br /> }<br /> else<br /> {<br /> </span><span class="default">$link </span><span class="keyword">= </span><span class="default">urlFromPath </span><span class="keyword">(</span><span class="default">$alink</span><span class="keyword">);<br /><br /> </span><span class="default">$label </span><span class="keyword">= </span><span class="default">$list</span><span class="keyword">[</span><span class="default">$i</span><span class="keyword">];<br /> echo<br /> </span><span class="string">"&lt;a href=\"</span><span class="default">$link</span><span class="string">\"&gt;"</span><span class="keyword">.</span><span class="default">$label</span><span class="keyword">.</span><span class="string">"&lt;/a&gt;&lt;br&gt;\n"</span><span class="keyword">;<br /> }<br /> }<br /> }<br /> echo </span><span class="string">"&lt;/ul&gt;"</span><span class="keyword">;<br /> </span><span class="default">closedir </span><span class="keyword">(</span><span class="default">$handle</span><span class="keyword">);<br /> }<br />}<br /><br /></span><span class="default">?&gt;</span></span></code></div> </div> </div> <div class="note" id="128311"> <div class="votes"> <div id="Vu128311"> <a href="/manual/vote-note.php?id=128311&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd128311"> <a href="/manual/vote-note.php?id=128311&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V128311" title="66% like this..."> 1 </div> </div> <a href="#128311" class="name"> <strong class="user"><em>Alex Dawn</em></strong></a><a class="genanchor" href="#128311"> &para;</a><div class="date" title="2023-03-15 05:56"><strong>1 year ago</strong></div> <div class="text" id="Hcom128311"> <div class="phpcode"><code><span class="html"><span class="default">&lt;?php<br /><br /></span><span class="comment">/**<br /> * These functions pair up nicely with generators, to hide away<br /> * all the messy file handlers (a bit like python's with blocks)<br /> * remove the echos they are just to demo how the generator<br /> * works with the foreach loop.<br /> *<br /> * @param string $filepath<br /> * @return Generator&lt;string&gt;<br /> */<br /></span><span class="keyword">function </span><span class="default">generateFiles</span><span class="keyword">(</span><span class="default">string $filepath</span><span class="keyword">): </span><span class="default">Generator<br /></span><span class="keyword">{<br /> echo </span><span class="string">"opening handle" </span><span class="keyword">. </span><span class="default">PHP_EOL</span><span class="keyword">;<br /> </span><span class="default">$handle </span><span class="keyword">= </span><span class="default">opendir</span><span class="keyword">(</span><span class="default">$filepath</span><span class="keyword">);<br /> </span><span class="comment">// looks more complex than needed but the docs says the type check is important<br /> // <a href="https://www.php.net/manual/en/function.readdir.php" rel="nofollow" target="_blank">https://www.php.net/manual/en/function.readdir.php</a><br /> </span><span class="keyword">try {<br /> while (</span><span class="default">false </span><span class="keyword">!== (</span><span class="default">$entry </span><span class="keyword">= </span><span class="default">readdir</span><span class="keyword">(</span><span class="default">$handle</span><span class="keyword">))) {<br /> yield </span><span class="default">$entry</span><span class="keyword">;<br /> }<br /> } finally {<br /> </span><span class="default">closedir</span><span class="keyword">(</span><span class="default">$handle</span><span class="keyword">);<br /> echo </span><span class="string">"closed handle" </span><span class="keyword">. </span><span class="default">PHP_EOL</span><span class="keyword">;<br /> }<br />}<br /><br />foreach (</span><span class="default">generateFiles</span><span class="keyword">(</span><span class="string">'.'</span><span class="keyword">) as </span><span class="default">$file</span><span class="keyword">) {<br /> echo </span><span class="default">$file </span><span class="keyword">. </span><span class="default">PHP_EOL</span><span class="keyword">;<br />}</span></span></code></div> </div> </div> <div class="note" id="53045"> <div class="votes"> <div id="Vu53045"> <a href="/manual/vote-note.php?id=53045&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd53045"> <a href="/manual/vote-note.php?id=53045&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V53045" title="62% like this..."> 2 </div> </div> <a href="#53045" class="name"> <strong class="user"><em>Lasse Dalegaard</em></strong></a><a class="genanchor" href="#53045"> &para;</a><div class="date" title="2005-05-21 12:25"><strong>19 years ago</strong></div> <div class="text" id="Hcom53045"> <div class="phpcode"><code><span class="html">I made a function for finding all files in a specified directory and all subdirectories. It can be quite usefull when searching in alot of files in alot subdirectories. The function returns an array with the path of all the files found.<br /><br />&lt;?<br />function getFiles($directory) {<br /> // Try to open the directory<br /> if($dir = opendir($directory)) {<br /> // Create an array for all files found<br /> $tmp = Array();<br /><br /> // Add the files<br /> while($file = readdir($dir)) {<br /> // Make sure the file exists<br /> if($file != "." &amp;&amp; $file != ".." &amp;&amp; $file[0] != '.') {<br /> // If it's a directiry, list all files within it<br /> if(is_dir($directory . "/" . $file)) {<br /> $tmp2 = getFiles($directory . "/" . $file);<br /> if(is_array($tmp2)) {<br /> $tmp = array_merge($tmp, $tmp2);<br /> }<br /> } else {<br /> array_push($tmp, $directory . "/" . $file);<br /> }<br /> }<br /> }<br /><br /> // Finish off the function<br /> closedir($dir);<br /> return $tmp;<br /> }<br />}<br /><br />// Example of use<br />print_r(getFiles('.')); // This will find all files in the current directory and all subdirectories<br />?&gt;</span></code></div> </div> </div> <div class="note" id="60169"> <div class="votes"> <div id="Vu60169"> <a href="/manual/vote-note.php?id=60169&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd60169"> <a href="/manual/vote-note.php?id=60169&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V60169" title="60% like this..."> 1 </div> </div> <a href="#60169" class="name"> <strong class="user"><em>mstabile75 at gmail dot com</em></strong></a><a class="genanchor" href="#60169"> &para;</a><div class="date" title="2005-12-28 08:26"><strong>19 years ago</strong></div> <div class="text" id="Hcom60169"> <div class="phpcode"><code><span class="html">In my previous post I ran into a problem with the "global" definition of $directorylist. If I called the function more than once on the same page it would combine the file lists. I looked at Lasse Dalegaard's example and used the following solution.<br /><br />remove global definition<br /> global $directorylist; <br /><br />REPLACE <br />&lt;?<br />if ((($maxlevel) == "all") or ($maxlevel &gt; $level)) {<br /> filelist($startdir . $file . "/", $searchSubdirs, $directoriesonly, $maxlevel, $level + 1);<br />}<br />?&gt;<br />WITH<br />&lt;?<br />if ((($maxlevel) == "all") or ($maxlevel &gt; $level)) {<br /> $list2 = filelist($startdir . $file . "/", $searchSubdirs, $directoriesonly, $maxlevel, $level + 1);<br /> if(is_array($list2)) {<br /> $directorylist = array_merge($directorylist, $list2);<br /> }<br />}<br />?&gt;</span></code></div> </div> </div> <div class="note" id="79759"> <div class="votes"> <div id="Vu79759"> <a href="/manual/vote-note.php?id=79759&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd79759"> <a href="/manual/vote-note.php?id=79759&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V79759" title="57% like this..."> 1 </div> </div> <a href="#79759" class="name"> <strong class="user"><em>Peter Hkansson</em></strong></a><a class="genanchor" href="#79759"> &para;</a><div class="date" title="2007-12-11 09:01"><strong>17 years ago</strong></div> <div class="text" id="Hcom79759"> <div class="phpcode"><code><span class="html">Would you like to view your directories in your browser this script might come in handy.<br /><br /><span class="default">&lt;?php<br />$sub </span><span class="keyword">= (</span><span class="default">$_GET</span><span class="keyword">[</span><span class="string">'dir'</span><span class="keyword">]);<br /></span><span class="default">$path </span><span class="keyword">= </span><span class="string">'enter/your/directory/here/'</span><span class="keyword">;<br /></span><span class="default">$path </span><span class="keyword">= </span><span class="default">$path </span><span class="keyword">. </span><span class="string">"</span><span class="default">$sub</span><span class="string">"</span><span class="keyword">;<br /></span><span class="default">$dh </span><span class="keyword">= </span><span class="default">opendir</span><span class="keyword">(</span><span class="default">$path</span><span class="keyword">);<br /></span><span class="default">$i</span><span class="keyword">=</span><span class="default">1</span><span class="keyword">;<br />while ((</span><span class="default">$file </span><span class="keyword">= </span><span class="default">readdir</span><span class="keyword">(</span><span class="default">$dh</span><span class="keyword">)) !== </span><span class="default">false</span><span class="keyword">) {<br /> if(</span><span class="default">$file </span><span class="keyword">!= </span><span class="string">"." </span><span class="keyword">&amp;&amp; </span><span class="default">$file </span><span class="keyword">!= </span><span class="string">".."</span><span class="keyword">) {<br /> if (</span><span class="default">substr</span><span class="keyword">(</span><span class="default">$file</span><span class="keyword">, -</span><span class="default">4</span><span class="keyword">, -</span><span class="default">3</span><span class="keyword">) ==</span><span class="string">"."</span><span class="keyword">){<br /> echo </span><span class="string">"</span><span class="default">$i</span><span class="string">. </span><span class="default">$file</span><span class="string"> &lt;br /&gt;"</span><span class="keyword">;<br /> }else{ <br /> echo </span><span class="string">"</span><span class="default">$i</span><span class="string">. &lt;a href='?dir=</span><span class="default">$sub</span><span class="string">/</span><span class="default">$file</span><span class="string">'&gt;</span><span class="default">$file</span><span class="string">&lt;/a&gt;&lt;br /&gt;"</span><span class="keyword">;<br /> }<br /> </span><span class="default">$i</span><span class="keyword">++;<br /> }<br />}<br /></span><span class="default">closedir</span><span class="keyword">(</span><span class="default">$dh</span><span class="keyword">);<br /></span><span class="default">?&gt;</span></span></code></div> </div> </div> <div class="note" id="78261"> <div class="votes"> <div id="Vu78261"> <a href="/manual/vote-note.php?id=78261&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd78261"> <a href="/manual/vote-note.php?id=78261&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V78261" title="57% like this..."> 1 </div> </div> <a href="#78261" class="name"> <strong class="user"><em>MetaNull</em></strong></a><a class="genanchor" href="#78261"> &para;</a><div class="date" title="2007-10-04 11:39"><strong>17 years ago</strong></div> <div class="text" id="Hcom78261"> <div class="phpcode"><code><span class="html">An other way to recursively walk a directory and it's content, applying a callback to each file.<br /><br />Exemple: Update the last modification time of each file in a folder<br /><br /><span class="default">&lt;?php<br /><br />clearstatcache</span><span class="keyword">();<br /><br /></span><span class="default">$sourcepath </span><span class="keyword">= </span><span class="string">"C:/WINDOWS/TEMP"</span><span class="keyword">;<br /><br /></span><span class="comment">// Replace \ by / and remove the final / if any<br /></span><span class="default">$root </span><span class="keyword">= </span><span class="default">ereg_replace</span><span class="keyword">( </span><span class="string">"/$"</span><span class="keyword">, </span><span class="string">""</span><span class="keyword">, </span><span class="default">ereg_replace</span><span class="keyword">( </span><span class="string">"[\\]"</span><span class="keyword">, </span><span class="string">"/"</span><span class="keyword">, </span><span class="default">$sourcepath </span><span class="keyword">));<br /></span><span class="comment">// Touch all the files from the $root directory<br /></span><span class="keyword">if( </span><span class="default">false </span><span class="keyword">=== </span><span class="default">m_walk_dir</span><span class="keyword">( </span><span class="default">$root</span><span class="keyword">, </span><span class="string">"m_touch_file"</span><span class="keyword">, </span><span class="default">true </span><span class="keyword">)) {<br /> echo </span><span class="string">"'</span><span class="keyword">{</span><span class="default">$root</span><span class="keyword">}</span><span class="string">' is not a valid directory\n"</span><span class="keyword">;<br />}<br /><br /></span><span class="comment">// Walk a directory recursivelly, and apply a callback on each file<br /></span><span class="keyword">function </span><span class="default">m_walk_dir</span><span class="keyword">( </span><span class="default">$root</span><span class="keyword">, </span><span class="default">$callback</span><span class="keyword">, </span><span class="default">$recursive </span><span class="keyword">= </span><span class="default">true </span><span class="keyword">) {<br /> </span><span class="default">$dh </span><span class="keyword">= @</span><span class="default">opendir</span><span class="keyword">( </span><span class="default">$root </span><span class="keyword">);<br /> if( </span><span class="default">false </span><span class="keyword">=== </span><span class="default">$dh </span><span class="keyword">) {<br /> return </span><span class="default">false</span><span class="keyword">;<br /> }<br /> while( </span><span class="default">$file </span><span class="keyword">= </span><span class="default">readdir</span><span class="keyword">( </span><span class="default">$dh </span><span class="keyword">)) {<br /> if( </span><span class="string">"." </span><span class="keyword">== </span><span class="default">$file </span><span class="keyword">|| </span><span class="string">".." </span><span class="keyword">== </span><span class="default">$file </span><span class="keyword">){<br /> continue;<br /> }<br /> </span><span class="default">call_user_func</span><span class="keyword">( </span><span class="default">$callback</span><span class="keyword">, </span><span class="string">"</span><span class="keyword">{</span><span class="default">$root</span><span class="keyword">}</span><span class="string">/</span><span class="keyword">{</span><span class="default">$file</span><span class="keyword">}</span><span class="string">" </span><span class="keyword">);<br /> if( </span><span class="default">false </span><span class="keyword">!== </span><span class="default">$recursive </span><span class="keyword">&amp;&amp; </span><span class="default">is_dir</span><span class="keyword">( </span><span class="string">"</span><span class="keyword">{</span><span class="default">$root</span><span class="keyword">}</span><span class="string">/</span><span class="keyword">{</span><span class="default">$file</span><span class="keyword">}</span><span class="string">" </span><span class="keyword">)) {<br /> </span><span class="default">m_walk_dir</span><span class="keyword">( </span><span class="string">"</span><span class="keyword">{</span><span class="default">$root</span><span class="keyword">}</span><span class="string">/</span><span class="keyword">{</span><span class="default">$file</span><span class="keyword">}</span><span class="string">"</span><span class="keyword">, </span><span class="default">$callback</span><span class="keyword">, </span><span class="default">$recursive </span><span class="keyword">);<br /> }<br /> }<br /> </span><span class="default">closedir</span><span class="keyword">( </span><span class="default">$dh </span><span class="keyword">);<br /> return </span><span class="default">true</span><span class="keyword">;<br />}<br /><br /></span><span class="comment">// if the path indicates a file, run touch() on it<br /></span><span class="keyword">function </span><span class="default">m_touch_file</span><span class="keyword">( </span><span class="default">$path </span><span class="keyword">) {<br /> echo </span><span class="default">$path </span><span class="keyword">. </span><span class="string">"\n"</span><span class="keyword">;<br /> if( !</span><span class="default">is_dir</span><span class="keyword">( </span><span class="default">$path </span><span class="keyword">)) {<br /> </span><span class="default">touch</span><span class="keyword">( </span><span class="default">$path </span><span class="keyword">);<br /> }<br />}<br /><br /></span><span class="default">?&gt;</span></span></code></div> </div> </div> <div class="note" id="59599"> <div class="votes"> <div id="Vu59599"> <a href="/manual/vote-note.php?id=59599&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd59599"> <a href="/manual/vote-note.php?id=59599&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V59599" title="57% like this..."> 1 </div> </div> <a href="#59599" class="name"> <strong class="user"><em>chrys at mytechjournal dot com</em></strong></a><a class="genanchor" href="#59599"> &para;</a><div class="date" title="2005-12-10 11:16"><strong>19 years ago</strong></div> <div class="text" id="Hcom59599"> <div class="phpcode"><code><span class="html">I wrote a function to recursively delete files from a starting directory. I had to do this because my server doesn't allow me to delete files that apache writes because I don't have permissions, so... I let apache do the work.<br /><br /><span class="default">&lt;?php<br />$dir </span><span class="keyword">= </span><span class="string">"/path/to/base/dir"</span><span class="keyword">;<br /><br /></span><span class="default">recursive_delete</span><span class="keyword">(</span><span class="default">$dir</span><span class="keyword">);<br /><br />function </span><span class="default">recursive_delete</span><span class="keyword">( </span><span class="default">$dir </span><span class="keyword">)<br />{<br /> if (</span><span class="default">is_dir</span><span class="keyword">(</span><span class="default">$dir</span><span class="keyword">)) {<br /> if (</span><span class="default">$dh </span><span class="keyword">= </span><span class="default">opendir</span><span class="keyword">(</span><span class="default">$dir</span><span class="keyword">)) {<br /> while ((</span><span class="default">$file </span><span class="keyword">= </span><span class="default">readdir</span><span class="keyword">(</span><span class="default">$dh</span><span class="keyword">)) !== </span><span class="default">false </span><span class="keyword">) {<br /> if( </span><span class="default">$file </span><span class="keyword">!= </span><span class="string">"." </span><span class="keyword">&amp;&amp; </span><span class="default">$file </span><span class="keyword">!= </span><span class="string">".." </span><span class="keyword">)<br /> {<br /> if( </span><span class="default">is_dir</span><span class="keyword">( </span><span class="default">$dir </span><span class="keyword">. </span><span class="default">$file </span><span class="keyword">) )<br /> {<br /> echo </span><span class="string">"Entering Directory: </span><span class="default">$dir$file</span><span class="string">&lt;br/&gt;"</span><span class="keyword">;<br /> </span><span class="default">recursive_delete</span><span class="keyword">( </span><span class="default">$dir </span><span class="keyword">. </span><span class="default">$file </span><span class="keyword">. </span><span class="string">"/" </span><span class="keyword">);<br /> echo </span><span class="string">"Removing Directory: </span><span class="default">$dir$file</span><span class="string">&lt;br/&gt;&lt;br/&gt;"</span><span class="keyword">;<br /> </span><span class="default">rmdir</span><span class="keyword">( </span><span class="default">$dir </span><span class="keyword">. </span><span class="default">$file </span><span class="keyword">);<br /> }<br /> else<br /> {<br /> echo </span><span class="string">"Deleting file: </span><span class="default">$dir$file</span><span class="string">&lt;br/&gt;"</span><span class="keyword">;<br /> </span><span class="default">unlink</span><span class="keyword">( </span><span class="default">$dir </span><span class="keyword">. </span><span class="default">$file </span><span class="keyword">);<br /> }<br /> }<br /> }<br /> </span><span class="default">closedir</span><span class="keyword">(</span><span class="default">$dh</span><span class="keyword">);<br /> }<br /> }<br />}<br /></span><span class="default">?&gt;</span></span></code></div> </div> </div> <div class="note" id="79685"> <div class="votes"> <div id="Vu79685"> <a href="/manual/vote-note.php?id=79685&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd79685"> <a href="/manual/vote-note.php?id=79685&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V79685" title="53% like this..."> 1 </div> </div> <a href="#79685" class="name"> <strong class="user"><em>mana at averna dot com</em></strong></a><a class="genanchor" href="#79685"> &para;</a><div class="date" title="2007-12-07 03:02"><strong>17 years ago</strong></div> <div class="text" id="Hcom79685"> <div class="phpcode"><code><span class="html">I was trying to access network drives using this opendir function. I read so many posts saying that it was almost impossible to access a network drive and finally, I found the answer; there are 2 steps to be followed to access a network drive with PHP either on the same machine or another machine.<br /><br />But first of all, here's the error I was getting:<br />Warning: opendir(\\server\folder1\sub_folder) [function.opendir]: failed to open dir: No error in C:\wamp\www\PMOT\v0.1\REPORT_MENU\index.php on line 17<br /><br />Firstly, one must make sure that the folder \\server\folder1\sub_folder can be accessed by a user, let's say USER_TEST with a password PASS_TEST. By setting properties to this folder, one can add this given user with the correct password (USER_TEST with PASS_TEST).<br /><br />Secondly, the APACHE service must be set-up to take this user into account. If no user is specified, APACHE uses an anonymous user and this is where the problem/error message is coming from. One must go in control panel-&gt;administrative tools-&gt;services. One will see the list of services and must look for APACHE with Apache/2.X.X in the description. (For Wampserver, it will be called wampapache, and so on!) Right click on that and pop up the properties screen. In the tab LOG ON, there are 2 options: local system account and "this account" which will be a user specified account. This is where one must specify the USER_TEST and PASS_TEST.<br /><br />Following these steps worked perfectly for me but if either the folder privileges or apache log on user is disabled, then I get the initial aforementioned error message.<br /><br />Anyways, I hope this can help out someone!<br /><br />Cheers!<br /><br />Marc</span></code></div> </div> </div> <div class="note" id="83990"> <div class="votes"> <div id="Vu83990"> <a href="/manual/vote-note.php?id=83990&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd83990"> <a href="/manual/vote-note.php?id=83990&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V83990" title="51% like this..."> 1 </div> </div> <a href="#83990" class="name"> <strong class="user"><em>archipel dot gb at online dot fr</em></strong></a><a class="genanchor" href="#83990"> &para;</a><div class="date" title="2008-06-22 10:20"><strong>16 years ago</strong></div> <div class="text" id="Hcom83990"> <div class="phpcode"><code><span class="html">Here are two versions of the same function to list all files in a directory tree.<br /><br />The first one is recursive (calls itself while going through subdirectories) :<br /><span class="default">&lt;?php<br /></span><span class="keyword">function </span><span class="default">rec_listFiles</span><span class="keyword">( </span><span class="default">$from </span><span class="keyword">= </span><span class="string">'.'</span><span class="keyword">)<br />{<br /> if(! </span><span class="default">is_dir</span><span class="keyword">(</span><span class="default">$from</span><span class="keyword">))<br /> return </span><span class="default">false</span><span class="keyword">;<br /> <br /> </span><span class="default">$files </span><span class="keyword">= array();<br /> if( </span><span class="default">$dh </span><span class="keyword">= </span><span class="default">opendir</span><span class="keyword">(</span><span class="default">$from</span><span class="keyword">))<br /> {<br /> while( </span><span class="default">false </span><span class="keyword">!== (</span><span class="default">$file </span><span class="keyword">= </span><span class="default">readdir</span><span class="keyword">(</span><span class="default">$dh</span><span class="keyword">)))<br /> {<br /> </span><span class="comment">// Skip '.' and '..'<br /> </span><span class="keyword">if( </span><span class="default">$file </span><span class="keyword">== </span><span class="string">'.' </span><span class="keyword">|| </span><span class="default">$file </span><span class="keyword">== </span><span class="string">'..'</span><span class="keyword">)<br /> continue;<br /> </span><span class="default">$path </span><span class="keyword">= </span><span class="default">$from </span><span class="keyword">. </span><span class="string">'/' </span><span class="keyword">. </span><span class="default">$file</span><span class="keyword">;<br /> if( </span><span class="default">is_dir</span><span class="keyword">(</span><span class="default">$path</span><span class="keyword">) )<br /> </span><span class="default">$files </span><span class="keyword">+= </span><span class="default">rec_listFiles</span><span class="keyword">(</span><span class="default">$path</span><span class="keyword">);<br /> else<br /> </span><span class="default">$files</span><span class="keyword">[] = </span><span class="default">$path</span><span class="keyword">;<br /> }<br /> </span><span class="default">closedir</span><span class="keyword">(</span><span class="default">$dh</span><span class="keyword">);<br /> }<br /> return </span><span class="default">$files</span><span class="keyword">;<br />}<br /></span><span class="default">?&gt;<br /></span><br />The second one is iterative (uses less memory) :<br /><span class="default">&lt;?php<br /></span><span class="keyword">function </span><span class="default">listFiles</span><span class="keyword">( </span><span class="default">$from </span><span class="keyword">= </span><span class="string">'.'</span><span class="keyword">)<br />{<br /> if(! </span><span class="default">is_dir</span><span class="keyword">(</span><span class="default">$from</span><span class="keyword">))<br /> return </span><span class="default">false</span><span class="keyword">;<br /> <br /> </span><span class="default">$files </span><span class="keyword">= array();<br /> </span><span class="default">$dirs </span><span class="keyword">= array( </span><span class="default">$from</span><span class="keyword">);<br /> while( </span><span class="default">NULL </span><span class="keyword">!== (</span><span class="default">$dir </span><span class="keyword">= </span><span class="default">array_pop</span><span class="keyword">( </span><span class="default">$dirs</span><span class="keyword">)))<br /> {<br /> if( </span><span class="default">$dh </span><span class="keyword">= </span><span class="default">opendir</span><span class="keyword">(</span><span class="default">$dir</span><span class="keyword">))<br /> {<br /> while( </span><span class="default">false </span><span class="keyword">!== (</span><span class="default">$file </span><span class="keyword">= </span><span class="default">readdir</span><span class="keyword">(</span><span class="default">$dh</span><span class="keyword">)))<br /> {<br /> if( </span><span class="default">$file </span><span class="keyword">== </span><span class="string">'.' </span><span class="keyword">|| </span><span class="default">$file </span><span class="keyword">== </span><span class="string">'..'</span><span class="keyword">)<br /> continue;<br /> </span><span class="default">$path </span><span class="keyword">= </span><span class="default">$dir </span><span class="keyword">. </span><span class="string">'/' </span><span class="keyword">. </span><span class="default">$file</span><span class="keyword">;<br /> if( </span><span class="default">is_dir</span><span class="keyword">(</span><span class="default">$path</span><span class="keyword">))<br /> </span><span class="default">$dirs</span><span class="keyword">[] = </span><span class="default">$path</span><span class="keyword">;<br /> else<br /> </span><span class="default">$files</span><span class="keyword">[] = </span><span class="default">$path</span><span class="keyword">;<br /> }<br /> </span><span class="default">closedir</span><span class="keyword">(</span><span class="default">$dh</span><span class="keyword">);<br /> }<br /> }<br /> return </span><span class="default">$files</span><span class="keyword">;<br />}<br /></span><span class="default">?&gt;<br /></span>The iterative version should be a little faster most of the time, but the big difference is in the memory usage.<br /><br />Here is also a profiling function (works in php5 only) :<br /><span class="default">&lt;?php<br /></span><span class="keyword">function </span><span class="default">profile</span><span class="keyword">( </span><span class="default">$func</span><span class="keyword">, </span><span class="default">$trydir</span><span class="keyword">)<br />{<br /> </span><span class="default">$mem1 </span><span class="keyword">= </span><span class="default">memory_get_usage</span><span class="keyword">();<br /> echo </span><span class="string">'&lt;pre&gt;-----------------------<br />Test run for '</span><span class="keyword">.</span><span class="default">$func</span><span class="keyword">.</span><span class="string">'() ...<br />'</span><span class="keyword">; </span><span class="default">flush</span><span class="keyword">();<br /><br /> </span><span class="default">$time_start </span><span class="keyword">= </span><span class="default">microtime</span><span class="keyword">(</span><span class="default">true</span><span class="keyword">);<br /> </span><span class="default">$list </span><span class="keyword">= </span><span class="default">$func</span><span class="keyword">( </span><span class="default">$trydir</span><span class="keyword">);<br /> </span><span class="default">$time </span><span class="keyword">= </span><span class="default">microtime</span><span class="keyword">(</span><span class="default">true</span><span class="keyword">) - </span><span class="default">$time_start</span><span class="keyword">;<br /><br /> echo </span><span class="string">'Finished : '</span><span class="keyword">.</span><span class="default">count</span><span class="keyword">(</span><span class="default">$list</span><span class="keyword">).</span><span class="string">' files&lt;/pre&gt;'</span><span class="keyword">;<br /> </span><span class="default">$mem2 </span><span class="keyword">= </span><span class="default">memory_get_peak_usage</span><span class="keyword">();<br /><br /> </span><span class="default">printf</span><span class="keyword">( </span><span class="string">'&lt;pre&gt;Max memory for '</span><span class="keyword">.</span><span class="default">$func</span><span class="keyword">.</span><span class="string">'() : %0.2f kbytes<br />Running time for '</span><span class="keyword">.</span><span class="default">$func</span><span class="keyword">.</span><span class="string">'() : %0.f s&lt;/pre&gt;'</span><span class="keyword">,<br /> (</span><span class="default">$mem2</span><span class="keyword">-</span><span class="default">$mem1</span><span class="keyword">)/</span><span class="default">1024.0</span><span class="keyword">, </span><span class="default">$time</span><span class="keyword">);<br /> return </span><span class="default">$list</span><span class="keyword">;<br />}<br /></span><span class="default">?&gt;</span></span></code></div> </div> </div> <div class="note" id="73085"> <div class="votes"> <div id="Vu73085"> <a href="/manual/vote-note.php?id=73085&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd73085"> <a href="/manual/vote-note.php?id=73085&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V73085" title="50% like this..."> 0 </div> </div> <a href="#73085" class="name"> <strong class="user"><em>NerdyDork</em></strong></a><a class="genanchor" href="#73085"> &para;</a><div class="date" title="2007-02-08 08:36"><strong>18 years ago</strong></div> <div class="text" id="Hcom73085"> <div class="phpcode"><code><span class="html">Here is a snippet to create a site map of all html files in a folder:<br /><br /><span class="default">&lt;?php<br /> </span><span class="comment">// read all html file in the current directory<br /> </span><span class="keyword">if (</span><span class="default">$dh </span><span class="keyword">= </span><span class="default">opendir</span><span class="keyword">(</span><span class="string">'./'</span><span class="keyword">)) {<br /> </span><span class="default">$files </span><span class="keyword">= array();<br /> while ((</span><span class="default">$file </span><span class="keyword">= </span><span class="default">readdir</span><span class="keyword">(</span><span class="default">$dh</span><span class="keyword">)) !== </span><span class="default">false</span><span class="keyword">) {<br /> if (</span><span class="default">substr</span><span class="keyword">(</span><span class="default">$file</span><span class="keyword">, </span><span class="default">strlen</span><span class="keyword">(</span><span class="default">$file</span><span class="keyword">) - </span><span class="default">5</span><span class="keyword">) == </span><span class="string">'.html'</span><span class="keyword">) {<br /> </span><span class="default">array_push</span><span class="keyword">(</span><span class="default">$files</span><span class="keyword">, </span><span class="default">$file</span><span class="keyword">);<br /> }<br /> }<br /> </span><span class="default">closedir</span><span class="keyword">(</span><span class="default">$dh</span><span class="keyword">);<br /> }<br /> <br /> </span><span class="comment">// Sort the files and display<br /> </span><span class="default">sort</span><span class="keyword">(</span><span class="default">$files</span><span class="keyword">);<br /> echo </span><span class="string">"&lt;ul&gt;\n"</span><span class="keyword">;<br /> foreach (</span><span class="default">$files </span><span class="keyword">as </span><span class="default">$file</span><span class="keyword">) {<br /> </span><span class="default">$title </span><span class="keyword">= </span><span class="default">Title</span><span class="keyword">(</span><span class="default">$file</span><span class="keyword">);<br /> echo </span><span class="string">"&lt;li&gt;&lt;a href=\"</span><span class="default">$file</span><span class="string">\" title=\"</span><span class="default">$title</span><span class="string">\"&gt;</span><span class="default">$title</span><span class="string">&lt;/a&gt;&lt;/li&gt;\n"</span><span class="keyword">;<br /> }<br /> echo </span><span class="string">"&lt;/ul&gt;\n"</span><span class="keyword">;<br /> <br /> </span><span class="comment">// Function to get a human readable title from the filename<br /> </span><span class="keyword">function </span><span class="default">Title</span><span class="keyword">(</span><span class="default">$filename</span><span class="keyword">) {<br /> </span><span class="default">$title </span><span class="keyword">= </span><span class="default">substr</span><span class="keyword">(</span><span class="default">$filename</span><span class="keyword">, </span><span class="default">0</span><span class="keyword">, </span><span class="default">strlen</span><span class="keyword">(</span><span class="default">$filename</span><span class="keyword">) - </span><span class="default">5</span><span class="keyword">);<br /> </span><span class="default">$title </span><span class="keyword">= </span><span class="default">str_replace</span><span class="keyword">(</span><span class="string">'-'</span><span class="keyword">, </span><span class="string">' '</span><span class="keyword">, </span><span class="default">$title</span><span class="keyword">);<br /> </span><span class="default">$title </span><span class="keyword">= </span><span class="default">ucwords</span><span class="keyword">(</span><span class="default">$title</span><span class="keyword">);<br /> return </span><span class="default">$title</span><span class="keyword">;<br /> }<br /></span><span class="default">?&gt;</span></span></code></div> </div> </div> <div class="note" id="66052"> <div class="votes"> <div id="Vu66052"> <a href="/manual/vote-note.php?id=66052&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd66052"> <a href="/manual/vote-note.php?id=66052&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V66052" title="50% like this..."> 0 </div> </div> <a href="#66052" class="name"> <strong class="user"><em>tim2005</em></strong></a><a class="genanchor" href="#66052"> &para;</a><div class="date" title="2006-05-13 05:04"><strong>18 years ago</strong></div> <div class="text" id="Hcom66052"> <div class="phpcode"><code><span class="html">Hello,<br /><br />A friend of mine is running a webhost, I think i found a security leak with this script:<br /><br /><span class="default">&lt;?php<br /></span><span class="keyword">function </span><span class="default">select_files</span><span class="keyword">(</span><span class="default">$dir</span><span class="keyword">, </span><span class="default">$label </span><span class="keyword">= </span><span class="string">""</span><span class="keyword">, </span><span class="default">$select_name</span><span class="keyword">, </span><span class="default">$curr_val </span><span class="keyword">= </span><span class="string">""</span><span class="keyword">, </span><span class="default">$char_length </span><span class="keyword">= </span><span class="default">30</span><span class="keyword">) {<br /> </span><span class="default">$teller </span><span class="keyword">= </span><span class="default">0</span><span class="keyword">;<br /> if (</span><span class="default">$handle </span><span class="keyword">= </span><span class="default">opendir</span><span class="keyword">(</span><span class="default">$dir</span><span class="keyword">)) {<br /> </span><span class="default">$mydir </span><span class="keyword">= (</span><span class="default">$label </span><span class="keyword">!= </span><span class="string">""</span><span class="keyword">) ? </span><span class="string">"&lt;label for=\""</span><span class="keyword">.</span><span class="default">$select_name</span><span class="keyword">.</span><span class="string">"\"&gt;"</span><span class="keyword">.</span><span class="default">$label</span><span class="keyword">.</span><span class="string">"&lt;/label&gt;\n" </span><span class="keyword">: </span><span class="string">""</span><span class="keyword">;<br /> </span><span class="default">$mydir </span><span class="keyword">.= </span><span class="string">"&lt;select name=\""</span><span class="keyword">.</span><span class="default">$select_name</span><span class="keyword">.</span><span class="string">"\"&gt;\n"</span><span class="keyword">;<br /> </span><span class="default">$curr_val </span><span class="keyword">= (isset(</span><span class="default">$_REQUEST</span><span class="keyword">[</span><span class="default">$select_name</span><span class="keyword">])) ? </span><span class="default">$_REQUEST</span><span class="keyword">[</span><span class="default">$select_name</span><span class="keyword">] : </span><span class="default">$curr_val</span><span class="keyword">;<br /> </span><span class="default">$mydir </span><span class="keyword">.= (</span><span class="default">$curr_val </span><span class="keyword">== </span><span class="string">""</span><span class="keyword">) ? </span><span class="string">" &lt;option value=\"\" selected&gt;...\n" </span><span class="keyword">: </span><span class="string">"&lt;option value=\"\"&gt;...\n"</span><span class="keyword">;<br /> while (</span><span class="default">false </span><span class="keyword">!== (</span><span class="default">$file </span><span class="keyword">= </span><span class="default">readdir</span><span class="keyword">(</span><span class="default">$handle</span><span class="keyword">))) {<br /> </span><span class="default">$files</span><span class="keyword">[] = </span><span class="default">$file</span><span class="keyword">;<br /> }<br /> </span><span class="default">closedir</span><span class="keyword">(</span><span class="default">$handle</span><span class="keyword">);<br /> </span><span class="default">sort</span><span class="keyword">(</span><span class="default">$files</span><span class="keyword">);<br /> foreach (</span><span class="default">$files </span><span class="keyword">as </span><span class="default">$val</span><span class="keyword">) {<br /> if (</span><span class="default">is_file</span><span class="keyword">(</span><span class="default">$dir</span><span class="keyword">.</span><span class="default">$val</span><span class="keyword">)) { </span><span class="comment">// show only real files (ver. 1.01)<br /> </span><span class="default">$mydir </span><span class="keyword">.= </span><span class="string">" &lt;option value=\""</span><span class="keyword">.</span><span class="default">$val</span><span class="keyword">.</span><span class="string">"\""</span><span class="keyword">;<br /> </span><span class="default">$mydir </span><span class="keyword">.= (</span><span class="default">$val </span><span class="keyword">== </span><span class="default">$curr_val</span><span class="keyword">) ? </span><span class="string">" selected&gt;" </span><span class="keyword">: </span><span class="string">"&gt;"</span><span class="keyword">;<br /> </span><span class="default">$mydir </span><span class="keyword">.= (</span><span class="default">strlen</span><span class="keyword">(</span><span class="default">$val</span><span class="keyword">) &gt; </span><span class="default">$char_length</span><span class="keyword">) ? </span><span class="default">substr</span><span class="keyword">(</span><span class="default">$val</span><span class="keyword">, </span><span class="default">0</span><span class="keyword">, </span><span class="default">$char_length</span><span class="keyword">).</span><span class="string">"...\n" </span><span class="keyword">: </span><span class="default">$val</span><span class="keyword">.</span><span class="string">"\n"</span><span class="keyword">;<br /> </span><span class="default">$teller</span><span class="keyword">++; <br /> }<br /> }<br /> </span><span class="default">$mydir </span><span class="keyword">.= </span><span class="string">"&lt;/select&gt;"</span><span class="keyword">;<br /> }<br /> if (</span><span class="default">$teller </span><span class="keyword">== </span><span class="default">0</span><span class="keyword">) {<br /> </span><span class="default">$mydir </span><span class="keyword">= </span><span class="string">"No files!"</span><span class="keyword">;<br /> } else {<br /> return </span><span class="default">$mydir</span><span class="keyword">;<br /> }<br />}<br /><br />echo </span><span class="default">select_files</span><span class="keyword">(</span><span class="string">"C:/winnt/"</span><span class="keyword">, </span><span class="string">""</span><span class="keyword">, </span><span class="string">""</span><span class="keyword">, </span><span class="string">""</span><span class="keyword">, </span><span class="string">"60"</span><span class="keyword">);<br /></span><span class="default">?&gt;</span> <br /><br />Now i can see hist files in his windows dir. Is this a leak? and is it fixable? I'll report this as bug too!<br /><br />Tim2005</span></code></div> </div> </div> <div class="note" id="64480"> <div class="votes"> <div id="Vu64480"> <a href="/manual/vote-note.php?id=64480&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd64480"> <a href="/manual/vote-note.php?id=64480&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V64480" title="50% like this..."> 0 </div> </div> <a href="#64480" class="name"> <strong class="user"><em>tozeiler</em></strong></a><a class="genanchor" href="#64480"> &para;</a><div class="date" title="2006-04-15 01:34"><strong>18 years ago</strong></div> <div class="text" id="Hcom64480"> <div class="phpcode"><code><span class="html">"opendir" said:<br />------------------------------------------------------------------<br /><br />23-Jan-2006 08:04<br />I Just wanted a directory list and a clickable link to download the files <br /><br />&lt;snip&gt;<br />------<br />&lt;?<br />echo ("&lt;h1&gt;Directory Overzicht:&lt;/h1&gt;");<br /><br />function getFiles($path) {<br /><br />&lt;snip complicated function contents&gt;<br /><br />------------------------------------------------------------------<br />Here's a more straightforward way to linkify $path/files:<br /><br /><span class="default">&lt;?php<br /><br /></span><span class="keyword">echo </span><span class="string">"&lt;h1&gt;Directory Overzicht:&lt;/h1&gt;"</span><span class="keyword">;<br /><br /></span><span class="default">$dh </span><span class="keyword">= </span><span class="default">opendir</span><span class="keyword">(</span><span class="default">$path</span><span class="keyword">);<br />while ((</span><span class="default">$file </span><span class="keyword">= </span><span class="default">readdir</span><span class="keyword">(</span><span class="default">$dh</span><span class="keyword">)) !== </span><span class="default">false</span><span class="keyword">) {<br /> echo </span><span class="string">"&lt;a href='</span><span class="default">$path</span><span class="string">/</span><span class="default">$file</span><span class="string">'&gt;</span><span class="default">$file</span><span class="string">&lt;/a&gt;&lt;br /&gt;"</span><span class="keyword">;<br />}<br /></span><span class="default">closedir</span><span class="keyword">(</span><span class="default">$dh</span><span class="keyword">);<br /><br /></span><span class="default">?&gt;</span></span></code></div> </div> </div> <div class="note" id="57504"> <div class="votes"> <div id="Vu57504"> <a href="/manual/vote-note.php?id=57504&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd57504"> <a href="/manual/vote-note.php?id=57504&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V57504" title="50% like this..."> 0 </div> </div> <a href="#57504" class="name"><strong class="user"><em>Anonymous</em></strong></a><a class="genanchor" href="#57504"> &para;</a><div class="date" title="2005-10-05 09:40"><strong>19 years ago</strong></div> <div class="text" id="Hcom57504"> <div class="phpcode"><code><span class="html">This function sorts files by name as strings, but without regard to case. It also does some handy string formatting of the file size information.<br /><br />&lt;?<br />function getFiles($path) {<br /> //Function takes a path, and returns a numerically indexed array of associative arrays containing file information,<br /> //sorted by the file name (case insensitive). If two files are identical when compared without case, they will sort<br /> //relative to each other in the order presented by readdir()<br /> $files = array();<br /> $fileNames = array();<br /> $i = 0;<br /> <br /> if (is_dir($path)) {<br /> if ($dh = opendir($path)) {<br /> while (($file = readdir($dh)) !== false) {<br /> if ($file == "." || $file == "..") continue;<br /> $fullpath = $path . "/" . $file;<br /> $fkey = strtolower($file);<br /> while (array_key_exists($fkey,$fileNames)) $fkey .= " ";<br /> $a = stat($fullpath);<br /> $files[$fkey]['size'] = $a['size'];<br /> if ($a['size'] == 0) $files[$fkey]['sizetext'] = "-";<br /> else if ($a['size'] &gt; 1024) $files[$fkey]['sizetext'] = (ceil($a['size']/1024*100)/100) . " K";<br /> else if ($a['size'] &gt; 1024*1024) $files[$fkey]['sizetext'] = (ceil($a['size']/(1024*1024)*100)/100) . " Mb";<br /> else $files[$fkey]['sizetext'] = $a['size'] . " bytes";<br /> $files[$fkey]['name'] = $file;<br /> $files[$fkey]['type'] = filetype($fullpath);<br /> $fileNames[$i++] = $fkey;<br /> }<br /> closedir($dh);<br /> } else die ("Cannot open directory: $path");<br /> } else die ("Path is not a directory: $path");<br /> sort($fileNames,SORT_STRING);<br /> $sortedFiles = array();<br /> $i = 0;<br /> foreach($fileNames as $f) $sortedFiles[$i++] = $files[$f];<br /> <br /> return $sortedFiles;<br />}<br /><br />$files = getFiles("C:");<br />foreach ($files as $file) print "$file[name]&lt;br&gt;\n";<br />?&gt;</span></code></div> </div> </div> <div class="note" id="51395"> <div class="votes"> <div id="Vu51395"> <a href="/manual/vote-note.php?id=51395&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd51395"> <a href="/manual/vote-note.php?id=51395&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V51395" title="50% like this..."> 0 </div> </div> <a href="#51395" class="name"> <strong class="user"><em>iamnotanerd</em></strong></a><a class="genanchor" href="#51395"> &para;</a><div class="date" title="2005-03-29 09:38"><strong>19 years ago</strong></div> <div class="text" id="Hcom51395"> <div class="phpcode"><code><span class="html">Here is a snippet of the code that I created to search for a file..recursively open the directories and search for a match.. <br /> <br /><span class="default">&lt;?php <br /></span><span class="keyword">function </span><span class="default">search</span><span class="keyword">(</span><span class="default">$target</span><span class="keyword">, </span><span class="default">$directory</span><span class="keyword">){ <br /> <br /> if(</span><span class="default">is_dir</span><span class="keyword">(</span><span class="default">$directory</span><span class="keyword">)){ <br /> </span><span class="default">$direc </span><span class="keyword">= </span><span class="default">opendir</span><span class="keyword">(</span><span class="default">$directory</span><span class="keyword">); <br /> while(</span><span class="default">false </span><span class="keyword">!== (</span><span class="default">$file </span><span class="keyword">= </span><span class="default">readdir</span><span class="keyword">(</span><span class="default">$direc</span><span class="keyword">))){ <br /> <br /> if(</span><span class="default">$file </span><span class="keyword">!=</span><span class="string">"." </span><span class="keyword">&amp;&amp; </span><span class="default">$file </span><span class="keyword">!= </span><span class="string">".."</span><span class="keyword">){ <br /> <br /> if(</span><span class="default">is_file</span><span class="keyword">(</span><span class="default">$directory</span><span class="keyword">.</span><span class="string">"/"</span><span class="keyword">.</span><span class="default">$file</span><span class="keyword">)){ <br /> if(</span><span class="default">preg_match</span><span class="keyword">(</span><span class="string">"/</span><span class="default">$target</span><span class="string">/i"</span><span class="keyword">, </span><span class="default">$file</span><span class="keyword">)){ <br /> echo </span><span class="string">"&lt;a href=\"</span><span class="default">$directory</span><span class="string">/</span><span class="default">$file</span><span class="string">\"&gt;</span><span class="default">$file</span><span class="string">&lt;/a&gt;&lt;br&gt;"</span><span class="keyword">; <br /> } <br /> }else if(</span><span class="default">is_dir</span><span class="keyword">(</span><span class="default">$directory</span><span class="keyword">.</span><span class="string">"/"</span><span class="keyword">.</span><span class="default">$file</span><span class="keyword">)){ <br /> </span><span class="default">search</span><span class="keyword">(</span><span class="default">$target</span><span class="keyword">,</span><span class="default">$directory</span><span class="keyword">.</span><span class="string">"/"</span><span class="keyword">.</span><span class="default">$file</span><span class="keyword">); <br /> <br /> } <br /> <br /> } <br /> } <br /> </span><span class="default">closedir</span><span class="keyword">(</span><span class="default">$direc</span><span class="keyword">); <br /> } <br /> <br /> return ; <br />} <br /></span><span class="default">?&gt;</span></span></code></div> </div> </div> <div class="note" id="35198"> <div class="votes"> <div id="Vu35198"> <a href="/manual/vote-note.php?id=35198&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd35198"> <a href="/manual/vote-note.php?id=35198&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V35198" title="50% like this..."> 0 </div> </div> <a href="#35198" class="name"> <strong class="user"><em>info at 4design dot nu</em></strong></a><a class="genanchor" href="#35198"> &para;</a><div class="date" title="2003-08-22 06:31"><strong>21 years ago</strong></div> <div class="text" id="Hcom35198"> <div class="phpcode"><code><span class="html">In addition to notes above about IIS &amp; PHP reading network shares, here's one solution that works better for me.<br /><br />in the management console I created a folder where my "read_dir" script runs. click on properties then select the security tab. here you can set the anonymous account to the standard IUSR_$computername% , BUT.. in this case I chose another account that I set up for reading my shares. (make sure login name and password match the credantials you set on the remote machin ;-))<br /><br />I use this to read a dir and it's contents into a searchable database. and it works like a charm...</span></code></div> </div> </div> <div class="note" id="32782"> <div class="votes"> <div id="Vu32782"> <a href="/manual/vote-note.php?id=32782&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd32782"> <a href="/manual/vote-note.php?id=32782&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V32782" title="50% like this..."> 0 </div> </div> <a href="#32782" class="name"> <strong class="user"><em>Matt Grimm</em></strong></a><a class="genanchor" href="#32782"> &para;</a><div class="date" title="2003-06-06 01:25"><strong>21 years ago</strong></div> <div class="text" id="Hcom32782"> <div class="phpcode"><code><span class="html">Thought I could help clarify something with accessing network shares on a Windows network (2000 in this case), running PHP 4.3.2 under Apache 2.0.44.<br /><br />However you are logged into the Windows box, your Apache service must be running under an account which has access to the share. The easiest (and probably least safe) way for me was to change the user for the Apache service to the computer administrator (do this in the service properties, under the "Log On" tab). After restarting Apache, I could access mapped drives by their assigned drive letter ("z:\\") or regular shares by their UNC path ("\\\\shareDrive\\shareDir").</span></code></div> </div> </div> <div class="note" id="121616"> <div class="votes"> <div id="Vu121616"> <a href="/manual/vote-note.php?id=121616&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd121616"> <a href="/manual/vote-note.php?id=121616&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V121616" title="0% like this..."> -2 </div> </div> <a href="#121616" class="name"> <strong class="user"><em>hxss at ya dot ru</em></strong></a><a class="genanchor" href="#121616"> &para;</a><div class="date" title="2017-09-06 11:02"><strong>7 years ago</strong></div> <div class="text" id="Hcom121616"> <div class="phpcode"><code><span class="html">The TRUE recursive map function for working with dirs &amp; files.<br />You can create, read(find), update(or move) or delete files/dirs/tree by your callable function.<br />You can use flags for select what content you need.<br /><br /><span class="default">&lt;?php<br />var_dump</span><span class="keyword">(</span><span class="default">dirmap</span><span class="keyword">(</span><span class="default">$dst</span><span class="keyword">, function(</span><span class="default">$v</span><span class="keyword">) {<br /> </span><span class="default">pre</span><span class="keyword">(</span><span class="default">$v</span><span class="keyword">);<br /> return </span><span class="default">true</span><span class="keyword">;<br />}, </span><span class="default">1</span><span class="keyword">|</span><span class="default">2</span><span class="keyword">|</span><span class="default">4</span><span class="keyword">|</span><span class="default">8</span><span class="keyword">));<br /><br /></span><span class="comment">/**<br /> * Applies the callback to the entries of the given dir path<br /> * In accordance with the received flags<br /> * @param string $path path of the working directory<br /> * @param Callable $action Callable function that would be<br /> * executed for every entry in path<br /> * @param integer $flags can be the following flag:<br /> * 1: apply Callable function for files<br /> * 2: apply Callable function for directories<br /> * 4: apply Callable function for $path<br /> * 8: work recursively<br /> * @return bool bitwise AND of all (bool)$action calls results<br /> */<br /></span><span class="keyword">function </span><span class="default">dirmap</span><span class="keyword">(</span><span class="default">string $path</span><span class="keyword">, Callable </span><span class="default">$action</span><span class="keyword">, </span><span class="default">int $flags </span><span class="keyword">= </span><span class="default">15</span><span class="keyword">) {<br /> </span><span class="default">$flF </span><span class="keyword">= </span><span class="default">boolval</span><span class="keyword">(</span><span class="default">$flags </span><span class="keyword">&amp; </span><span class="default">1</span><span class="keyword">);<br /> </span><span class="default">$flD </span><span class="keyword">= </span><span class="default">boolval</span><span class="keyword">(</span><span class="default">$flags </span><span class="keyword">&amp; </span><span class="default">2</span><span class="keyword">);<br /> </span><span class="default">$flP </span><span class="keyword">= </span><span class="default">boolval</span><span class="keyword">(</span><span class="default">$flags </span><span class="keyword">&amp; </span><span class="default">4</span><span class="keyword">);<br /> </span><span class="default">$flR </span><span class="keyword">= </span><span class="default">boolval</span><span class="keyword">(</span><span class="default">$flags </span><span class="keyword">&amp; </span><span class="default">8</span><span class="keyword">);<br /> </span><span class="default">$result </span><span class="keyword">= </span><span class="default">1</span><span class="keyword">;<br /><br /> if (</span><span class="default">is_dir</span><span class="keyword">(</span><span class="default">$path</span><span class="keyword">)) {<br /><br /> </span><span class="default">$dir </span><span class="keyword">= </span><span class="default">opendir</span><span class="keyword">(</span><span class="default">$path</span><span class="keyword">);<br /> while (</span><span class="default">$entry </span><span class="keyword">= </span><span class="default">readdir</span><span class="keyword">(</span><span class="default">$dir</span><span class="keyword">))<br /> if (!</span><span class="default">in_array</span><span class="keyword">(</span><span class="default">$entry</span><span class="keyword">, [</span><span class="string">'.'</span><span class="keyword">, </span><span class="string">'..'</span><span class="keyword">])) {<br /> </span><span class="default">$fullEntry </span><span class="keyword">= </span><span class="string">"</span><span class="keyword">{</span><span class="default">$path</span><span class="keyword">}</span><span class="string">/</span><span class="keyword">{</span><span class="default">$entry</span><span class="keyword">}</span><span class="string">"</span><span class="keyword">;<br /><br /> if (</span><span class="default">$flR</span><span class="keyword">)<br /> </span><span class="default">$result </span><span class="keyword">&amp;= </span><span class="default">dirmap</span><span class="keyword">(</span><span class="default">$fullEntry</span><span class="keyword">, </span><span class="default">$action</span><span class="keyword">, </span><span class="default">$flags </span><span class="keyword">&amp; </span><span class="default">11</span><span class="keyword">);<br /><br /> if (</span><span class="default">$flF </span><span class="keyword">&amp;&amp; </span><span class="default">is_file</span><span class="keyword">(</span><span class="default">$fullEntry</span><span class="keyword">) || </span><span class="default">$flD </span><span class="keyword">&amp;&amp; </span><span class="default">is_dir</span><span class="keyword">(</span><span class="default">$fullEntry</span><span class="keyword">))<br /> </span><span class="default">$result </span><span class="keyword">&amp;= (bool)</span><span class="default">call_user_func</span><span class="keyword">(</span><span class="default">$action</span><span class="keyword">, </span><span class="default">$fullEntry</span><span class="keyword">);<br /> }<br /><br /> if (</span><span class="default">$flP</span><span class="keyword">)<br /> </span><span class="default">$result </span><span class="keyword">&amp;= (bool)</span><span class="default">call_user_func</span><span class="keyword">(</span><span class="default">$action</span><span class="keyword">, </span><span class="default">$fullEntry</span><span class="keyword">);<br /><br /> return (bool)</span><span class="default">$result</span><span class="keyword">;<br /> } else<br /> return </span><span class="default">is_file</span><span class="keyword">(</span><span class="default">$path</span><span class="keyword">);<br />}<br /></span><span class="default">?&gt;</span></span></code></div> </div> </div> <div class="note" id="72492"> <div class="votes"> <div id="Vu72492"> <a href="/manual/vote-note.php?id=72492&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd72492"> <a href="/manual/vote-note.php?id=72492&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V72492" title="0% like this..."> -2 </div> </div> <a href="#72492" class="name"> <strong class="user"><em>frogstarr78 at yahoo dot com</em></strong></a><a class="genanchor" href="#72492"> &para;</a><div class="date" title="2007-01-21 12:30"><strong>18 years ago</strong></div> <div class="text" id="Hcom72492"> <div class="phpcode"><code><span class="html">Here's a function that will recrusively turn a directory into a hash of directory hashes and file arrays, automatically ignoring "dot" files. <br /><br /><span class="default">&lt;?php<br /></span><span class="keyword">function </span><span class="default">hashify_directory</span><span class="keyword">(</span><span class="default">$topdir</span><span class="keyword">, &amp;</span><span class="default">$list</span><span class="keyword">, </span><span class="default">$ignoredDirectories</span><span class="keyword">=array()) {<br /> if (</span><span class="default">is_dir</span><span class="keyword">(</span><span class="default">$topdir</span><span class="keyword">)) {<br /> if (</span><span class="default">$dh </span><span class="keyword">= </span><span class="default">opendir</span><span class="keyword">(</span><span class="default">$topdir</span><span class="keyword">)) {<br /> while ((</span><span class="default">$file </span><span class="keyword">= </span><span class="default">readdir</span><span class="keyword">(</span><span class="default">$dh</span><span class="keyword">)) !== </span><span class="default">false</span><span class="keyword">) {<br /> if (!(</span><span class="default">array_search</span><span class="keyword">(</span><span class="default">$file</span><span class="keyword">,</span><span class="default">$ignoredDirectories</span><span class="keyword">) &gt; -</span><span class="default">1</span><span class="keyword">) &amp;&amp; </span><span class="default">preg_match</span><span class="keyword">(</span><span class="string">'/^\./'</span><span class="keyword">, </span><span class="default">$file</span><span class="keyword">) == </span><span class="default">0</span><span class="keyword">) {<br /> if (</span><span class="default">is_dir</span><span class="keyword">(</span><span class="string">"</span><span class="default">$topdir$file</span><span class="string">"</span><span class="keyword">)) {<br /> if(!isset(</span><span class="default">$list</span><span class="keyword">[</span><span class="default">$file</span><span class="keyword">])) {<br /> </span><span class="default">$list</span><span class="keyword">[</span><span class="default">$file</span><span class="keyword">] = array();<br /> }<br /> </span><span class="default">ksort</span><span class="keyword">(</span><span class="default">$list</span><span class="keyword">);<br /> </span><span class="default">hashify_directory</span><span class="keyword">(</span><span class="string">"</span><span class="default">$topdir$file</span><span class="string">/"</span><span class="keyword">, </span><span class="default">$list</span><span class="keyword">[</span><span class="default">$file</span><span class="keyword">]);<br /> } else {<br /> </span><span class="default">array_push</span><span class="keyword">(</span><span class="default">$list</span><span class="keyword">, </span><span class="default">$file</span><span class="keyword">);<br /> }<br /> }<br /> }<br /> </span><span class="default">closedir</span><span class="keyword">(</span><span class="default">$dh</span><span class="keyword">);<br /> }<br /> }<br />}<br /></span><span class="default">?&gt;<br /></span><br />e.g.<br /><span class="default">&lt;?php<br />$public_html</span><span class="keyword">[</span><span class="string">"StudentFiles"</span><span class="keyword">] = array();<br /></span><span class="default">hashify_directory</span><span class="keyword">(</span><span class="string">"StudentFiles/"</span><span class="keyword">, </span><span class="default">$public_html</span><span class="keyword">[</span><span class="string">"StudentFiles"</span><span class="keyword">]);<br /></span><span class="default">?&gt;<br /></span>on the directory structure: <br />./StudentFiles/tutorial_01/case1/file1.html<br />./StudentFiles/tutorial_01/case1/file2.html<br />./StudentFiles/tutorial_02/case1/file1.html<br />./StudentFiles/tutorial_02/case2/file2.html<br />./StudentFiles/tutorial_03/case1/file2.html<br />etc...<br />becomes:<br /><span class="default">&lt;?php<br />print_r</span><span class="keyword">(</span><span class="default">$public_html</span><span class="keyword">); <br /></span><span class="comment">/*<br />outputs:<br />array(<br /> "StudentFiles" =&gt; array (<br /> "tutorial_01" =&gt; array (<br /> "case1" =&gt; array( "file1.html", "file2.html")<br /> ),<br /> "tutorial_02" =&gt; array (<br /> "case1" =&gt; array( "file1.html"),<br /> "case2" =&gt; array( "file2.html")<br /> ),<br /> "tutorial_03" =&gt; array (<br /> "case1" =&gt; array( "file2.html")<br /> )<br /> )<br />)<br />*/<br /></span><span class="default">?&gt;<br /></span>I'm using it to create a tree view of a directory.</span></code></div> </div> </div> <div class="note" id="71742"> <div class="votes"> <div id="Vu71742"> <a href="/manual/vote-note.php?id=71742&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd71742"> <a href="/manual/vote-note.php?id=71742&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V71742" title="0% like this..."> -2 </div> </div> <a href="#71742" class="name"> <strong class="user"><em>phpguy at mailstop dot yogelements dot omitme dot com</em></strong></a><a class="genanchor" href="#71742"> &para;</a><div class="date" title="2006-12-13 01:40"><strong>18 years ago</strong></div> <div class="text" id="Hcom71742"> <div class="phpcode"><code><span class="html">An issue that I ran into is that opendir() could care less if you've got server authentication set on sub directories and so any such authentication is bypassed completely when accesses in this way. I did solve it for my application of a pretty file manager, by redirecting to all sub directories thusly:<br />$fdir = "./subdirectory_I_want_to_visit/";<br />if ($fdir != './') { //basically where we are or the parent<br /> //redirect the browser to force authentication check on any subdirectories<br /> header("Location: <a href="http://my.domain.com" rel="nofollow" target="_blank">http://my.domain.com</a>".dirname($_SERVER["PHP_SELF"]).substr($fdir,2));<br /> exit;<br />} else {<br /> $dir = opendir($fdir);<br />}</span></code></div> </div> </div> <div class="note" id="90789"> <div class="votes"> <div id="Vu90789"> <a href="/manual/vote-note.php?id=90789&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd90789"> <a href="/manual/vote-note.php?id=90789&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V90789" title="46% like this..."> -1 </div> </div> <a href="#90789" class="name"> <strong class="user"><em>Madog Llwyd</em></strong></a><a class="genanchor" href="#90789"> &para;</a><div class="date" title="2009-05-09 05:22"><strong>15 years ago</strong></div> <div class="text" id="Hcom90789"> <div class="phpcode"><code><span class="html">A simple piece to open a directory and display any files with a given extension. Great for things like newsletters, score sheets or the like where you just want to make it easy on the user - they just dump in the file with the correct extension and it's done. A link is given to the file which opens up in a new window. <br /> <br /><span class="default">&lt;?php <br /> $current_dir </span><span class="keyword">= </span><span class="string">"</span><span class="default">$DOCUMENT_ROOT</span><span class="string">"</span><span class="keyword">.</span><span class="string">"dirname/"</span><span class="keyword">; </span><span class="comment">//Put in second part, the directory - without a leading slash but with a trailing slash! <br /> </span><span class="default">$dir </span><span class="keyword">= </span><span class="default">opendir</span><span class="keyword">(</span><span class="default">$current_dir</span><span class="keyword">); </span><span class="comment">// Open the sucker <br /> <br /> </span><span class="keyword">echo (</span><span class="string">"&lt;p&gt;&lt;h1&gt;List of available files:&lt;/h1&gt;&lt;/p&gt;&lt;hr&gt;&lt;br /&gt;"</span><span class="keyword">); <br /> while (</span><span class="default">$file </span><span class="keyword">= </span><span class="default">readdir</span><span class="keyword">(</span><span class="default">$dir</span><span class="keyword">)) </span><span class="comment">// while loop <br /> </span><span class="keyword">{ <br /> </span><span class="default">$parts </span><span class="keyword">= </span><span class="default">explode</span><span class="keyword">(</span><span class="string">"."</span><span class="keyword">, </span><span class="default">$file</span><span class="keyword">); </span><span class="comment">// pull apart the name and dissect by period <br /> </span><span class="keyword">if (</span><span class="default">is_array</span><span class="keyword">(</span><span class="default">$parts</span><span class="keyword">) &amp;&amp; </span><span class="default">count</span><span class="keyword">(</span><span class="default">$parts</span><span class="keyword">) &gt; </span><span class="default">1</span><span class="keyword">) { </span><span class="comment">// does the dissected array have more than one part <br /> </span><span class="default">$extension </span><span class="keyword">= </span><span class="default">end</span><span class="keyword">(</span><span class="default">$parts</span><span class="keyword">); </span><span class="comment">// set to we can see last file extension <br /> </span><span class="keyword">if (</span><span class="default">$extension </span><span class="keyword">== </span><span class="string">"ext" </span><span class="keyword">OR </span><span class="default">$extension </span><span class="keyword">== </span><span class="string">"EXT"</span><span class="keyword">) </span><span class="comment">// is extension ext or EXT ? <br /> </span><span class="keyword">echo </span><span class="string">"&lt;a href=\"</span><span class="default">$file</span><span class="string">\" target=\"_blank\"&gt; </span><span class="default">$file</span><span class="string"> &lt;/a&gt;&lt;br /&gt;"</span><span class="keyword">; </span><span class="comment">// If so, echo it out else do nothing cos it's not what we want <br /> </span><span class="keyword">} <br /> } <br /> echo </span><span class="string">"&lt;hr&gt;&lt;br /&gt;"</span><span class="keyword">; <br /> </span><span class="default">closedir</span><span class="keyword">(</span><span class="default">$dir</span><span class="keyword">); </span><span class="comment">// Close the directory after we are done <br /></span><span class="default">?&gt;</span></span></code></div> </div> </div> <div class="note" id="83225"> <div class="votes"> <div id="Vu83225"> <a href="/manual/vote-note.php?id=83225&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd83225"> <a href="/manual/vote-note.php?id=83225&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V83225" title="44% like this..."> -1 </div> </div> <a href="#83225" class="name"> <strong class="user"><em>kdouglas at satarah dot com</em></strong></a><a class="genanchor" href="#83225"> &para;</a><div class="date" title="2008-05-15 04:22"><strong>16 years ago</strong></div> <div class="text" id="Hcom83225"> <div class="phpcode"><code><span class="html">Breadth-first-search (BFS) for a file or directory (vs. Depth-first-search)<br /><a href="http://en.wikipedia.org/wiki/Breadth-first_search" rel="nofollow" target="_blank">http://en.wikipedia.org/wiki/Breadth-first_search</a><br /><br /><span class="default">&lt;?php<br /><br /></span><span class="comment">// Breadth-First Recursive Directory Search, for a File or Directory<br />// with optional black-list paths and optional callback function.<br />//<br />// $root -- is the relative path to the start-of-search directory<br />// $file -- is the qualified file name: 'name.ext' EX: 'data.xml'<br />// (or) $file -- is the target directory name EX: 'xml_files'<br />// $callback -- is an optional function name and will be passed all<br />// matching paths EX: 'my_func', instead of exiting on first match<br />// $omit -- is an optional array of exclude paths -- relative to root<br />// To use $omit but not $callback, pass NULL as the $callback argument<br />//<br />// TESTING VALUES FOLLOW ...<br /><br /></span><span class="keyword">function </span><span class="default">my_func </span><span class="keyword">( </span><span class="default">$path </span><span class="keyword">) {<br /> print </span><span class="string">"&lt;strong&gt;</span><span class="default">$path</span><span class="string">&lt;/strong&gt;&lt;br&gt;\n"</span><span class="keyword">;<br />}<br /><br /></span><span class="default">$root </span><span class="keyword">= </span><span class="string">'../public_html'</span><span class="keyword">;<br /></span><span class="default">$file </span><span class="keyword">= </span><span class="string">'data.xml'</span><span class="keyword">;<br /></span><span class="default">$callback </span><span class="keyword">= </span><span class="string">'my_func'</span><span class="keyword">;<br /></span><span class="default">$omit </span><span class="keyword">= array( </span><span class="string">'include/img'</span><span class="keyword">, </span><span class="string">'include/css'</span><span class="keyword">, </span><span class="string">'scripts' </span><span class="keyword">);<br /><br /></span><span class="comment">//print breadth_first_file_search ( $root, $file );<br />//print breadth_first_file_search ( $root, $file, $callback );<br />//print breadth_first_file_search ( $root, $file, NULL, $omit );<br /></span><span class="keyword">print </span><span class="default">breadth_first_file_search </span><span class="keyword">( </span><span class="default">$root</span><span class="keyword">, </span><span class="default">$file</span><span class="keyword">, </span><span class="default">$callback</span><span class="keyword">, </span><span class="default">$omit </span><span class="keyword">);<br /><br />function </span><span class="default">breadth_first_file_search </span><span class="keyword">( </span><span class="default">$root</span><span class="keyword">, </span><span class="default">$file</span><span class="keyword">, </span><span class="default">$callback </span><span class="keyword">= </span><span class="default">NULL</span><span class="keyword">, </span><span class="default">$omit </span><span class="keyword">= array() ) {<br /> </span><span class="default">$queue </span><span class="keyword">= array( </span><span class="default">rtrim</span><span class="keyword">( </span><span class="default">$root</span><span class="keyword">, </span><span class="string">'/' </span><span class="keyword">).</span><span class="string">'/' </span><span class="keyword">); </span><span class="comment">// normalize all paths<br /> </span><span class="keyword">foreach ( </span><span class="default">$omit </span><span class="keyword">as &amp;</span><span class="default">$path </span><span class="keyword">) { </span><span class="comment">// &amp;$path Req. PHP ver 5.x and later<br /> </span><span class="default">$path </span><span class="keyword">= </span><span class="default">$root</span><span class="keyword">.</span><span class="default">trim</span><span class="keyword">( </span><span class="default">$path</span><span class="keyword">, </span><span class="string">'/' </span><span class="keyword">).</span><span class="string">'/'</span><span class="keyword">;<br /> }<br /> while ( </span><span class="default">$base </span><span class="keyword">= </span><span class="default">array_shift</span><span class="keyword">( </span><span class="default">$queue </span><span class="keyword">) ) {<br /> </span><span class="default">$file_path </span><span class="keyword">= </span><span class="default">$base</span><span class="keyword">.</span><span class="default">$file</span><span class="keyword">;<br /> if ( </span><span class="default">file_exists</span><span class="keyword">( </span><span class="default">$file_path </span><span class="keyword">) ) { </span><span class="comment">// file found<br /> </span><span class="keyword">if ( </span><span class="default">is_callable</span><span class="keyword">( </span><span class="default">$callback </span><span class="keyword">) ) {<br /> </span><span class="default">$callback</span><span class="keyword">( </span><span class="default">$file_path </span><span class="keyword">); </span><span class="comment">// callback =&gt; CONTINUE<br /> </span><span class="keyword">} else {<br /> return </span><span class="default">$file_path</span><span class="keyword">; </span><span class="comment">// return file-path =&gt; EXIT<br /> </span><span class="keyword">}<br /> }<br /> if ( ( </span><span class="default">$handle </span><span class="keyword">= </span><span class="default">opendir</span><span class="keyword">( </span><span class="default">$base </span><span class="keyword">) ) ) {<br /> while ( ( </span><span class="default">$child </span><span class="keyword">= </span><span class="default">readdir</span><span class="keyword">( </span><span class="default">$handle </span><span class="keyword">) ) !== </span><span class="default">FALSE </span><span class="keyword">) {<br /> if ( </span><span class="default">is_dir</span><span class="keyword">( </span><span class="default">$base</span><span class="keyword">.</span><span class="default">$child </span><span class="keyword">) &amp;&amp; </span><span class="default">$child </span><span class="keyword">!= </span><span class="string">'.' </span><span class="keyword">&amp;&amp; </span><span class="default">$child </span><span class="keyword">!= </span><span class="string">'..' </span><span class="keyword">) {<br /> </span><span class="default">$combined_path </span><span class="keyword">= </span><span class="default">$base</span><span class="keyword">.</span><span class="default">$child</span><span class="keyword">.</span><span class="string">'/'</span><span class="keyword">;<br /> if ( !</span><span class="default">in_array</span><span class="keyword">( </span><span class="default">$combined_path</span><span class="keyword">, </span><span class="default">$omit </span><span class="keyword">) ) {<br /> </span><span class="default">array_push</span><span class="keyword">( </span><span class="default">$queue</span><span class="keyword">, </span><span class="default">$combined_path</span><span class="keyword">);<br /> }<br /> }<br /> }<br /> </span><span class="default">closedir</span><span class="keyword">( </span><span class="default">$handle </span><span class="keyword">);<br /> } </span><span class="comment">// else unable to open directory =&gt; NEXT CHILD<br /> </span><span class="keyword">}<br /> return </span><span class="default">FALSE</span><span class="keyword">; </span><span class="comment">// end of tree, file not found<br /></span><span class="keyword">}<br /><br /></span><span class="default">?&gt;</span></span></code></div> </div> </div> <div class="note" id="61012"> <div class="votes"> <div id="Vu61012"> <a href="/manual/vote-note.php?id=61012&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd61012"> <a href="/manual/vote-note.php?id=61012&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V61012" title="42% like this..."> -1 </div> </div> <a href="#61012" class="name"><strong class="user"><em>Anonymous</em></strong></a><a class="genanchor" href="#61012"> &para;</a><div class="date" title="2006-01-23 07:04"><strong>19 years ago</strong></div> <div class="text" id="Hcom61012"> <div class="phpcode"><code><span class="html">I Just wanted a directory list and a clickable link to download the files because my plesk server does not give me this function. I edited the script a little bit.<br /><br />Many thanks from a script-noob<br /><br />------<br />&lt;?<br />echo ("&lt;h1&gt;Directory Overzicht:&lt;/h1&gt;");<br /><br />function getFiles($path) {<br /> //Function takes a path, and returns a numerically indexed array of associative arrays containing file information,<br /> //sorted by the file name (case insensitive). If two files are identical when compared without case, they will sort<br /> //relative to each other in the order presented by readdir()<br /> $files = array();<br /> $fileNames = array();<br /> $i = 0;<br /> <br /> if (is_dir($path)) {<br /> if ($dh = opendir($path)) {<br /> while (($file = readdir($dh)) !== false) {<br /> if ($file == "." || $file == "..") continue;<br /> $fullpath = $path . "/" . $file;<br /> $fkey = strtolower($file);<br /> while (array_key_exists($fkey,$fileNames)) $fkey .= " ";<br /> $a = stat($fullpath);<br /> $files[$fkey]['size'] = $a['size'];<br /> if ($a['size'] == 0) $files[$fkey]['sizetext'] = "-";<br /> else if ($a['size'] &gt; 1024) $files[$fkey]['sizetext'] = (ceil($a['size']/1024*100)/100) . " K";<br /> else if ($a['size'] &gt; 1024*1024) $files[$fkey]['sizetext'] = (ceil($a['size']/(1024*1024)*100)/100) . " Mb";<br /> else $files[$fkey]['sizetext'] = $a['size'] . " bytes";<br /> $files[$fkey]['name'] = $file;<br /> $files[$fkey]['type'] = filetype($fullpath);<br /> $fileNames[$i++] = $fkey;<br /> }<br /> closedir($dh);<br /> } else die ("Cannot open directory: $path");<br /> } else die ("Path is not a directory: $path");<br /> sort($fileNames,SORT_STRING);<br /> $sortedFiles = array();<br /> $i = 0;<br /> foreach($fileNames as $f) $sortedFiles[$i++] = $files[$f];<br /> <br /> return $sortedFiles;<br />}<br /><br />$files = getFiles("./");<br />foreach ($files as $file) print "&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;&lt;a href=\"$file[name]\"&gt;$file[name]&lt;/a&gt;&lt;/b&gt;&lt;br&gt;\n";<br />?&gt;</span></code></div> </div> </div> <div class="note" id="89517"> <div class="votes"> <div id="Vu89517"> <a href="/manual/vote-note.php?id=89517&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd89517"> <a href="/manual/vote-note.php?id=89517&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V89517" title="40% like this..."> -1 </div> </div> <a href="#89517" class="name"> <strong class="user"><em>Richard Bronosky</em></strong></a><a class="genanchor" href="#89517"> &para;</a><div class="date" title="2009-03-11 09:14"><strong>15 years ago</strong></div> <div class="text" id="Hcom89517"> <div class="phpcode"><code><span class="html">The easiest way to get a dir listing and sort it is to exec() out to ls (eg:'ls -t'). But, that is considered "unsafe". My hosting company finally caught me doing it so here is my fastest solution. (Lucky for me each file is created with a Unix Timestamp at the end of the name and no other numbers in it.)<br /><br /><span class="default">&lt;?php<br /></span><span class="comment">#exec('ls -t ./images/motion_detection/', $files); # They outlawed exec, so now I have to do it by hand.<br /></span><span class="keyword">if (</span><span class="default">$handle </span><span class="keyword">= </span><span class="default">opendir</span><span class="keyword">(</span><span class="string">'./images/motion_detection/'</span><span class="keyword">)) {<br /> </span><span class="default">$files</span><span class="keyword">=array();<br /> while (</span><span class="default">false </span><span class="keyword">!== (</span><span class="default">$file </span><span class="keyword">= </span><span class="default">readdir</span><span class="keyword">(</span><span class="default">$handle</span><span class="keyword">))) {<br /> </span><span class="default">$files</span><span class="keyword">[</span><span class="default">$file</span><span class="keyword">] = </span><span class="default">preg_replace</span><span class="keyword">(</span><span class="string">'/[^0-9]/'</span><span class="keyword">, </span><span class="string">''</span><span class="keyword">, </span><span class="default">$file</span><span class="keyword">); </span><span class="comment"># Timestamps may not be unique, file names are.<br /> </span><span class="keyword">}<br /> </span><span class="default">closedir</span><span class="keyword">(</span><span class="default">$handle</span><span class="keyword">);<br /> </span><span class="default">arsort</span><span class="keyword">(</span><span class="default">$files</span><span class="keyword">);<br /> </span><span class="default">$files</span><span class="keyword">=</span><span class="default">array_keys</span><span class="keyword">(</span><span class="default">$files</span><span class="keyword">);<br />}<br /></span><span class="default">?&gt;<br /></span><br />Before you go copying someone's bloat kitchen sink function/class, consider what you have and what you really need.</span></code></div> </div> </div> <div class="note" id="37558"> <div class="votes"> <div id="Vu37558"> <a href="/manual/vote-note.php?id=37558&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd37558"> <a href="/manual/vote-note.php?id=37558&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V37558" title="40% like this..."> -1 </div> </div> <a href="#37558" class="name"> <strong class="user"><em>micklweiss at gmx dot net</em></strong></a><a class="genanchor" href="#37558"> &para;</a><div class="date" title="2003-11-19 01:12"><strong>21 years ago</strong></div> <div class="text" id="Hcom37558"> <div class="phpcode"><code><span class="html">I ran into a little snag in example 1. opendir() lists files by the last time the file was accessed. I was trying to print the files numerically in a directory. <br /><br />Solution: Use scandir() instead (php5) or store the files in an array and sort it.<br /><br />Hope this helps someone. <br /><br />- Mick<br /><br />(o&gt; Web / software developer <br />( ) UNIX Systems Admin<br />--- ~ www.mickweiss.com ~</span></code></div> </div> </div> <div class="note" id="92448"> <div class="votes"> <div id="Vu92448"> <a href="/manual/vote-note.php?id=92448&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd92448"> <a href="/manual/vote-note.php?id=92448&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V92448" title="40% like this..."> -2 </div> </div> <a href="#92448" class="name"> <strong class="user"><em>Anonymous</em></strong></a><a class="genanchor" href="#92448"> &para;</a><div class="date" title="2009-07-24 08:42"><strong>15 years ago</strong></div> <div class="text" id="Hcom92448"> <div class="phpcode"><code><span class="html">If you want to iterate through a directory, have a look at the SPL DirectoryIterator:<br /><a href="http://php.net/manual/class.directoryiterator.php" rel="nofollow" target="_blank">http://php.net/manual/class.directoryiterator.php</a></span></code></div> </div> </div> <div class="note" id="92679"> <div class="votes"> <div id="Vu92679"> <a href="/manual/vote-note.php?id=92679&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd92679"> <a href="/manual/vote-note.php?id=92679&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V92679" title="41% like this..."> -3 </div> </div> <a href="#92679" class="name"> <strong class="user"><em>olivernassar.com</em></strong></a><a class="genanchor" href="#92679"> &para;</a><div class="date" title="2009-08-03 01:46"><strong>15 years ago</strong></div> <div class="text" id="Hcom92679"> <div class="phpcode"><code><span class="html">Hopefully this helps someone else. Returns a list of all the files in the directory and any subdirectories. <br />Excludes files/folders that are in the $exempt array. Can modifiy it so files aren't passed by reference fairly easily. <br /> <br /><span class="default">&lt;?php <br /> <br /> </span><span class="keyword">function </span><span class="default">getFiles</span><span class="keyword">(</span><span class="default">$directory</span><span class="keyword">,</span><span class="default">$exempt </span><span class="keyword">= array(</span><span class="string">'.'</span><span class="keyword">,</span><span class="string">'..'</span><span class="keyword">,</span><span class="string">'.ds_store'</span><span class="keyword">,</span><span class="string">'.svn'</span><span class="keyword">),&amp;</span><span class="default">$files </span><span class="keyword">= array()) { <br /> </span><span class="default">$handle </span><span class="keyword">= </span><span class="default">opendir</span><span class="keyword">(</span><span class="default">$directory</span><span class="keyword">); <br /> while(</span><span class="default">false </span><span class="keyword">!== (</span><span class="default">$resource </span><span class="keyword">= </span><span class="default">readdir</span><span class="keyword">(</span><span class="default">$handle</span><span class="keyword">))) { <br /> if(!</span><span class="default">in_array</span><span class="keyword">(</span><span class="default">strtolower</span><span class="keyword">(</span><span class="default">$resource</span><span class="keyword">),</span><span class="default">$exempt</span><span class="keyword">)) { <br /> if(</span><span class="default">is_dir</span><span class="keyword">(</span><span class="default">$directory</span><span class="keyword">.</span><span class="default">$resource</span><span class="keyword">.</span><span class="string">'/'</span><span class="keyword">)) <br /> </span><span class="default">array_merge</span><span class="keyword">(</span><span class="default">$files</span><span class="keyword">, <br /> </span><span class="default">self</span><span class="keyword">::</span><span class="default">getFiles</span><span class="keyword">(</span><span class="default">$directory</span><span class="keyword">.</span><span class="default">$resource</span><span class="keyword">.</span><span class="string">'/'</span><span class="keyword">,</span><span class="default">$exempt</span><span class="keyword">,</span><span class="default">$files</span><span class="keyword">)); <br /> else <br /> </span><span class="default">$files</span><span class="keyword">[] = </span><span class="default">$directory</span><span class="keyword">.</span><span class="default">$resource</span><span class="keyword">; <br /> } <br /> } <br /> </span><span class="default">closedir</span><span class="keyword">(</span><span class="default">$handle</span><span class="keyword">); <br /> return </span><span class="default">$files</span><span class="keyword">; <br /> } <br /> <br /></span><span class="default">?&gt;</span></span></code></div> </div> </div> <div class="note" id="75118"> <div class="votes"> <div id="Vu75118"> <a href="/manual/vote-note.php?id=75118&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd75118"> <a href="/manual/vote-note.php?id=75118&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V75118" title="37% like this..."> -2 </div> </div> <a href="#75118" class="name"> <strong class="user"><em>lolwut</em></strong></a><a class="genanchor" href="#75118"> &para;</a><div class="date" title="2007-05-13 06:00"><strong>17 years ago</strong></div> <div class="text" id="Hcom75118"> <div class="phpcode"><code><span class="html">I sometimes find this useful. Hope you will too.<br /><br /><span class="default">&lt;?php<br /></span><span class="comment">//list_by_ext: returns an array containing an alphabetic list of files in the specified directory ($path) with a file extension that matches $extension<br /><br /></span><span class="keyword">function </span><span class="default">list_by_ext</span><span class="keyword">(</span><span class="default">$extension</span><span class="keyword">, </span><span class="default">$path</span><span class="keyword">){<br /> </span><span class="default">$list </span><span class="keyword">= array(); </span><span class="comment">//initialise a variable<br /> </span><span class="default">$dir_handle </span><span class="keyword">= @</span><span class="default">opendir</span><span class="keyword">(</span><span class="default">$path</span><span class="keyword">) or die(</span><span class="string">"Unable to open </span><span class="default">$path</span><span class="string">"</span><span class="keyword">); </span><span class="comment">//attempt to open path<br /> </span><span class="keyword">while(</span><span class="default">$file </span><span class="keyword">= </span><span class="default">readdir</span><span class="keyword">(</span><span class="default">$dir_handle</span><span class="keyword">)){ </span><span class="comment">//loop through all the files in the path<br /> </span><span class="keyword">if(</span><span class="default">$file </span><span class="keyword">== </span><span class="string">"." </span><span class="keyword">|| </span><span class="default">$file </span><span class="keyword">== </span><span class="string">".."</span><span class="keyword">){continue;} </span><span class="comment">//ignore these<br /> </span><span class="default">$filename </span><span class="keyword">= </span><span class="default">explode</span><span class="keyword">(</span><span class="string">"."</span><span class="keyword">,</span><span class="default">$file</span><span class="keyword">); </span><span class="comment">//seperate filename from extenstion<br /> </span><span class="default">$cnt </span><span class="keyword">= </span><span class="default">count</span><span class="keyword">(</span><span class="default">$filename</span><span class="keyword">); </span><span class="default">$cnt</span><span class="keyword">--; </span><span class="default">$ext </span><span class="keyword">= </span><span class="default">$filename</span><span class="keyword">[</span><span class="default">$cnt</span><span class="keyword">]; </span><span class="comment">//as above<br /> </span><span class="keyword">if(</span><span class="default">strtolower</span><span class="keyword">(</span><span class="default">$ext</span><span class="keyword">) == </span><span class="default">strtolower</span><span class="keyword">(</span><span class="default">$extension</span><span class="keyword">)){ </span><span class="comment">//if the extension of the file matches the extension we are looking for...<br /> </span><span class="default">array_push</span><span class="keyword">(</span><span class="default">$list</span><span class="keyword">, </span><span class="default">$file</span><span class="keyword">); </span><span class="comment">//...then stick it onto the end of the list array<br /> </span><span class="keyword">}<br /> }<br /> if(</span><span class="default">$list</span><span class="keyword">[</span><span class="default">0</span><span class="keyword">]){ </span><span class="comment">//...if matches were found...<br /> </span><span class="keyword">return </span><span class="default">$list</span><span class="keyword">; </span><span class="comment">//...return the array<br /> </span><span class="keyword">} else {</span><span class="comment">//otherwise...<br /> </span><span class="keyword">return </span><span class="default">false</span><span class="keyword">;<br /> }<br />}<br /><br /></span><span class="comment">//example usage<br /></span><span class="keyword">if(</span><span class="default">$win32_exectuables </span><span class="keyword">= </span><span class="default">list_by_ext</span><span class="keyword">(</span><span class="string">"exe"</span><span class="keyword">, </span><span class="string">"C:\WINDOWS"</span><span class="keyword">)){<br /> </span><span class="default">var_dump</span><span class="keyword">(</span><span class="default">$win32_exectuables</span><span class="keyword">);<br />} else {<br /> echo </span><span class="string">"No windows executables found :(\n"</span><span class="keyword">;<br />}<br /><br /></span><span class="default">?&gt;</span></span></code></div> </div> </div> <div class="note" id="87454"> <div class="votes"> <div id="Vu87454"> <a href="/manual/vote-note.php?id=87454&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd87454"> <a href="/manual/vote-note.php?id=87454&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V87454" title="40% like this..."> -3 </div> </div> <a href="#87454" class="name"> <strong class="user"><em>php at uchange dot co dot uk</em></strong></a><a class="genanchor" href="#87454"> &para;</a><div class="date" title="2008-12-05 09:36"><strong>16 years ago</strong></div> <div class="text" id="Hcom87454"> <div class="phpcode"><code><span class="html">Having spent an hour or so trying to get a complete list of files from a network share on Windows, I've given up (Apache 2.2 Win32, WinXP, PHP5 -&gt; Windows 2000 R2).<br /><br />Trying to use a mapped drive letter gives me an error and trying to use the UNC path works but is dog slow (it takes a couple of minutes to open and readdir() a directory with a couple of hundred files).<br /><br />Using this code is fast and instant (you'll have to chop up the output yourself but so be it!)<br /><br />$out = `dir $dir /B /S`;<br /><br />If you don't need recursive subdirectories remove the /S from the command - for more details run 'dir /?' on Windows.<br /><br />Hope this helps somebody in a similar fix!</span></code></div> </div> </div> <div class="note" id="60127"> <div class="votes"> <div id="Vu60127"> <a href="/manual/vote-note.php?id=60127&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd60127"> <a href="/manual/vote-note.php?id=60127&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V60127" title="25% like this..."> -2 </div> </div> <a href="#60127" class="name"> <strong class="user"><em>mstabile75 at gmail dot com</em></strong></a><a class="genanchor" href="#60127"> &para;</a><div class="date" title="2005-12-27 07:04"><strong>19 years ago</strong></div> <div class="text" id="Hcom60127"> <div class="phpcode"><code><span class="html"><span class="default">&lt;?php<br /></span><span class="comment">/* The below function will list all folders and files within a directory<br />It is a recursive function that uses a global array. The global array was the easiest <br />way for me to work with an array in a recursive function<br />*This function has no limit on the number of levels down you can search.<br />*The array structure was one that worked for me.<br />ARGUMENTS:<br />$startdir =&gt; specify the directory to start from; format: must end in a "/"<br />$searchSubdirs =&gt; True/false; True if you want to search subdirectories<br />$directoriesonly =&gt; True/false; True if you want to only return directories<br />$maxlevel =&gt; "all" or a number; specifes the number of directories down that you want to search<br />$level =&gt; integer; directory level that the function is currently searching<br />*/<br /></span><span class="keyword">function </span><span class="default">filelist </span><span class="keyword">(</span><span class="default">$startdir</span><span class="keyword">=</span><span class="string">"./"</span><span class="keyword">, </span><span class="default">$searchSubdirs</span><span class="keyword">=</span><span class="default">1</span><span class="keyword">, </span><span class="default">$directoriesonly</span><span class="keyword">=</span><span class="default">0</span><span class="keyword">, </span><span class="default">$maxlevel</span><span class="keyword">=</span><span class="string">"all"</span><span class="keyword">, </span><span class="default">$level</span><span class="keyword">=</span><span class="default">1</span><span class="keyword">) {<br /> </span><span class="comment">//list the directory/file names that you want to ignore<br /> </span><span class="default">$ignoredDirectory</span><span class="keyword">[] = </span><span class="string">"."</span><span class="keyword">; <br /> </span><span class="default">$ignoredDirectory</span><span class="keyword">[] = </span><span class="string">".."</span><span class="keyword">;<br /> </span><span class="default">$ignoredDirectory</span><span class="keyword">[] = </span><span class="string">"_vti_cnf"</span><span class="keyword">;<br /> global </span><span class="default">$directorylist</span><span class="keyword">; </span><span class="comment">//initialize global array<br /> </span><span class="keyword">if (</span><span class="default">is_dir</span><span class="keyword">(</span><span class="default">$startdir</span><span class="keyword">)) { <br /> if (</span><span class="default">$dh </span><span class="keyword">= </span><span class="default">opendir</span><span class="keyword">(</span><span class="default">$startdir</span><span class="keyword">)) { <br /> while ((</span><span class="default">$file </span><span class="keyword">= </span><span class="default">readdir</span><span class="keyword">(</span><span class="default">$dh</span><span class="keyword">)) !== </span><span class="default">false</span><span class="keyword">) {<br /> if (!(</span><span class="default">array_search</span><span class="keyword">(</span><span class="default">$file</span><span class="keyword">,</span><span class="default">$ignoredDirectory</span><span class="keyword">) &gt; -</span><span class="default">1</span><span class="keyword">)) {<br /> if (</span><span class="default">filetype</span><span class="keyword">(</span><span class="default">$startdir </span><span class="keyword">. </span><span class="default">$file</span><span class="keyword">) == </span><span class="string">"dir"</span><span class="keyword">) {<br /> </span><span class="comment">//build your directory array however you choose; <br /> //add other file details that you want.<br /> </span><span class="default">$directorylist</span><span class="keyword">[</span><span class="default">$startdir </span><span class="keyword">. </span><span class="default">$file</span><span class="keyword">][</span><span class="string">'level'</span><span class="keyword">] = </span><span class="default">$level</span><span class="keyword">;<br /> </span><span class="default">$directorylist</span><span class="keyword">[</span><span class="default">$startdir </span><span class="keyword">. </span><span class="default">$file</span><span class="keyword">][</span><span class="string">'dir'</span><span class="keyword">] = </span><span class="default">1</span><span class="keyword">;<br /> </span><span class="default">$directorylist</span><span class="keyword">[</span><span class="default">$startdir </span><span class="keyword">. </span><span class="default">$file</span><span class="keyword">][</span><span class="string">'name'</span><span class="keyword">] = </span><span class="default">$file</span><span class="keyword">;<br /> </span><span class="default">$directorylist</span><span class="keyword">[</span><span class="default">$startdir </span><span class="keyword">. </span><span class="default">$file</span><span class="keyword">][</span><span class="string">'path'</span><span class="keyword">] = </span><span class="default">$startdir</span><span class="keyword">;<br /> if (</span><span class="default">$searchSubdirs</span><span class="keyword">) {<br /> if (((</span><span class="default">$maxlevel</span><span class="keyword">) == </span><span class="string">"all"</span><span class="keyword">) or (</span><span class="default">$maxlevel </span><span class="keyword">&gt; </span><span class="default">$level</span><span class="keyword">)) {<br /> </span><span class="default">filelist</span><span class="keyword">(</span><span class="default">$startdir </span><span class="keyword">. </span><span class="default">$file </span><span class="keyword">. </span><span class="string">"/"</span><span class="keyword">, </span><span class="default">$searchSubdirs</span><span class="keyword">, </span><span class="default">$directoriesonly</span><span class="keyword">, </span><span class="default">$maxlevel</span><span class="keyword">, </span><span class="default">$level </span><span class="keyword">+ </span><span class="default">1</span><span class="keyword">);<br /> }<br /> }<br /> } else {<br /> if (!</span><span class="default">$directoriesonly</span><span class="keyword">) {<br /> </span><span class="comment">//if you want to include files; build your file array <br /> //however you choose; add other file details that you want.<br /> </span><span class="default">$directorylist</span><span class="keyword">[</span><span class="default">$startdir </span><span class="keyword">. </span><span class="default">$file</span><span class="keyword">][</span><span class="string">'level'</span><span class="keyword">] = </span><span class="default">$level</span><span class="keyword">;<br /> </span><span class="default">$directorylist</span><span class="keyword">[</span><span class="default">$startdir </span><span class="keyword">. </span><span class="default">$file</span><span class="keyword">][</span><span class="string">'dir'</span><span class="keyword">] = </span><span class="default">0</span><span class="keyword">;<br /> </span><span class="default">$directorylist</span><span class="keyword">[</span><span class="default">$startdir </span><span class="keyword">. </span><span class="default">$file</span><span class="keyword">][</span><span class="string">'name'</span><span class="keyword">] = </span><span class="default">$file</span><span class="keyword">;<br /> </span><span class="default">$directorylist</span><span class="keyword">[</span><span class="default">$startdir </span><span class="keyword">. </span><span class="default">$file</span><span class="keyword">][</span><span class="string">'path'</span><span class="keyword">] = </span><span class="default">$startdir</span><span class="keyword">;<br /> }}}}<br /> </span><span class="default">closedir</span><span class="keyword">(</span><span class="default">$dh</span><span class="keyword">);<br />}}<br />return(</span><span class="default">$directorylist</span><span class="keyword">);<br />}<br /></span><span class="default">$files </span><span class="keyword">= </span><span class="default">filelist</span><span class="keyword">(</span><span class="string">"./"</span><span class="keyword">,</span><span class="default">1</span><span class="keyword">,</span><span class="default">1</span><span class="keyword">); </span><span class="comment">// call the function<br /></span><span class="keyword">foreach (</span><span class="default">$files </span><span class="keyword">as </span><span class="default">$list</span><span class="keyword">) {</span><span class="comment">//print array<br /> </span><span class="keyword">echo </span><span class="string">"Directory: " </span><span class="keyword">. </span><span class="default">$list</span><span class="keyword">[</span><span class="string">'dir'</span><span class="keyword">] . </span><span class="string">" =&gt; Level: " </span><span class="keyword">. </span><span class="default">$list</span><span class="keyword">[</span><span class="string">'level'</span><span class="keyword">] . </span><span class="string">" =&gt; Name: " </span><span class="keyword">. </span><span class="default">$list</span><span class="keyword">[</span><span class="string">'name'</span><span class="keyword">] . </span><span class="string">" =&gt; Path: " </span><span class="keyword">. </span><span class="default">$list</span><span class="keyword">[</span><span class="string">'path'</span><span class="keyword">] .</span><span class="string">"&lt;br&gt;"</span><span class="keyword">;<br />}</span><span class="default">?&gt;</span></span></code></div> </div> </div> <div class="note" id="75085"> <div class="votes"> <div id="Vu75085"> <a href="/manual/vote-note.php?id=75085&amp;page=function.opendir&amp;vote=up" title="Vote up!" class="usernotes-voteu">up</a> </div> <div id="Vd75085"> <a href="/manual/vote-note.php?id=75085&amp;page=function.opendir&amp;vote=down" title="Vote down!" class="usernotes-voted">down</a> </div> <div class="tally" id="V75085" title="0% like this..."> -5 </div> </div> <a href="#75085" class="name"> <strong class="user"><em>Michael mt1955 (a) gmail.com</em></strong></a><a class="genanchor" href="#75085"> &para;</a><div class="date" title="2007-05-11 07:59"><strong>17 years ago</strong></div> <div class="text" id="Hcom75085"> <div class="phpcode"><code><span class="html"># simple directory walk with callback function<br /><br /><span class="default">&lt;?php<br /></span><span class="keyword">function </span><span class="default">callbackDir</span><span class="keyword">(</span><span class="default">$dir</span><span class="keyword">)<br />{ <br /> </span><span class="comment"># do whatever you want here<br /> </span><span class="keyword">echo </span><span class="string">"</span><span class="default">$dir</span><span class="string">\n"</span><span class="keyword">;<br />}<br /><br />function </span><span class="default">walkDir</span><span class="keyword">(</span><span class="default">$dir</span><span class="keyword">,</span><span class="default">$fx</span><span class="keyword">)<br />{<br /> </span><span class="default">$arStack </span><span class="keyword">= array();<br /> </span><span class="default">$fx</span><span class="keyword">(</span><span class="default">$dir</span><span class="keyword">);<br /> if( (</span><span class="default">$dh</span><span class="keyword">=</span><span class="default">opendir</span><span class="keyword">(</span><span class="default">$dir</span><span class="keyword">)) )<br /> { while( (</span><span class="default">$file</span><span class="keyword">=</span><span class="default">readdir</span><span class="keyword">(</span><span class="default">$dh</span><span class="keyword">))!==</span><span class="default">false </span><span class="keyword">)<br /> { if( </span><span class="default">$file</span><span class="keyword">==</span><span class="string">'.' </span><span class="keyword">|| </span><span class="default">$file</span><span class="keyword">==</span><span class="string">'..' </span><span class="keyword">) continue;<br /> if( </span><span class="default">is_dir</span><span class="keyword">(</span><span class="string">"</span><span class="default">$dir</span><span class="string">/</span><span class="default">$file</span><span class="string">"</span><span class="keyword">) )<br /> { if( !</span><span class="default">in_array</span><span class="keyword">(</span><span class="string">"</span><span class="default">$dir</span><span class="string">/</span><span class="default">$file</span><span class="string">"</span><span class="keyword">,</span><span class="default">$arStack</span><span class="keyword">) ) </span><span class="default">$arStack</span><span class="keyword">[]=</span><span class="string">"</span><span class="default">$dir</span><span class="string">/</span><span class="default">$file</span><span class="string">"</span><span class="keyword">;<br /> }<br /> }<br /> </span><span class="default">closedir</span><span class="keyword">(</span><span class="default">$dh</span><span class="keyword">);<br /> }<br /> if( </span><span class="default">count</span><span class="keyword">(</span><span class="default">$arStack</span><span class="keyword">) )<br /> { foreach( </span><span class="default">$arStack </span><span class="keyword">as </span><span class="default">$subdir </span><span class="keyword">)<br /> { </span><span class="default">walkDir</span><span class="keyword">(</span><span class="default">$subdir</span><span class="keyword">,</span><span class="default">$fx</span><span class="keyword">);<br /> }<br /> }<br />}<br /><br /></span><span class="default">walkDir</span><span class="keyword">(</span><span class="default">$root</span><span class="keyword">,</span><span class="default">callBackDir</span><span class="keyword">);<br /></span><span class="default">?&gt;</span></span></code></div> </div> </div></div> <div class="foot"><a href="/manual/add-note.php?sect=function.opendir&amp;repo=en&amp;redirect=https://www.php.net/manual/en/function.opendir.php">+<small>add a note</small></a></div> </section> </section><!-- layout-content --> <aside class='layout-menu'> <ul class='parent-menu-list'> <li> <a href="ref.dir.php">Directory Functions</a> <ul class='child-menu-list'> <li class=""> <a href="function.chdir.php" title="chdir">chdir</a> </li> <li class=""> <a href="function.chroot.php" title="chroot">chroot</a> </li> <li class=""> <a href="function.closedir.php" title="closedir">closedir</a> </li> <li class=""> <a href="function.dir.php" title="dir">dir</a> </li> <li class=""> <a href="function.getcwd.php" title="getcwd">getcwd</a> </li> <li class="current"> <a href="function.opendir.php" title="opendir">opendir</a> </li> <li class=""> <a href="function.readdir.php" title="readdir">readdir</a> </li> <li class=""> <a href="function.rewinddir.php" title="rewinddir">rewinddir</a> </li> <li class=""> <a href="function.scandir.php" title="scandir">scandir</a> </li> </ul> </li> </ul> </aside> </div><!-- layout --> <footer> <div class="container footer-content"> <div class="row-fluid"> <ul class="footmenu"> <li><a href="/manual/en/copyright.php">Copyright &copy; 2001-2025 The PHP Documentation Group</a></li> <li><a href="/my.php">My PHP.net</a></li> <li><a href="/contact.php">Contact</a></li> <li><a href="/sites.php">Other PHP.net sites</a></li> <li><a href="/privacy.php">Privacy policy</a></li> </ul> </div> </div> </footer> <script src="/cached.php?t=1731172202&amp;f=/js/ext/jquery-3.6.0.min.js"></script> <script src="/cached.php?t=1723177202&amp;f=/js/ext/FuzzySearch.min.js"></script> <script src="/cached.php?t=1707321815&amp;f=/js/ext/mousetrap.min.js"></script> <script src="/cached.php?t=1707321815&amp;f=/js/ext/jquery.scrollTo.min.js"></script> <script src="/cached.php?t=1738028401&amp;f=/js/search.js"></script> <script src="/cached.php?t=1738742401&amp;f=/js/common.js"></script> <script type="module" src="/cached.php?t=1738318202&amp;f=/js/interactive-examples.js"></script> <a id="toTop" href="javascript:;"><span id="toTopHover"></span><img width="40" height="40" alt="To Top" src="/images/to-top@2x.png"></a> <div id="search-modal__backdrop" class="search-modal__backdrop"> <div role="dialog" aria-label="Search modal" id="search-modal" class="search-modal" > <div class="search-modal__header"> <div class="search-modal__form"> <div class="search-modal__input-icon"> <!-- https://feathericons.com search --> <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" width="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" > <circle cx="11" cy="11" r="8"></circle> <line x1="21" y1="21" x2="16.65" y2="16.65"></line> </svg> </div> <input type="search" id="search-modal__input" class="search-modal__input" placeholder="Search docs" aria-label="Search docs" /> </div> <button aria-label="Close" class="search-modal__close"> <!-- https://pictogrammers.com/library/mdi/icon/close/ --> <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" width="24" viewBox="0 0 24 24" > <path d="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z"/> </svg> </button> </div> <div role="listbox" aria-label="Search results" id="search-modal__results" class="search-modal__results" ></div> <div class="search-modal__helper-text"> <div> <kbd>↑</kbd> and <kbd>↓</kbd> to navigate • <kbd>Enter</kbd> to select • <kbd>Esc</kbd> to close </div> <div> Press <kbd>Enter</kbd> without selection to search using Google </div> </div> </div> </div> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10