<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>Read entry from directory handle</title> </head> <body><div class="manualnavbar" style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="streamwrapper.dir-opendir.html">streamWrapper::dir_opendir</a></div> <div class="next" style="text-align: right; float: right;"><a href="streamwrapper.dir-rewinddir.html">streamWrapper::dir_rewinddir</a></div> <div class="up"><a href="class.streamwrapper.html">streamWrapper</a></div> <div class="home"><a href="index.html">PHP Manual</a></div> </div><hr /><div id="streamwrapper.dir-readdir" class="refentry"> <div class="refnamediv"> <h1 class="refname">streamWrapper::dir_readdir</h1> <p class="verinfo">(PHP 4 >= 4.3.2, PHP 5)</p><p class="refpurpose"><span class="refname">streamWrapper::dir_readdir</span> — <span class="dc-title">Read entry from directory handle</span></p> </div> <div class="refsect1 description" id="refsect1-streamwrapper.dir-readdir-description"> <h3 class="title">Description</h3> <div class="methodsynopsis dc-description"> <span class="modifier">public</span> <span class="type">string</span> <span class="methodname"><strong>streamWrapper::dir_readdir</strong></span> ( <span class="methodparam">void</span> )</div> <p class="para rdfs-comment"> This method is called in response to <span class="function"><a href="function.readdir.html" class="function">readdir()</a></span>. </p> </div> <div class="refsect1 parameters" id="refsect1-streamwrapper.dir-readdir-parameters"> <h3 class="title">Parameters</h3> <p class="para">This function has no parameters.</p> </div> <div class="refsect1 returnvalues" id="refsect1-streamwrapper.dir-readdir-returnvalues"> <h3 class="title">Return Values</h3> <p class="para"> Should return <span class="type"><a href="language.types.string.html" class="type string">string</a></span> representing the next filename, or <strong><code>FALSE</code></strong> if there is no next file. </p> <blockquote class="note"><p><strong class="note">Note</strong>: <p class="para"> The return value will be casted to <span class="type"><a href="language.types.string.html" class="type string">string</a></span>. </p> </p></blockquote> </div> <div class="refsect1 errors" id="refsect1-streamwrapper.dir-readdir-errors"> <h3 class="title">Errors/Exceptions</h3> <p class="para">Emits <strong><code>E_WARNING</code></strong> if call to this method fails (i.e. not implemented).</p> </div> <div class="refsect1 examples" id="refsect1-streamwrapper.dir-readdir-examples"> <h3 class="title">Examples</h3> <p class="para"> <div class="example" id="example-4008"> <p><strong>Example #1 Listing files from tar archives</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">streamWrapper </span><span style="color: #007700">{<br /> protected </span><span style="color: #0000BB">$fp</span><span style="color: #007700">;<br /><br /> public function </span><span style="color: #0000BB">dir_opendir</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">, </span><span style="color: #0000BB">$options</span><span style="color: #007700">) {<br /> </span><span style="color: #0000BB">$url </span><span style="color: #007700">= </span><span style="color: #0000BB">parse_url</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">);<br /><br /> </span><span style="color: #0000BB">$path </span><span style="color: #007700">= </span><span style="color: #0000BB">$url</span><span style="color: #007700">[</span><span style="color: #DD0000">"host"</span><span style="color: #007700">] . </span><span style="color: #0000BB">$url</span><span style="color: #007700">[</span><span style="color: #DD0000">"path"</span><span style="color: #007700">];<br /><br /> if (!</span><span style="color: #0000BB">is_readable</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">)) {<br /> </span><span style="color: #0000BB">trigger_error</span><span style="color: #007700">(</span><span style="color: #DD0000">"</span><span style="color: #0000BB">$path</span><span style="color: #DD0000"> isn't readable for me"</span><span style="color: #007700">, </span><span style="color: #0000BB">E_USER_NOTICE</span><span style="color: #007700">);<br /> return </span><span style="color: #0000BB">false</span><span style="color: #007700">;<br /> }<br /> if (!</span><span style="color: #0000BB">is_file</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">)) {<br /> </span><span style="color: #0000BB">trigger_error</span><span style="color: #007700">(</span><span style="color: #DD0000">"</span><span style="color: #0000BB">$path</span><span style="color: #DD0000"> isn't a file"</span><span style="color: #007700">, </span><span style="color: #0000BB">E_USER_NOTICE</span><span style="color: #007700">);<br /> return </span><span style="color: #0000BB">false</span><span style="color: #007700">;<br /> }<br /><br /> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">fp </span><span style="color: #007700">= </span><span style="color: #0000BB">fopen</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">, </span><span style="color: #DD0000">"rb"</span><span style="color: #007700">);<br /> return </span><span style="color: #0000BB">true</span><span style="color: #007700">;<br /> }<br /><br /> public function </span><span style="color: #0000BB">dir_readdir</span><span style="color: #007700">() {<br /> </span><span style="color: #FF8000">// Extract the header for this entry<br /> </span><span style="color: #0000BB">$header </span><span style="color: #007700">= </span><span style="color: #0000BB">fread</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">fp</span><span style="color: #007700">, </span><span style="color: #0000BB">512</span><span style="color: #007700">);<br /> </span><span style="color: #0000BB">$data </span><span style="color: #007700">= </span><span style="color: #0000BB">unpack</span><span style="color: #007700">(</span><span style="color: #DD0000">"a100filename/a8mode/a8uid/a8gid/a12size/a12mtime/a8checksum/a1filetype/a100link/a100linkedfile"</span><span style="color: #007700">, </span><span style="color: #0000BB">$header</span><span style="color: #007700">);<br /><br /> </span><span style="color: #FF8000">// Trim the filename and filesize<br /> </span><span style="color: #0000BB">$filename </span><span style="color: #007700">= </span><span style="color: #0000BB">trim</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">"filename"</span><span style="color: #007700">]);<br /><br /> </span><span style="color: #FF8000">// No filename? We are the end of the archive<br /> </span><span style="color: #007700">if (!</span><span style="color: #0000BB">$filename</span><span style="color: #007700">) {<br /> return </span><span style="color: #0000BB">false</span><span style="color: #007700">;<br /> }<br /><br /> </span><span style="color: #0000BB">$octal_bytes </span><span style="color: #007700">= </span><span style="color: #0000BB">trim</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #DD0000">"size"</span><span style="color: #007700">]);<br /> </span><span style="color: #FF8000">// Filesize is defined in octects<br /> </span><span style="color: #0000BB">$bytes </span><span style="color: #007700">= </span><span style="color: #0000BB">octdec</span><span style="color: #007700">(</span><span style="color: #0000BB">$octal_bytes</span><span style="color: #007700">);<br /><br /> </span><span style="color: #FF8000">// tar rounds up filesizes up to multiple of 512 bytes (zero filled)<br /> </span><span style="color: #0000BB">$rest </span><span style="color: #007700">= </span><span style="color: #0000BB">$bytes </span><span style="color: #007700">% </span><span style="color: #0000BB">512</span><span style="color: #007700">;<br /> if (</span><span style="color: #0000BB">$rest </span><span style="color: #007700">> </span><span style="color: #0000BB">0</span><span style="color: #007700">) {<br /> </span><span style="color: #0000BB">$bytes </span><span style="color: #007700">+= </span><span style="color: #0000BB">512 </span><span style="color: #007700">- </span><span style="color: #0000BB">$rest</span><span style="color: #007700">;<br /> }<br /><br /> </span><span style="color: #FF8000">// Seek over the file<br /> </span><span style="color: #0000BB">fseek</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">fp</span><span style="color: #007700">, </span><span style="color: #0000BB">$bytes</span><span style="color: #007700">, </span><span style="color: #0000BB">SEEK_CUR</span><span style="color: #007700">);<br /><br /> return </span><span style="color: #0000BB">$filename</span><span style="color: #007700">;<br /> }<br /><br /> public function </span><span style="color: #0000BB">dir_closedir</span><span style="color: #007700">() {<br /> return </span><span style="color: #0000BB">fclose</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">fp</span><span style="color: #007700">);<br /> }<br /><br /> public function </span><span style="color: #0000BB">dir_rewinddir</span><span style="color: #007700">() {<br /> return </span><span style="color: #0000BB">fseek</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">fp</span><span style="color: #007700">, </span><span style="color: #0000BB">0</span><span style="color: #007700">, </span><span style="color: #0000BB">SEEK_SET</span><span style="color: #007700">);<br /> }<br />}<br /><br /></span><span style="color: #0000BB">stream_wrapper_register</span><span style="color: #007700">(</span><span style="color: #DD0000">"tar"</span><span style="color: #007700">, </span><span style="color: #DD0000">"streamWrapper"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$handle </span><span style="color: #007700">= </span><span style="color: #0000BB">opendir</span><span style="color: #007700">(</span><span style="color: #DD0000">"tar://example.tar"</span><span style="color: #007700">);<br />while (</span><span style="color: #0000BB">false </span><span style="color: #007700">!== (</span><span style="color: #0000BB">$file </span><span style="color: #007700">= </span><span style="color: #0000BB">readdir</span><span style="color: #007700">(</span><span style="color: #0000BB">$handle</span><span style="color: #007700">))) {<br /> </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$file</span><span style="color: #007700">);<br />}<br /><br />echo </span><span style="color: #DD0000">"Rewinding..\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">rewind</span><span style="color: #007700">(</span><span style="color: #0000BB">$handle</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">readdir</span><span style="color: #007700">(</span><span style="color: #0000BB">$handle</span><span style="color: #007700">));<br /><br /></span><span style="color: #0000BB">closedir</span><span style="color: #007700">(</span><span style="color: #0000BB">$handle</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> <div class="example-contents"><p>The above example will output something similar to:</p></div> <div class="example-contents screen"> <div class="cdata"><pre> string(13) "construct.xml" string(16) "dir-closedir.xml" string(15) "dir-opendir.xml" string(15) "dir-readdir.xml" string(17) "dir-rewinddir.xml" string(9) "mkdir.xml" string(10) "rename.xml" string(9) "rmdir.xml" string(15) "stream-cast.xml" string(16) "stream-close.xml" string(14) "stream-eof.xml" string(16) "stream-flush.xml" string(15) "stream-lock.xml" string(15) "stream-open.xml" string(15) "stream-read.xml" string(15) "stream-seek.xml" string(21) "stream-set-option.xml" string(15) "stream-stat.xml" string(15) "stream-tell.xml" string(16) "stream-write.xml" string(10) "unlink.xml" string(12) "url-stat.xml" Rewinding.. string(13) "construct.xml" </pre></div> </div> </div> </p> </div> <div class="refsect1 seealso" id="refsect1-streamwrapper.dir-readdir-seealso"> <h3 class="title">See Also</h3> <p class="para"> <ul class="simplelist"> <li class="member"> <span class="function"><a href="function.readdir.html" class="function" rel="rdfs-seeAlso">readdir()</a> - Read entry from directory handle</span></li> </ul> </p> </div> </div><hr /><div class="manualnavbar" style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="streamwrapper.dir-opendir.html">streamWrapper::dir_opendir</a></div> <div class="next" style="text-align: right; float: right;"><a href="streamwrapper.dir-rewinddir.html">streamWrapper::dir_rewinddir</a></div> <div class="up"><a href="class.streamwrapper.html">streamWrapper</a></div> <div class="home"><a href="index.html">PHP Manual</a></div> </div></body></html>