Передать весь URL-адрес в переменную $_GET на встроенном сервере PHP

Я запускаю встроенный сервер PHP с

php -S 127.0.0.1:80 index.php

Я хочу передать всю строку URI в поле с именем «url» в массиве $_GET. Когда я ввожу http://localhost/thisIsAURLString, я хочу, чтобы var_dump($_GET); возвращало array(1) { ["url"]=> string(16) "thisIsAURLString" } Есть ли способ сделать это с помощью встроенного сервера PHP?

Веб-приложение обычно запускается в производственной среде с помощью nginx и файла конфигурации, как показано ниже. Эта конфигурация передает URL-адрес в поле «url» в переменной $_GET, но я хочу сделать что-то подобное со встроенным сервером PHP.

server {

    listen 5001 default_server;
    listen [::]:5001 default_server ipv6only=on;
    root [myRoot];
    index index.php index.html index.htm;
    server_name [myServerName];


    location /uploads {
                try_files $uri $uri/ =404;
        }

        location /assets {
                try_files $uri $uri/ =404;
        }
    location / {
        try_files $uri $uri/ /index.php?$query_string;
        rewrite ^/(.*)$ /index.php?url=$1 last;
    }

    location ~ .php$ {

        fastcgi_split_path_info ^(.+.php)(/.+)$;
        fastcgi_index index.php;
        fastcgi_pass unix:/var/run/php/php7.0-fpm-01.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }
}

РЕДАКТИРОВАТЬ (некоторый контекст):

Контекст таков, что я ТА со многими студентами. Рассматриваемое веб-приложение в настоящее время находится в производственной среде с nginx и работает без сбоев, но всем моим ~ 100 студентам необходимо загрузить и развернуть одно и то же веб-приложение локально на своих компьютерах. Я не могу изменить код PHP. Развертывание должно быть как можно более простым и плавным, и если они могут сделать это с помощью какой-нибудь легко воспроизводимой php-команды, это было бы идеально.


person Magnus    schedule 07.02.2018    source источник


Ответы (3)


Вы можете загрузить свое приложение с помощью этого скрипта. Сохраните этот фрагмент в файл и установите его в качестве точки входа в любое программное обеспечение веб-сервера, которое вы используете. Это даст результаты, о которых вы просите.

<?php
   $root=__dir__;

   $uri=parse_url($_SERVER['REQUEST_URI'])['path'];
   $page=trim($uri,'/');  

   if (file_exists("$root/$page") && is_file("$root/$page")) {
       return false; // serve the requested resource as-is.
       exit;
   }

   $_GET['url']=$page;
   require_once 'index.php';
?>
person enielsen    schedule 19.07.2018

Я не уверен, что вы спрашиваете, но позвольте мне начать с:

О каком "поле" вы говорите?

Вы пытаетесь напечатать URL-адрес, где?

Что вы подразумеваете под «встроенным сервером PHP»?

$_GET — это суперглобальная переменная типа массива, которая заполняется PHP (языком сценариев на стороне сервера). Все, что вам нужно сделать, это назвать его (например, $_GET['link'], тогда как ссылка может быть чем угодно) или что-то подобное (пожалуйста, проверьте http://php.net/manual/en/reserved.variables.get.php). Вы можете использовать его в любом файле php.

person abr    schedule 07.02.2018
comment
Когда я ввожу http://localhost/thisIsAURLString, я хочу, чтобы var_dump($_GET); возвращало array(1) { ["url"]=> string(16) "thisIsAURLString" } - person Magnus; 07.02.2018
comment
Под встроенным сервером PHP я подразумеваю эту функцию: php.net/manual/ ru/features.commandline.webserver.php - person Magnus; 07.02.2018

Вы можете посмотреть на глобальный массив $_SERVER. Он содержит ключи массива HTTP_HOST, QUERY_STRING, REQUEST_SCHEME и REQUEST_URI. Их можно использовать для создания полного URL-адреса. Попробуйте var_dump($_SERVER); чтобы увидеть все значения key =>.

Есть ли особая причина, по которой вам нужно использовать глобальный массив $_GET?

Надеюсь это поможет.

person user9189147    schedule 07.02.2018
comment
Причина в том, что я не могу изменить базовый код PHP. Он написан так, как написан, и мне нужно использовать логику на стороне сервера для заполнения переменной $_GET. - person Magnus; 07.02.2018
comment
Ответ заключается в использовании суперглобального $_SERVER, в частности $_SERVER [REQUEST_URI] или $_SERVER['PATH_INFO'], который вернет /thisIsAURLString. Использование массива $_GET создает проблемы и должно быть проверено на конкретном наборе, так как он может быть перезаписан с помощью строки запроса. Например, localhost/thisIsAURLString?url=‹other путь›. PHP/сервер заполняет массив $_GET из строки запроса, что может представлять проблему. Конечно, вы можете использовать $_SERVER в своем PHP-коде, чтобы установить $_GET['url'] = $_SERVER['REQUEST_URI'], но это, вероятно, не очень хорошая практика. - person user9189147; 07.02.2018