Hey Kiall,

An optional argument to the built in web server can be a php based router. If the router returns false, it will attempt to return the resource as-it-is on disk.

Your command line looks like this:

php -S localhost:8000 -t ./path/to/docroot routing.php

routing.php can be one of two things- either a drop in replacement for .htaccess or your sites index.php.

My routing.php looks like this:

<?php

// OR if (preg_match('/\.(?:png|jpg|jpeg|gif)$/', $_SERVER["REQUEST_URI"]))
  if (file_exists(__DIR__ . '/' . $_SERVER['REQUEST_URI'])) {
    return false; // serve the requested resource as-is.
  } else {
    include_once 'index.php';
  }


If you choose to put your index.php in as the router, then your index.php should be cli-server aware:

  <?php

  if (php_sapi_name() == 'cli-server') {
    /* route static assets and return false */
  }

  /* go on with normal index.php operations */


I like the former approach as the routing.php can go inside your version control ignore list and won't get checked in as part of the project.

To me, that is as many lines of Apache rewrite that one would have had and it is as feature complete as Apache rewrite.

-ralph


On 7/11/11 6:46 AM, Kiall Mac Innes wrote:
Hiya,

I've been playing with the built-in server, and have some concerns over how
static assets are handled.

Currently, to run an application on the built-in server, we essentially need
to list out all the static assets that should be served directly from disk.
This is the opposite of what I believe the most common web server
configurations use.

I believe the built-in server should mimic typical configurations, rather
than requiring applications to write code solely for PHP's web server.

Have I just missed something? or if not, what do people think of how static
files are handled currently?

A typical Apache config extract (IMHO):

# Turn on URL rewriting
RewriteEngine On
RewriteBase /

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]

Apologies is this has been brought up before, I've not seen any discussion
of this topic so far.

Thanks,
Kiall



--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to