Skip to content

Instantly share code, notes, and snippets.

@pifantastic
Created July 16, 2010 22:17
Show Gist options
  • Save pifantastic/479000 to your computer and use it in GitHub Desktop.
Save pifantastic/479000 to your computer and use it in GitHub Desktop.
=== modified file 'evented-daemon.php' (properties changed: -x to +x)
--- evented-daemon.php 2010-07-13 08:01:54 +0000
+++ evented-daemon.php 2010-07-16 19:41:54 +0000
@@ -18,13 +18,20 @@
}
/**
+ * Generate an HTTP error
+ */
+function daemon_error($evhttp_request, $code, $message) {
+ evhttp_response_add_header($evhttp_request, 'Content-Type', 'text/html; charset=utf-8');
+ return evhttp_response_set($message . '.', $code, $message);
+}
+
+/**
* Handle an individual request.
*/
function daemon_request_callback($evhttp_request) {
// Begin per-request handling.
- evhttp_response_add_header($evhttp_request, 'Content-Type', 'text/html; charset=utf-8');
- $uri = evhttp_request_uri($evhttp_request);
- $_GET['q'] = parse_url($uri, PHP_URL_PATH);
+ $uri = evhttp_request_uri($evhttp_request);
+ $_GET['q'] = parse_url($uri, PHP_URL_PATH);
$_SERVER['REQUEST_METHOD'] = 'GET';
drupal_session_initialize();
bootstrap_invoke_all('boot');
@@ -33,8 +40,11 @@
drupal_init_path();
module_invoke_all('init');
+ $static_file_types = array('js' => 'application/x-javascript', 'css' => 'text/css', 'png' => 'image/png',
+ 'jpg' => 'image/jpeg', 'jpeg' => 'image/jpeg', 'gif' => 'image/gif', 'bmp' => 'image/bmp',
+ 'ico' => 'image/x-icon');
+
echo '[Pressflow] Per-request bootstrap complete' . "\n";
-
echo '[Pressflow] Using path: ' . $_GET['q'] . "\n";
// Execute the appropriate menu handler.
@@ -44,18 +54,25 @@
if (is_int($return)) {
switch ($return) {
case MENU_NOT_FOUND:
- echo '[Pressflow] Response: Not found' . PHP_EOL;
- return evhttp_response_set('Not found.', 404, 'Not found');
+ // Hack to handle static files
+ $ext = pathinfo($_GET['q'], PATHINFO_EXTENSION);
+ if (isset($static_file_types[$ext]) && file_exists($_GET['q']) && strpos(realpath($_GET['q']), getcwd()) === 0) {
+ evhttp_response_add_header($evhttp_request, 'Content-Type', $static_file_types[$ext]);
+ return evhttp_response_set(file_get_contents($_GET['q']), 200, 'OK');
+ }
+ echo '[Pressflow] Response: Not found' . PHP_EOL;
+ return daemon_error($evhttp_request, 404, 'Not found');
case MENU_ACCESS_DENIED:
- echo '[Pressflow] Response: Access denied' . PHP_EOL;
- return evhttp_response_set('Access denied.', 403, 'Access denied');
+ echo '[Pressflow] Response: Access denied' . PHP_EOL;
+ return daemon_error($evhttp_request, 403, 'Access denied');
case MENU_SITE_OFFLINE:
- echo '[Pressflow] Response: Site offline' . PHP_EOL;
- return evhttp_response_set('Service unavailable.', 503, 'Service unavailable');
+ echo '[Pressflow] Response: Site offline' . PHP_EOL;
+ return daemon_error($evhttp_request, 503, 'Service unavailable');
}
}
elseif (isset($return)) {
// Print any value (including an empty string) except NULL or undefined:
+ evhttp_response_add_header($evhttp_request, 'Content-Type', 'text/html; charset=utf-8');
$res = theme('page', $return);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment