将整个 URL 传递给 PHP 内置服务器中的 $_GET 变量
Pass entire URL to $_GET variable in PHP built-in server
我运行正在使用 PHP 内置服务器
php -S 127.0.0.1:80 index.php
我想将整个 URI 字符串传递给 $_GET 数组中名为 "url" 的字段。当我输入http://localhost/thisIsAURLString
时,我希望var_dump($_GET);
到returnarray(1) { ["url"]=> string(16) "thisIsAURLString" }
PHP 内置服务器有什么方法可以做到这一点吗?
生产环境中的web应用一般运行有nginx,配置文件如下图。此配置将 URL 传递给 $_GET 变量中的字段 "url",但我想对 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= 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;
}
}
编辑(某些上下文):
背景是我是很多学生的助教。有问题的 Web 应用程序目前在 nginx 和 运行s 的生产环境中顺利运行,但我所有的 ~100 名学生都需要在他们自己的计算机上本地下载和部署完全相同的 Web 应用程序。我无法更改 PHP 代码。部署应该尽可能简单和顺利,如果他们可以使用一些易于重现的 php 命令来做到这一点,那就太理想了。
我不确定你在问什么,但让我先说:
你在说什么"field"?
您是否要在何处打印 url?
"PHP built-in server" 是什么意思?
$_GET 是一个超全局变量,数组类型,由 PHP(一种服务器端脚本语言)填充。你所要做的就是调用它(例如 $_GET['link'] 而 link 可以是你想要的任何东西)或类似的东西(请检查 http://php.net/manual/en/reserved.variables.get.php)。您可以在任何 php 文件中使用它。
您可能需要查看全局 $_SERVER 数组。这包含 HTTP_HOST、QUERY_STRING、REQUEST_SCHEME 和 REQUEST_URI 数组键。这些可以用来assemble一个完整的url。试试 var_dump($_SERVER);查看所有键 => 值。
您是否有特殊原因需要使用 $_GET 全局数组?
希望对您有所帮助。
您可以 bootstrap 您的应用程序使用此脚本。将此片段保存到一个文件中,并将其设置为您正在使用的任何 Web 服务器软件的入口点。它将产生您要求的结果。
<?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';
?>
我运行正在使用 PHP 内置服务器
php -S 127.0.0.1:80 index.php
我想将整个 URI 字符串传递给 $_GET 数组中名为 "url" 的字段。当我输入http://localhost/thisIsAURLString
时,我希望var_dump($_GET);
到returnarray(1) { ["url"]=> string(16) "thisIsAURLString" }
PHP 内置服务器有什么方法可以做到这一点吗?
生产环境中的web应用一般运行有nginx,配置文件如下图。此配置将 URL 传递给 $_GET 变量中的字段 "url",但我想对 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= 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;
}
}
编辑(某些上下文):
背景是我是很多学生的助教。有问题的 Web 应用程序目前在 nginx 和 运行s 的生产环境中顺利运行,但我所有的 ~100 名学生都需要在他们自己的计算机上本地下载和部署完全相同的 Web 应用程序。我无法更改 PHP 代码。部署应该尽可能简单和顺利,如果他们可以使用一些易于重现的 php 命令来做到这一点,那就太理想了。
我不确定你在问什么,但让我先说:
你在说什么"field"?
您是否要在何处打印 url?
"PHP built-in server" 是什么意思?
$_GET 是一个超全局变量,数组类型,由 PHP(一种服务器端脚本语言)填充。你所要做的就是调用它(例如 $_GET['link'] 而 link 可以是你想要的任何东西)或类似的东西(请检查 http://php.net/manual/en/reserved.variables.get.php)。您可以在任何 php 文件中使用它。
您可能需要查看全局 $_SERVER 数组。这包含 HTTP_HOST、QUERY_STRING、REQUEST_SCHEME 和 REQUEST_URI 数组键。这些可以用来assemble一个完整的url。试试 var_dump($_SERVER);查看所有键 => 值。
您是否有特殊原因需要使用 $_GET 全局数组?
希望对您有所帮助。
您可以 bootstrap 您的应用程序使用此脚本。将此片段保存到一个文件中,并将其设置为您正在使用的任何 Web 服务器软件的入口点。它将产生您要求的结果。
<?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';
?>