Current Location: Home> Latest Articles> Practical Example of Directory Traversal Using chdir(), opendir(), and readdir()

Practical Example of Directory Traversal Using chdir(), opendir(), and readdir()

gitbox 2025-09-09
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// This part of the code is unrelated to the article content, just a sample</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"PHP Directory Traversal Example Begins&lt;br&gt;"</span></span><span>;
</span><span><span class="hljs-meta">?&gt;</span></span><span>
<p><hr></p>
<p></span><?php<br>
/**</p>
<ul>
<li>
<p>Practical example of directory traversal using chdir(), opendir(), and readdir()</p>
</li>
<li></li>
<li>
<p>In PHP, working with files and directories is a common task, especially when you need to traverse directories.</p>
</li>
<li>
<p>chdir() changes the current working directory, opendir() opens a directory handle,</p>
</li>
<li>
<p>and readdir() reads files or subdirectories one by one.</p>
</li>
<li></li>
<li>
<p>This article demonstrates how to combine these three functions to traverse a directory through an example.<br>
*/</p>
</li>
</ul>
<p>function traverseDir($path) {<br>
// Try changing the working directory first<br>
if (!chdir($path)) {<br>
echo "Cannot switch to directory: $path<br>";</span><br>
return;<br>
}</p>
</span><span><span class="hljs-variable">$handle</span></span><span> = </span><span><span class="hljs-title function_ invoke__">opendir</span></span><span>(</span><span><span class="hljs-string">&#039;.&#039;</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$handle</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Failed to open directory handle&lt;br&gt;"</span></span><span>;
    </span><span><span class="hljs-keyword">return</span></span><span>;
}

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Current directory: "</span></span> . </span><span><span class="hljs-title function_ invoke__">getcwd</span></span><span>() . </span><span><span class="hljs-string">"&lt;br&gt;"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Directory contents are as follows:&lt;br&gt;"</span></span><span>;

</span><span><span class="hljs-comment">// Traverse files and folders in the directory</span></span><span>
</span><span><span class="hljs-keyword">while</span></span><span> ((</span><span><span class="hljs-variable">$entry</span></span><span> = </span><span><span class="hljs-title function_ invoke__">readdir</span></span><span>(</span><span><span class="hljs-variable">$handle</span></span><span>)) !== </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-comment">// Ignore special directories . and ..</span></span><span>
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$entry</span></span><span> === </span><span><span class="hljs-string">&#039;.&#039;</span></span><span> || </span><span><span class="hljs-variable">$entry</span></span><span> === </span><span><span class="hljs-string">&#039;..&#039;</span></span><span>) {
        </span><span><span class="hljs-keyword">continue</span></span><span>;
    }
    
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_dir</span></span><span>(</span><span><span class="hljs-variable">$entry</span></span><span>)) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"[Directory] <span class="hljs-subst">$entry</span></span>&lt;br&gt;";</span></span><span>
    } </span><span><span class="hljs-keyword">else</span></span><span> {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"[File] <span class="hljs-subst">$entry</span></span>&lt;br&gt;";</span></span><span>
    }
}

</span><span><span class="hljs-title function_ invoke__">closedir</span></span><span>(</span><span><span class="hljs-variable">$handle</span></span><span>);

}

// Example call: assuming there is a directory named test_dir
$testPath = 'test_dir';
traverseDir($testPath);