Heim >Backend-Entwicklung >PHP-Tutorial >Durchlaufen Sie den generierten Verzeichnisbaum

Durchlaufen Sie den generierten Verzeichnisbaum

WBOY
WBOYOriginal
2016-08-08 09:31:441758Durchsuche

1. Vorwort

Als ich meinen letzten Blog schrieb, musste ich eine Verzeichnisbaumstruktur verwenden, um meine Dateistruktur anzuzeigen, also musste ich alle Ordner und Dateien manuell „durchsuchen“. Später dachte ich, dass dies zu fehleranfällig und sehr arbeitsintensiv sei, also dachte ich darüber nach, ein PHP-Skript zu schreiben, um die Dateien und Ordner in einem Verzeichnis zu durchsuchen und einen Verzeichnisbaum zu generieren, damit ich bei Bedarf die Verzeichnisbaumstruktur verwenden kann in der Zukunft. Führen Sie es einfach direkt aus. Die aktuell vom Skript generierte Verzeichnisbaumstruktur kann direkt über den Browser angezeigt oder heruntergeladen werden, um eine TXT-Datei zu generieren.

2. Vorstellung von Ideen

Die Idee, einen Verzeichnisbaum zu generieren, ist sehr einfach. Wenn Sie auf einen Ordner stoßen, wird dieser rekursiv aufgerufen Eine Datei wird zunächst in einem Array gespeichert. Nach dem Durchlaufen des aktuellen Ordners werden die Dateien im Array zusammengefügt. Nach der Generierung erfolgt ein weiterer Schritt zum Anzeigen oder Herunterladen des Verzeichnisbaums . Es gibt noch einige Details im Schreibprozess, die erst in der Entwicklung bekannt gegeben werden. Um das Verständnis und die Erweiterung zu erleichtern, habe ich in einer Klasse dargelegt, was eine Funktion tun kann, um die Idee des Durchlaufens des Ordners klarer zu machen.

3. Code-Implementierung

Jetzt, da ich die Idee habe, fühle ich mich wohl beim Schreiben von Code (das ist auch der Grund, warum großartige Leute uns oft sagen, dass sie beim Schreiben von Code sogar mehr Zeit damit verbringen, darüber nachzudenken, anstatt sofort Code zu schreiben). Schauen wir uns das an der Teilecode:

 3.1 Verzeichnisbaum erstellen

<span> 1</span>     <span>/*</span><span>*
</span><span> 2</span> <span>     * 生成目录树
</span><span> 3</span>      <span>*/</span>
<span> 4</span>     <span>public</span> <span>function</span> createTree(<span>$path</span>, <span>$level</span>=0<span>){
</span><span> 5</span>         <span>$level</span>       = <span>$level</span><span>;
</span><span> 6</span>         <span>$this</span>->tree .= <span>str_repeat</span>(<span>$this</span>->options["padding"], <span>$level</span><span>)
</span><span> 7</span>                         .<span>$this</span>->options["dirpre"<span>]
</span><span> 8</span>                        .<span>$this</span>->_basename(<span>$path</span><span>)
</span><span> 9</span>                        .<span>$this</span>->options["newline"<span>];
</span><span>10</span>         <span>$level</span>++<span>;
</span><span>11</span>         <span>$dirHandle</span>  = <span>opendir</span>(<span>$path</span><span>);
</span><span>12</span>         <span>$files</span>      = <span>array</span><span>();
</span><span>13</span>         <span>while</span> (<span>false</span> !== (<span>$dir</span> = <span>readdir</span>(<span>$dirHandle</span><span>))) {
</span><span>14</span>             <span>if</span>(<span>$dir</span> == "." || <span>$dir</span> == ".."<span>){
</span><span>15</span>                 <span>continue</span><span>;
</span><span>16</span> <span>            }
</span><span>17</span>             <span>if</span>(!<span>$this</span>->options["showHide"] && <span>substr</span>(<span>$dir</span>, 0, 1) == "."<span>){
</span><span>18</span>                 <span>continue</span><span>;
</span><span>19</span> <span>            }
</span><span>20</span>             <span>$dir</span>     = <span>$path</span>.DIRECTORY_SEPARATOR.<span>$dir</span><span>;
</span><span>21</span>             <span>if</span>(<span>is_dir</span>(<span>$dir</span><span>)){
</span><span>22</span>                <span>$this</span>->createTree(<span>$dir</span>, <span>$level</span><span>);
</span><span>23</span>             } <span>elseif</span> (<span>is_file</span>(<span>$dir</span><span>)){
</span><span>24</span>                 <span>array_push</span>(<span>$files</span>, <span>$dir</span><span>);
</span><span>25</span> <span>            }
</span><span>26</span> <span>        }
</span><span>27</span>         <span>closedir</span>(<span>$dirHandle</span><span>);
</span><span>28</span>         <span>foreach</span> (<span>$files</span> <span>as</span> <span>$key</span> => <span>$value</span><span>) {
</span><span>29</span>             <span>$this</span>->tree .= <span>str_repeat</span>(<span>$this</span>->options["padding"], <span>$level</span><span>)
</span><span>30</span>                             .<span>$this</span>->options["filepre"<span>]
</span><span>31</span>                             .<span>$this</span>->_basename(<span>$value</span><span>)
</span><span>32</span>                               .<span>$this</span>->options["newline"<span>];
</span><span>33</span> <span>        }
</span><span>34</span>         <span>return</span> <span>$this</span><span>;
</span><span>35</span>     }
Code anzeigen

 3.2 Verzeichnisbaum anzeigen

<span>1</span>     <span>/*</span><span>*
</span><span>2</span> <span>     * 显示目录树
</span><span>3</span>      <span>*/</span>
<span>4</span>     <span>public</span> <span>function</span><span> showTree(){
</span><span>5</span>         <span>echo</span> "<pre class="brush:php;toolbar:false">"
<span>6</span>              .<span>$this</span>-><span>tree
</span><span>7</span>              ."
"; 8 } Code anzeigen

 3.3 Verzeichnisbaum herunterladen

<span>1</span>     <span>/*</span><span>*
</span><span>2</span> <span>     * 下载目录树文件
</span><span>3</span>      <span>*/</span>
<span>4</span>     <span>public</span> <span>function</span> downloadTree(<span>$name</span><span>){
</span><span>5</span>         <span>header</span>("Content-type:text/plain"<span>);
</span><span>6</span>         <span>header</span>("Content-Disposition:attachment;filename={<span>$name</span>}.txt"<span>);
</span><span>7</span>         <span>echo</span> <span>$this</span>-><span>tree;
</span><span>8</span>     }
Code anzeigen

 3.4 Im Test

Verwenden Sie jeweils die folgenden beiden Enden des Codes zum Testen:

<span>1</span> <span>$t</span> = <span>new</span> Dirtree(<span>array</span>("padding"=>"    ","newline"=>"<br>"<span>));
</span><span>2</span> <span>$t</span>->createTree("D:\autoload")->showTree("tree");
Code anzeigen

Der obige Code gibt die Verzeichnisstrukturinformationen an den Browser aus, genau wie Abbildung 1:

                                                                                                  Abbildung 1 Ausgabeverzeichnisstruktur an den Browser Abbildung 2 Download-Verzeichnisbaumstruktur

<span>1</span> <span>$t</span> = <span>new</span> Dirtree(<span>array</span>("padding"=>"    ","newline"=>"\r\n"<span>));
</span><span>2</span> <span>$t</span>->createTree("D:\autoload")->downloadTree("tree");
Code anzeigen Nachdem der obige Code ausgeführt wurde, lädt der Browser eine tree.txt-Datei herunter. Die Informationen zum Öffnen der Datei sind in Abbildung 2 dargestellt

4. Zusammenfassung

Eine Funktion zur Generierung eines Verzeichnisbaums ist grundsätzlich abgeschlossen. Wenn Sie jedoch Zeit haben, können Sie sie erweitern, um sie benutzerfreundlicher zu gestalten und den Befehlszeilenmodus zu unterstützen. Oder erweitern Sie den Ausgabeinhalt, sodass der Ordner gefaltet werden kann (js-Implementierung).

Das Urheberrecht dieses Artikels liegt beim Autor (luluyrt@163.com). Nach dem Nachdruck des Artikels müssen der Autor und der Originaltext-Link angegeben werden an einer offensichtlichen Stelle auf der Artikelseite, andernfalls behalten wir uns die Geltendmachung gesetzlicher Haftungsrechte vor.

Das Obige stellt die Durchquerung zum Generieren eines Verzeichnisbaums vor, einschließlich Aspekten des Inhalts. Ich hoffe, dass es für Freunde hilfreich sein wird, die sich für PHP-Tutorials interessieren.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn