fix redirects when running as phar
authorChristian Weiske <cweiske@cweiske.de>
Thu, 10 Apr 2014 05:49:28 +0000 (07:49 +0200)
committerChristian Weiske <cweiske@cweiske.de>
Thu, 10 Apr 2014 05:49:28 +0000 (07:49 +0200)
build.xml
src/phancap/Config.php
src/phar-stub.php

index 2bf0ce1..f1d99e0 100644 (file)
--- a/build.xml
+++ b/build.xml
@@ -50,6 +50,7 @@
    <include name="PEAR/Exception.php"/>
    <include name="PEAR.php"/>
    <include name="PEAR5.php"/>
+   <include name="System.php"/>
   </pearPackageFileset>
   <pearPackageFileset id="dep-Getopt" package="pear.php.net/Console_Getopt" />
 
index 1bb4379..5034b0f 100644 (file)
@@ -118,15 +118,23 @@ class Config
             . preg_replace('/#.*$/', '', $_SERVER['REQUEST_URI']);
     }
 
+    /**
+     * @return string Directory of URL without trailing slash,
+     *                and without .phar file
+     */
     protected function getCurrentUrlDir()
     {
         $url = $this->getCurrentUrl();
         $url = preg_replace('/\?.*$/', '', $url);
-        if (substr($url, -1) == '/') {
-            return $url;
+        if (substr($url, -1) != '/') {
+            $url = substr($url, 0, -strlen(basename($url)) - 1);
+        }
+        if (\Phar::running()) {
+            //remove .phar file name
+            $url = substr($url, 0, -strlen(basename($url)) - 1);
         }
 
-        return substr($url, 0, -strlen(basename($url)) - 1);
+        return $url;
     }
 }
 ?>
index 04aa111..5188983 100644 (file)
@@ -28,25 +28,31 @@ $web = 'www/index.php';
  */
 function rewritePath($path)
 {
-    if ($path == '' || $path == '/') {
+    if ($path == '') {
+        //we need a / to get the relative links on index.php work
+        if (!isset($_SERVER['REQUEST_SCHEME'])) {
+            $_SERVER['REQUEST_SCHEME'] = 'http';
+        }
+        $url = $_SERVER['REQUEST_SCHEME'] . '://'
+            . $_SERVER['HTTP_HOST']
+            . preg_replace('/[?#].*$/', '', $_SERVER['REQUEST_URI'])
+            . '/';
+        header('Location: ' . $url);
+        exit(0);
+    } else if( $path == '/') {
         return 'www/index.php';
-    } else if ($path == '/get' || $path == '/get.php') {
-        return 'www/get.php';
-    } else if ($path == '/setup' || $path == '/setup.php') {
-        return 'www/setup.php';
     }
-    return $path;
+    return 'www' . $path;
 }
 
-//Phar::interceptFileFuncs();
 set_include_path(
     'phar://' . __FILE__
     . PATH_SEPARATOR . 'phar://' . __FILE__ . '/lib/'
 );
 Phar::webPhar(null, $web, null, array(), 'rewritePath');
 
-//work around https://bugs.php.net/bug.php?id=52322
-//require 'phar://' . __FILE__ . '/' . $web;
-echo "cli\n";
+//TODO: implement CLI setup check
+echo "phancap can only be used in the browser\n";
+exit(1);
 __HALT_COMPILER();
 ?>