Fix Horde_Util::getPathInfo() on lighttpd.
authorJan Schneider <jan@horde.org>
Tue, 15 Jun 2010 00:04:25 +0000 (02:04 +0200)
committerJan Schneider <jan@horde.org>
Tue, 15 Jun 2010 00:04:25 +0000 (02:04 +0200)
framework/Util/lib/Horde/Util.php
framework/Util/test/Horde/Util/UtilTest.php

index dfaee55..9b7186d 100644 (file)
@@ -669,13 +669,16 @@ class Horde_Util
             return $_SERVER['PATH_INFO'];
         } elseif (isset($_SERVER['REQUEST_URI']) &&
                   isset($_SERVER['SCRIPT_NAME'])) {
-            $search = array((basename($_SERVER['SCRIPT_NAME']) == 'index.php') ? dirname($_SERVER['SCRIPT_NAME']) . '/' : $_SERVER['SCRIPT_NAME']);
-            $replace = array('');
+            if (basename($_SERVER['SCRIPT_NAME']) == 'index.php') {
+                $search = array(dirname($_SERVER['SCRIPT_NAME']) . '/',
+                                'index.php');
+            } else {
+                $search = array($_SERVER['SCRIPT_NAME']);
+            }
             if (!empty($_SERVER['QUERY_STRING'])) {
                 $search[] = '?' . $_SERVER['QUERY_STRING'];
-                $replace[] = '';
             }
-            return str_replace($search, $replace, $_SERVER['REQUEST_URI']);
+            return str_replace($search, '', $_SERVER['REQUEST_URI']);
         }
 
         return '';
index 9e1caf5..84881e1 100644 (file)
@@ -84,4 +84,53 @@ class Horde_Util_UtilTest extends PHPUnit_Framework_TestCase
             'test?bar=2&amp;baz=3',
             (string)Horde_Util::removeParameter($url, 'foo'));
     }
+
+    public function testGetPathInfo()
+    {
+        $this->assertEquals('', Horde_Util::getPathInfo());
+
+        $_SERVER['SERVER_SOFTWARE'] = '';
+        $_SERVER['PATH_INFO'] = '';
+        $this->assertEquals('', Horde_Util::getPathInfo());
+
+        $_SERVER['PATH_INFO'] = '/foo/bar';
+        $this->assertEquals('/foo/bar', Horde_Util::getPathInfo());
+
+        $_SERVER['SERVER_SOFTWARE'] = 'lighttpd/1.4.26';
+        $_SERVER['PATH_INFO'] = '';
+        $_SERVER['REQUEST_URI'] = '/horde/path.php';
+        $_SERVER['SCRIPT_NAME'] = '/horde/path.php';
+        $this->assertEquals('', Horde_Util::getPathInfo());
+        $_SERVER['REQUEST_URI'] = '/horde/path.php?baz';
+        $_SERVER['QUERY_STRING'] = 'baz';
+        $this->assertEquals('', Horde_Util::getPathInfo());
+
+        $_SERVER['REQUEST_URI'] = '/horde/path.php/foo/bar';
+        $_SERVER['SCRIPT_NAME'] = '/horde/path.php';
+        $_SERVER['QUERY_STRING'] = '';
+        $this->assertEquals('/foo/bar', Horde_Util::getPathInfo());
+        $_SERVER['REQUEST_URI'] = '/horde/path.php/foo/bar?baz';
+        $_SERVER['QUERY_STRING'] = 'baz';
+        $this->assertEquals('/foo/bar', Horde_Util::getPathInfo());
+
+        $_SERVER['REQUEST_URI'] = '/horde/';
+        $_SERVER['SCRIPT_NAME'] = '/horde/index.php';
+        $this->assertEquals('', Horde_Util::getPathInfo());
+
+        $_SERVER['REQUEST_URI'] = '/horde/index.php';
+        $_SERVER['SCRIPT_NAME'] = '/horde/index.php';
+        $_SERVER['QUERY_STRING'] = '';
+        $this->assertEquals('', Horde_Util::getPathInfo());
+        $_SERVER['REQUEST_URI'] = '/horde/index.php?baz';
+        $_SERVER['QUERY_STRING'] = 'baz';
+        $this->assertEquals('', Horde_Util::getPathInfo());
+
+        $_SERVER['REQUEST_URI'] = '/horde/index.php/foo/bar';
+        $_SERVER['SCRIPT_NAME'] = '/horde/index.php';
+        $_SERVER['QUERY_STRING'] = '';
+        $this->assertEquals('/foo/bar', Horde_Util::getPathInfo());
+        $_SERVER['REQUEST_URI'] = '/horde/index.php/foo/bar?baz';
+        $_SERVER['QUERY_STRING'] = 'baz';
+        $this->assertEquals('/foo/bar', Horde_Util::getPathInfo());
+    }
 }