0

I've already looked at the proposed solutions on stackoverflow and I didn't find anything that solved my problem:

The problem is that the PATH_INFO is still empty

The request it's ok like this: route-php.local/show

$_SERVER['REQUEST_URI']

/home/niko/web/www/route-php.local/public/index.php:46:
array (size=42)
....
'PATH_INFO' => string '' (length=0)
'QUERY_STRING' => string '' (length=0)
....
/home/niko/web/www/route-php.local/public/index.php:51:
array (size=1)
'_route' => string 'show' (length=4)

but it's not good with this request: route-php.local/show?p=test

/home/niko/web/www/route-php.local/public/index.php:46:
array (size=42)
....
'PATH_INFO' => string '' (length=0)
'QUERY_STRING' => string 'p=test' (length=6)
....

The path is not recognized because it is empty...? Why ?

$_SERVER['PATH_INFO']

with: route-php.local/show

/home/niko/web/www/route-php.local/public/index.php:46:
array (size=42)
....
'PATH_INFO' => string '' (length=0)
'QUERY_STRING' => string '' (length=0)
....
/home/niko/web/www/route-php.local/public/index.php:51:
array (size=1)
'_route' => string 'index' (length=4)

Here's my setup :

PHP-7.4 with composer and I installed symfony/routing

https://packagist.org/packages/symfony/routing

/etc/php/7.3/fpm/php.ini
/etc/php/7.3/cli/php.ini
/etc/php/7.3/apache2/php.ini
    
cgi.fix_pathinfo=1  # And I tried   cgi.fix_pathinfo=0
/etc/nginx/sites-available/route-php.local

location / {
    try_files $uri /index.php;
}

location ~ [^/]\.php(/|$) { 
        root /var/www/localhost;
        fastcgi_pass unix:/run/php/php7.3-fpm.sock;
        include snippets/fastcgi-php.conf;
}
snippets
/etc/nginx/snippets/fastcgi-php.conf

fastcgi_split_path_info ^(.+?\.php)(/.*)$;
try_files $fastcgi_script_name =404;
set $path_info $fastcgi_path_info;
fastcgi_param   SCRIPT_FILENAME         $document_root$fastcgi_script_name;
fastcgi_param   SCRIPT_NAME             $fastcgi_script_name;
fastcgi_param   PATH_INFO               $path_info;  # or fastcgi_param PATH_INFO $fastcgi_path_info
fastcgi_index index.php;
include fastcgi.conf;

I tried several solutions but nothing works ....

example config Symfony : https://symfony.com/doc/current/setup/web_server_configuration.html#nginx

My code PHP:

## index.php ##

use Symfony\Component\Routing\Matcher\UrlMatcher;
use Symfony\Component\Routing\RequestContext;
use Symfony\Component\Routing\Route;
use Symfony\Component\Routing\RouteCollection;

require __DIR__ . '/vendor/autoload.php';

$listeRoute = new Route("/");
$createRoute = new Route("/create");
$showRoute = new Route("/show");

// COLLECTION ROUTES
$collection = new RouteCollection();
$collection->add("list", $listeRoute);
$collection->add("create", $createRoute);
$collection->add("show", $showRoute);

//MATCHER
$matcher = new UrlMatcher($collection, new RequestContext());

var_dump($_SERVER);

$pathInfo = $_SERVER['PATH_INFO'] ?? '/';

$resultat = $matcher->match($pathInfo);
var_dump($resultat);
die();

another Example:

php -
    |-index.php
    |-text.php
#index.php
var_dump($_SERVER['PATH_INFO']);
echo "index.php";
#test.php
var_dump($_SERVER['PATH_INFO']);
echo "test.php";
cgi.fix_pathinfo=1
location / {try_files $uri $uri/ /$uri.php$is_args$args;}
location ~ \.php {
  include snippets/fastcgi-php.conf;
  fastcgi_pass unix:/run/php7.3-fpm.sock
}
#localhost/index
string(0) ""
index.php

#localhost/test
string(0) ""
test.php

Why it behaves like this ?

I would like this behavior

<?php

echo "PATH INFO => ";
var_dump($_SERVER['PATH_INFO']);

echo "<br>";

echo "REQUEST_URI => ";
var_dump($_SERVER['REQUEST_URI']);


// redefine the variable PATH_INFO
$_SERVER['PATH_INFO'] = explode('?', $_SERVER['REQUEST_URI']);

echo "<br>";
echo "NEW - PATH INFO => ";
var_dump($_SERVER['PATH_INFO'][0]);

echo "<br>";
echo "index.php";
# https://localhost/index?test=test

PATH INFO => string(0) ""
REQUEST_URI => string(16) "/index?test=test"
NEW - PATH INFO => string(6) "/index"
index.php
4
  • The path info is that part of a URI that follows .php. Your requested URI does not contain a .php so there is no path info. In fact, the URI is internally redirected to /index.php which also does not contain a path info. Commented Dec 17, 2020 at 8:11
  • I only have an index.php file Commented Dec 20, 2020 at 19:55
  • 1
    I think this is an XY problem. What are you trying to achieve with the PATH_INFO? Commented Dec 20, 2020 at 20:40
  • @JulienB. I answered you on the post and I just installed on the server: nginx, apache2 (listen 8080), php, php-fpm, git, vim, and nothing else. Commented Dec 21, 2020 at 8:52

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.