<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 這部分代碼與文章內容無關,只是做個示例</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"PHP 目錄遍歷示例開始<br>"</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
<hr>
</span><span><span class="hljs-meta"><?php</span></span><span>
<span class="hljs-comment">/**
* 結合 chdir()、opendir() 和 readdir() 實現目錄遍歷的實戰示例
*
* 在 PHP 中,操作文件和目錄是常見需求,尤其是需要遍歷目錄時。
* chdir() 可以改變當前工作目錄,opendir() 用於打開目錄句柄,
* readdir() 用於逐個讀取目錄中的文件或子目錄。
*
* 本文將通過一個示例,演示如何結合这三个函数实现目錄的遍历。
*/</span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">traverseDir</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$path</span></span></span><span>) {
</span><span><span class="hljs-comment">// 先嘗試改變工作目錄</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">chdir</span></span><span>(</span><span><span class="hljs-variable">$path</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"無法切換到目錄:<span class="hljs-subst">$path</span></span></span><span><br>";
</span><span><span class="hljs-keyword">return</span></span><span>;
}
</span><span><span class="hljs-comment">// 打開當前目錄</span></span><span>
</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">"無法打開目錄句柄<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">"當前目錄: "</span></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">"目錄內容如下:<br>"</span></span><span>;
</span><span><span class="hljs-comment">// 遍歷目錄中的文件和文件夾</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">// 忽略特殊目錄 . 和 ..</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">"[目錄] <span class="hljs-subst">$entry</span></span></span><span><br>";
} </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">"[文件] <span class="hljs-subst">$entry</span></span></span><span><br>";
}
}
</span><span><span class="hljs-title function_ invoke__">closedir</span></span><span>(</span><span><span class="hljs-variable">$handle</span></span><span>);
}
</span><span><span class="hljs-comment">// 示例調用:假設有一個 test_dir 目錄</span></span><span>
</span><span><span class="hljs-variable">$testPath</span></span><span> = </span><span><span class="hljs-string">'test_dir'</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">traverseDir</span></span><span>(</span><span><span class="hljs-variable">$testPath</span></span><span>);
</span></span>