Added support for multipart forms, file uploads, and fatal exceptions in PhpHttpd; fixed wrong license tag on WebServer class
<div align="center">
<b>Greyhound</b><br />
A PHP-based web interface for Amarok<br />
<br />
>>> <b>To access this script once started navigate to: <<<<br />
>>> <a href="http://localhost:7447/">http://localhost:7447/</a> <<<
</div>
<p>I wrote Greyhound because of some issues I was having with other web
interface scripts freezing and not working right. Greyhound is my first
shot at writing Amarok scripts but it seems to work pretty well.
</p>
<p>Greyhound's interface is based on the WebControl script by Jonas Christian
Drewsen, André Kelpe, and Peter C. Ndikuwera. However unlike WebControl
Greyhound is written entirely in PHP, making it a bit more portable. This
script doesn't require an external web server to run, it has a relatively
basic built-in (single-threaded) server.</p>
<p>The script needs a browser with XmlHttpRequest (AJAX) support to work. It's
been tested on Firefox 3.0 beta 4 and Safari.</p>
<p>It uses Smarty templates so you should be able to customize the HTML to
your needs. The template file is /themes/funkymonkey/playlist.tpl. There's
also a theme called iphone which is optimized for use on Apple's touch
screen based mobile devices. Now your iPod® can control music other than
its own :-P</p>
<p>
<b>License</b><br />
I was originally planning to place this into the public domain but decided to
make it <b>GPLv2</b> because it uses so many GPLv2 components.
</p>
<p>
<b>Known issues</b><br />
There are a few bugs in Greyhound that I haven't been able to iron out.
</p>
<ul>
<li>The socket it listens on doesn't get fully closed until about a minute
after you interrupt the script. This means that when you hit stop in
the script manager, you won't be able to start Greyhound again for about
60 seconds. I checked everything and socket_shutdown() and socket_close()
are being called properly, so I don't know why it's failing.</li>
<li>The playlist isn't reloaded properly. This is because each of the child
threads have the playlist cached in memory, and I haven't figured out a
way to make them all reread the playlist file. Eventually I'll have code
in there that keeps track of the children and sends a SIGHUP to each of
them and have that fire an event that reparses the playlist file. The
only real way to fix this for now is to disable multi-threaded mode by
setting $allow_fork to false at the top of greyhound.php.</li>
</ul>
<p>
<b>Author</b><br />
Dan Fuhry <<a href="mailto:dan@enanocms.org">dan@enanocms.org</a>><br />
If you like this script be sure to check out my other projects:
<a href="http://enanocms.org/">Enano CMS</a> and
<a href="http://lifecodeidiocy.enanocms.org/">my blog</a>.
</p>