<span><span><span class="hljs-meta"><?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<br>"</span></span><span>;
</span><span><span class="hljs-meta">?></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">'.'</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<br>"</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">"<br>"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Directory contents are as follows:<br>"</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">'.'</span></span><span> || </span><span><span class="hljs-variable">$entry</span></span><span> === </span><span><span class="hljs-string">'..'</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><br>";</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><br>";</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);