Просмотр исходного кода

feat: add support for $_SERVER['PHP_SELF'] (#71)

* PHP_SELF

* remove accidental formatting

* test: add test for PHP_SELF

Co-authored-by: Kévin Dunglas <kevin@dunglas.fr>
Dylan Blokhuis 2 лет назад
Родитель
Сommit
18940108d1
2 измененных файлов с 7 добавлено и 4 удалено
  1. 4 1
      cgi.go
  2. 3 3
      frankenphp_test.go

+ 4 - 1
cgi.go

@@ -86,7 +86,10 @@ func populateEnv(request *http.Request) error {
 	if scriptName != "" && !strings.HasPrefix(scriptName, "/") {
 		scriptName = "/" + scriptName
 	}
-
+	
+	if _, ok := fc.Env["PHP_SELF"]; !ok {
+		fc.Env["PHP_SELF"] = fpath
+	}
 	if _, ok := fc.Env["DOCUMENT_URI"]; !ok {
 		fc.Env["DOCUMENT_URI"] = docURI
 	}

+ 3 - 3
frankenphp_test.go

@@ -106,7 +106,7 @@ func TestServerVariable_worker(t *testing.T) {
 }
 func testServerVariable(t *testing.T, opts *testOptions) {
 	runTest(t, func(handler func(http.ResponseWriter, *http.Request), _ *httptest.Server, i int) {
-		req := httptest.NewRequest("GET", fmt.Sprintf("http://example.com/server-variable.php?foo=a&bar=b&i=%d#hash", i), nil)
+		req := httptest.NewRequest("GET", fmt.Sprintf("http://example.com/server-variable.php/baz/bat?foo=a&bar=b&i=%d#hash", i), nil)
 		req.SetBasicAuth("kevin", "password")
 		w := httptest.NewRecorder()
 		handler(w, req)
@@ -122,10 +122,10 @@ func testServerVariable(t *testing.T, opts *testOptions) {
 		assert.Contains(t, strBody, "[PHP_AUTH_PW] => password")
 		assert.Contains(t, strBody, "[HTTP_AUTHORIZATION] => Basic a2V2aW46cGFzc3dvcmQ=")
 		assert.Contains(t, strBody, "[DOCUMENT_ROOT]")
+		assert.Contains(t, strBody, "[PHP_SELF] => /server-variable.php/baz/bat")
 		assert.Contains(t, strBody, "[CONTENT_TYPE]")
 		assert.Contains(t, strBody, fmt.Sprintf("[QUERY_STRING] => foo=a&bar=b&i=%d#hash", i))
-		assert.Contains(t, strBody, fmt.Sprintf("[REQUEST_URI] => /server-variable.php?foo=a&bar=b&i=%d#hash", i))
-		assert.Contains(t, strBody, "[SCRIPT_NAME]")
+		assert.Contains(t, strBody, fmt.Sprintf("[REQUEST_URI] => /server-variable.php/baz/bat?foo=a&bar=b&i=%d#hash", i))
 		assert.Contains(t, strBody, "[CONTENT_LENGTH]")
 		assert.Contains(t, strBody, "[REMOTE_ADDR]")
 		assert.Contains(t, strBody, "[REMOTE_PORT]")