目录自定义函数
PHP中并不提供查询目录大小、复制目录、删除有文件的目录的函数,我们需要自己编写
这个函数只要传递一个url,就能递归查询目录中的文件大小,从而统计本文来源gaodai#ma#com搞@@代~&码*网/搞gaodaima代码出目录大小
<span style="color: #008080"> 1</span> <?<span style="color: #000000">php</span><span style="color: #008080"> 2</span> <span style="color: #0000ff">function</span> dirSize(<span style="color: #800080">$dir</span><span style="color: #000000">){</span><span style="color: #008080"> 3</span> <span style="color: #800080">$dirsize</span> = 0<span style="color: #000000">;</span><span style="color: #008080"> 4</span> <span style="color: #800080">$url</span> = <span style="color: #008080">opendir</span>(<span style="color: #800080">$dir</span><span style="color: #000000">);</span><span style="color: #008080"> 5</span> <span style="color: #0000ff">while</span>(<span style="color: #800080">$filename</span> = <span style="color: #008080">readdir</span>(<span style="color: #800080">$url</span><span style="color: #000000">)){</span><span style="color: #008080"> 6</span> <span style="color: #800080">$file</span> = <span style="color: #800080">$dir</span>.'/'.<span style="color: #800080">$filename</span><span style="color: #000000">;</span><span style="color: #008080"> 7</span> <span style="color: #0000ff">if</span>(!(<span style="color: #800080">$filename</span>=='.' || <span style="color: #800080">$filename</span>=='..'<span style="color: #000000">)){</span><span style="color: #008080"> 8</span> <span style="color: #0000ff">if</span>(<span style="color: #008080">is_dir</span>(<span style="color: #800080">$file</span><span style="color: #000000">)){</span><span style="color: #008080"> 9</span> <span style="color: #800080">$dirsize</span> += dirSize(<span style="color: #800080">$file</span><span style="color: #000000">);</span><span style="color: #008080">10</span> }<span style="color: #0000ff">else</span><span style="color: #000000">{</span><span style="color: #008080">11</span> <span style="color: #800080">$dirsize</span> += <span style="color: #008080">filesize</span>(<span style="color: #800080">$file</span><span style="color: #000000">);</span><span style="color: #008080">12</span> <span style="color: #000000"> }</span><span style="color: #008080">13</span> <span style="color: #000000"> }</span><span style="color: #008080">14</span> <span style="color: #000000"> }</span><span style="color: #008080">15</span> <span style="color: #008080">closedir</span>(<span style="color: #800080">$url</span><span style="color: #000000">);</span><span style="color: #008080">16</span> <span style="color: #0000ff">return</span> <span style="color: #800080">$dirsize</span><span style="color: #000000">;</span><span style="color: #008080">17</span> }
这个函数需要传递两个url,分别是旧目录和新目录,就能复制该目录及文件
<span style="color: #008080"> 1</span> <?<span style="color: #000000">php</span><span style="color: #008080"> 2</span> <span style="color: #0000ff">function</span> copyDir(<span style="color: #800080">$dirSrc</span>,<span style="color: #800080">$dirTo</span><span style="color: #000000">){</span><span style="color: #008080"> 3</span> <span style="color: #0000ff">if</span>(<span style="color: #008080">is_file</span>(<span style="color: #800080">$dirTo</span><span style="color: #000000">))</span><span style="color: #008080"> 4</span> <span style="color: #000000"> {</span><span style="color: #008080"> 5</span> <span style="color: #0000ff">echo</span> '目标不是目录不能创建!'<span style="color: #000000">;</span><span style="color: #008080"> 6</span> <span style="color: #0000ff">return</span><span style="color: #000000">;</span><span style="color: #008080"> 7</span> <span style="color: #000000"> }</span><span style="color: #008080"> 8</span> <span style="color: #0000ff">if</span>(!<span style="color: #008080">file_exists</span>(<span style="color: #800080">$dirTo</span><span style="color: #000000">))</span><span style="color: #008080"> 9</span> <span style="color: #000000"> {</span><span style="color: #008080">10</span> <span style="color: #008080">mkdir</span>(<span style="color: #800080">$dirTo</span><span style="color: #000000">);</span><span style="color: #008080">11</span> <span style="color: #000000"> }</span><span style="color: #008080">12</span> <span style="color: #800080">$dir_handle</span> = @<span style="color: #008080">opendir</span>(<span style="color: #800080">$dirSrc</span><span style="color: #000000">);</span><span style="color: #008080">13</span> <span style="color: #0000ff">if</span>(<span style="color: #800080">$dir_handle</span><span style="color: #000000">)</span><span style="color: #008080">14</span> <span style="color: #000000"> {</span><span style="color: #008080">15</span> <span style="color: #0000ff">while</span>(<span style="color: #800080">$filename</span> = <span style="color: #008080">readdir</span>(<span style="color: #800080">$dir_handle</span><span style="color: #000000">))</span><span style="color: #008080">16</span> <span style="color: #000000"> {</span><span style="color: #008080">17</span> <span style="color: #0000ff">if</span>(<span style="color: #800080">$filename</span>!="." && <span style="color: #800080">$filename</span>!=".."<span style="color: #000000">)</span><span style="color: #008080">18</span> <span style="color: #000000"> {</span><span style="color: #008080">19</span> <span style="color: #800080">$subSrcFile</span> = <span style="color: #800080">$dirSrc</span> . "\\".<span style="color: #800080">$filename</span><span style="color: #000000">;</span><span style="color: #008080">20</span> <span style="color: #800080">$subToFile</span> = <span style="color: #800080">$dirTo</span> . "\\".<span style="color: #800080">$filename</span><span style="color: #000000">;</span><span style="color: #008080">21</span> <span style="color: #008080">22</span> <span style="color: #0000ff">if</span>(<span style="color: #008080">is_dir</span>(<span style="color: #800080">$subSrcFile</span><span style="color: #000000">))</span><span style="color: #008080">23</span> <span style="color: #000000"> {</span><span style="color: #008080">24</span> copyDir(<span style="color: #800080">$subSrcFile</span>, <span style="color: #800080">$subToFile</span><span style="color: #000000">);</span><span style="color: #008080">25</span> <span style="color: #000000"> }</span><span style="color: #008080">26</span> <span style="color: #0000ff">if</span>(<span style="color: #008080">is_file</span>(<span style="color: #800080">$subSrcFile</span><span style="color: #000000">))</span><span style="color: #008080">27</span> <span style="color: #000000"> {</span><span style="color: #008080">28</span> <span style="color: #008080">copy</span>(<span style="color: #800080">$subSrcFile</span>, <span style="color: #800080">$subToFile</span><span style="color: #000000">);</span><span style="color: #008080">29</span> <span style="color: #000000"> }</span><span style="color: #008080">30</span> <span style="color: #000000"> }</span><span style="color: #008080">31</span> <span style="color: #000000"> }</span><span style="color: #008080">32</span> <span style="color: #008080">closedir</span>(<span style="color: #800080">$dir_handle</span><span style="color: #000000">);</span><span style="color: #008080">33</span> <span style="color: #000000"> }</span><span style="color: #008080">34</span> }
这个函数只要传递一个url,就能递归删除目录及子目录的文件,从而删除目录
<span style="color: #008080"> 1</span> <?<span style="color: #000000">php</span><span style="color: #008080"> 2</span> <span style="color: #0000ff">function</span> rmDirAll(<span style="color: #800080">$url</span><span style="color: #000000">){</span><span style="color: #008080"> 3</span> <span style="color: #008000">//</span><span style="color: #008000">检测要打开目录是否存在</span><span style="color: #008080"> 4</span> <span style="color: #0000ff">if</span>(!<span style="color: #800080">$dir</span>=@<span style="color: #008080">opendir</span>(<span style="color: #800080">$url</span><span style="color: #000000">)){</span><span style="color: #008080"> 5</span> <span style="color: #0000ff">return</span> <span style="color: #0000ff">false</span><span style="color: #000000">;</span><span style="color: #008080"> 6</span> <span style="color: #000000"> }</span><span style="color: #008080"> 7</span> <span style="color: #0000ff">while</span>(<span style="color: #0000ff">false</span> !==(<span style="color: #800080">$file</span>=<span style="color: #008080">readdir</span>(<span style="color: #800080">$dir</span><span style="color: #000000">))){</span><span style="color: #008080"> 8</span> <span style="color: #008000">//</span><span style="color: #008000">排除当前目录与父级目录</span><span style="color: #008080"> 9</span> <span style="color: #0000ff">if</span>(<span style="color: #800080">$file</span>!=="."&&<span style="color: #800080">$file</span>!==".."<span style="color: #000000">){</span><span style="color: #008080">10</span> <span style="color: #800080">$file</span>=<span style="color: #800080">$url</span> .'/'. <span style="color: #800080">$file</span><span style="color: #000000">;</span><span style="color: #008080">11</span> <span style="color: #008000">//</span><span style="color: #008000">递归删除目录</span><span style="color: #008080">12</span> <span style="color: #0000ff">if</span>(<span style="color: #008080">is_dir</span>(<span style="color: #800080">$file</span><span style="color: #000000">)){</span><span style="color: #008080">13</span> rmDirAll(<span style="color: #800080">$file</span><span style="color: #000000">);</span><span style="color: #008080">14</span> }<span style="color: #0000ff">else</span><span style="color: #000000">{</span><span style="color: #008080">15</span> <span style="color: #0000ff">if</span>(@<span style="color: #008080">unlink</span>(<span style="color: #800080">$file</span><span style="color: #000000">)){</span><span style="color: #008080">16</span> <span style="color: #0000ff">continue</span><span style="color: #000000">;</span><span style="color: #008080">17</span> }<span style="color: #0000ff">else</span><span style="color: #000000">{</span><span style="color: #008080">18</span> <span style="color: #0000ff">return</span> <span style="color: #0000ff">false</span><span style="color: #000000">;</span><span style="color: #008080">19</span> <span style="color: #000000"> }</span><span style="color: #008080">20</span> <span style="color: #000000"> }</span><span style="color: #008080">21</span> <span style="color: #000000"> }</span><span style="color: #008080">22</span> <span style="color: #0000ff">if</span>(@<span style="color: #008080">rmdir</span>(<span style="color: #800080">$url</span><span style="color: #000000">)){</span><span style="color: #008080">23</span> <span style="color: #0000ff">return</span> <span style="color: #0000ff">true</span><span style="color: #000000">;</span><span style="color: #008080">24</span> }<span style="color: #0000ff">else</span><span style="color: #000000">{</span><span style="color: #008080">25</span> <span style="color: #0000ff">return</span> <span style="color: #0000ff">false</span><span style="color: #000000">;</span><span style="color: #008080">26</span> <span style="color: #000000"> }</span><span style="color: #008080">27</span> <span style="color: #000000"> }</span><span style="color: #008080">28</span> }