123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- <?xml version="1.0" encoding="utf-8"?>
- <!--
-
- h t t :: / / t /
- h t t :: // // t //
- h ttttt ttttt ppppp sssss // // y y sssss ttttt //
- hhhh t t p p s // // y y s t //
- h hh t t ppppp sssss // // yyyyy sssss t //
- h h t t p s :: / / y .. s t .. /
- h h t t p sssss :: / / yyyyy .. sssss t .. /
-
- <https://y.st./>
- Copyright © 2016 Alex Yst <mailto:copyright@y.st>
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <https://www.gnu.org./licenses/>.
- -->
- <!DOCTYPE html>
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <base href="https://y.st./en/weblog/2016/01-January/09.xhtml" />
- <title>\scandir() <https://y.st./en/weblog/2016/01-January/09.xhtml></title>
- <link rel="icon" type="image/png" href="/link/CC_BY-SA_4.0/y.st./icon.png" />
- <link rel="stylesheet" type="text/css" href="/link/basic.css" />
- <link rel="stylesheet" type="text/css" href="/link/site-specific.css" />
- <script type="text/javascript" src="/script/javascript.js" />
- <meta name="viewport" content="width=device-width" />
- </head>
- <body>
- <nav>
- <p>
- <a href="/en/">Home</a> |
- <a href="/en/a/about.xhtml">About</a> |
- <a href="/en/a/contact.xhtml">Contact</a> |
- <a href="/a/canary.txt">Canary</a> |
- <a href="/en/URI_research/"><abbr title="Uniform Resource Identifier">URI</abbr> research</a> |
- <a href="/en/opinion/">Opinions</a> |
- <a href="/en/coursework/">Coursework</a> |
- <a href="/en/law/">Law</a> |
- <a href="/en/a/links.xhtml">Links</a> |
- <a href="/en/weblog/2016/01-January/09.xhtml.asc">{this page}.asc</a>
- </p>
- <hr/>
- <p>
- Weblog index:
- <a href="/en/weblog/"><abbr title="American Standard Code for Information Interchange">ASCII</abbr> calendars</a> |
- <a href="/en/weblog/index_ol_ascending.xhtml">Ascending list</a> |
- <a href="/en/weblog/index_ol_descending.xhtml">Descending list</a>
- </p>
- <hr/>
- <p>
- Jump to entry:
- <a href="/en/weblog/2015/03-March/07.xhtml"><<First</a>
- <a rel="prev" href="/en/weblog/2016/01-January/08.xhtml"><Previous</a>
- <a rel="next" href="/en/weblog/2016/01-January/10.xhtml">Next></a>
- <a href="/en/weblog/latest.xhtml">Latest>></a>
- </p>
- <hr/>
- </nav>
- <header>
- <h1><code>\scandir()</code></h1>
- <p>Day 00308: Saturday, 2016 January 09</p>
- </header>
- <p>
- For some strange reason, my spider keeps quitting on me without an error message.
- At least now, quitting does not cause all the data to be lost.
- </p>
- <p>
- I found a function in the <abbr title="PHP: Hypertext Preprocessor">PHP</abbr> manual that I had not seen before: <a href="https://secure.php.net/manual/en/function.scandir.php"><code>scandir()</code></a>.
- This function lists all files in a directory, and even does it alphabetically.
- As far as I can tell, the only thing that directory handles and <code>\Directory</code> object are good for is listing directories, so this simple function obsoletes both, as both are a pain to use.
- Literally every time that I want to use them, I have to consult the manual again to be sure I am using them correctly because you cannot just iterate over them as expected.
- Instead, you must explicitly check each return value for being identical to (not just equal to) false while at the same time assigning the values to variables.
- I have always thought that such a directory-listing function should exist, but could never find it, so I always just built my own.
- This function also obsoletes my own custom <code>dir()</code> function, which just creates a dir object, iterates over it, then alphabetizes and returns the results, so I am removing it.
- It obsoletes my dir class as well, though I will be keeping that due to it being one of my wrapper classes.
- </p>
- <p>
- While working on wrapping stream resources, I found some interesting things.
- First, that <a href="https://secure.php.net/manual/en/class.streamwrapper.php">class prototype that I found yesterday</a> seems to be for use with the <a href="https://secure.php.net/manual/en/function.stream-wrapper-register.php"><code>stream_wrapper_register()</code> function</a>.
- It is completely irrelevant to my current project of wrapping up resources with their function.
- Second, and more interestingly, I do not see any functions for actually creating a <a href="https://secure.php.net/manual/en/ref.stream.php">stream resource</a>.
- Instead, as best I can tell, the stream functions are used on resources created by more specific functions.
- For example, I think that the stream functions apply to <a href="https://secure.php.net/manual/en/book.dir.php">directory resources</a> and <a href="https://secure.php.net/manual/en/book.ftp.php"><abbr title="File Transfer Protocol">FTP</abbr></a> resources.
- I was thinking about making my stream class into an abstract class for other classes such as the <abbr title="File Transfer Protocol">FTP</abbr> class to extend, but there is a small issue with that plan.
- Specifically, my directory class already extends the default, half-implemented <code>\Directory</code> class.
- I can instead make it into a trait, though that means reworking several classes.
- Specifically, my wrapper classes currently use self::$resource to hold the resource handle, but <code>\Directory</code> uses <code>self::$handle</code> instead.
- In order to make the trait work, I will need to change any class that uses the stream trait to match.
- For consistency, I will probably change all the wrapper classes to match whether they use the stream trait or not.
- The one down side to using a trait instead of an abstract class is that I cannot use type hints to require that certain function take only resource wrappers as arguments.
- From the looks of it though, if this becomes a problem, I can create an interface to go with the trait.
- An interface cannot define working methods and a trait cannot be used for type hinting, but together, they can get the job done.
- </p>
- <p>
- I ran into some strange functions relating to "bucket objects" and "brigade resources".
- There is no documentation that I can find on where brigade resources come from or how to create them.
- The only scrap of information that I can find is on the <a href="https://secure.php.net/manual/en/function.stream-bucket-prepend.php"><code>\stream_bucket_prepend()</code> function</a>'s documentation page.
- This documentation says that a brigade resource is a resource used to contain bucket objects, but that is all that is says bout them.
- As for bucket object, I ran some tests on my machine, and it seems that bucket objects are just <code>\stdClass</code> objects that have three properties: a string, an integer, and a "userfilter.bucket" resource.
- I am also having trouble wrapping the stream_socket_*() functions, as their descriptions are not consistent.
- Some appear to work on a specific type of resource that is used for socket streams, but some imply that they are for streams in general.
- </p>
- <p>
- My <a href="/a/canary.txt">canary</a> still sings the tune of freedom and transparency.
- </p>
- <hr/>
- <p>
- Copyright © 2016 Alex Yst;
- You may modify and/or redistribute this document under the terms of the <a rel="license" href="/license/gpl-3.0-standalone.xhtml"><abbr title="GNU's Not Unix">GNU</abbr> <abbr title="General Public License version Three or later">GPLv3+</abbr></a>.
- If for some reason you would prefer to modify and/or distribute this document under other free copyleft terms, please ask me via email.
- My address is in the source comments near the top of this document.
- This license also applies to embedded content such as images.
- For more information on that, see <a href="/en/a/licensing.xhtml">licensing</a>.
- </p>
- <p>
- <abbr title="World Wide Web Consortium">W3C</abbr> standards are important.
- This document conforms to the <a href="https://validator.w3.org./nu/?doc=https%3A%2F%2Fy.st.%2Fen%2Fweblog%2F2016%2F01-January%2F09.xhtml"><abbr title="Extensible Hypertext Markup Language">XHTML</abbr> 5.1</a> specification and uses style sheets that conform to the <a href="http://jigsaw.w3.org./css-validator/validator?uri=https%3A%2F%2Fy.st.%2Fen%2Fweblog%2F2016%2F01-January%2F09.xhtml"><abbr title="Cascading Style Sheets">CSS</abbr>3</a> specification.
- </p>
- </body>
- </html>
|