>백엔드 개발 >PHP 튜토리얼 >생성된 디렉터리 트리 탐색

생성된 디렉터리 트리 탐색

WBOY
WBOY원래의
2016-08-08 09:31:441758검색

1. 서문

지난 블로그를 작성할 때 파일 구조를 표시하기 위해 디렉토리 트리 구조를 사용해야 했기 때문에 모든 폴더와 파일을 수동으로 "트래버스"해야 했습니다. 나중에는 이것이 너무 오류가 발생하기 쉽고 노동 집약적이라고 생각했기 때문에 디렉토리 아래의 파일과 폴더를 탐색하고 필요한 경우 디렉토리 트리 구조를 사용할 수 있도록 디렉토리 트리를 생성하는 PHP 스크립트를 작성하는 것에 대해 생각했습니다. 앞으로는 직접 실행해 보세요. 현재 스크립트에 의해 생성된 디렉터리 트리 구조는 브라우저를 통해 직접 보거나 다운로드하여 txt 파일을 생성할 수 있습니다.

2. 아이디어 소개

디렉토리 트리를 생성하는 아이디어는 매우 간단합니다. 현재 폴더 아래의 내용을 탐색하고 ".."을 만나면 바로 건너뜁니다. 파일을 생성하면 먼저 배열에 저장됩니다. 현재 폴더를 탐색한 후 배열의 파일을 함께 연결합니다. 이 작업은 생성 후 디렉터리 트리를 표시하거나 다운로드하는 또 다른 단계입니다. . 집필 과정에는 아직 몇 가지 세부 사항이 있으며, 개발 전까지는 공개되지 않습니다. 쉽게 이해하고 확장할 수 있도록 함수로 할 수 있는 일을 클래스에 넣어서 폴더를 순회한다는 생각을 좀 더 명확하게 했습니다.

3. 코드 구현

이제 아이디어가 생겼으니 코드 작성이 편해졌습니다(좋은 사람들이 바로 코드를 작성하는 것보다 코드를 작성할 때 생각하는 데 더 많은 시간을 소비한다고 말하는 이유이기도 합니다). 부품 코드:

 3.1 디렉토리 트리 생성

<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>     }
코드 보기

 3.2 디렉토리 트리 표시

<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 } 코드 보기

 3.3 다운로드 디렉토리 트리

<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>     }
코드 보기

 3.4 테스트 중

코드의 다음 두 끝을 사용하여 각각 테스트합니다.

<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");
코드 보기

위 코드는 그림 1과 같이 디렉터리 구조 정보를 브라우저에 출력합니다.

                                                                                             그림 1 디렉토리 구조를 브라우저에 출력 그림 2 디렉토리 트리 구조 다운로드

<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");
코드 보기 위 코드가 실행되면 브라우저는 tree.txt 파일을 다운로드하게 되며 파일 열기에 대한 정보는 그림 2와 같습니다

4. 요약

디렉토리 트리 생성 기능은 기본적으로 완성되어 있지만, 시간이 된다면 확장하여 좀 더 친숙하게 만들고 명령줄 모드도 지원할 수 있습니다. 또는 폴더를 접을 수 있도록 출력 내용을 향상시킵니다(js 구현).

본 글의 저작권은 작성자(luluyrt@163.com)에게 있습니다. 글을 재인쇄한 후 작성자와 원문 링크를 알려주셔야 합니다. 기사 페이지의 명백한 위치에 있는 경우, 그렇지 않으면 당사는 법적 책임을 추구할 권리를 보유합니다.

위 내용은 내용의 측면을 포함하여 디렉토리 트리를 생성하는 탐색을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.