📅  最后修改于: 2023-12-03 15:08:44.301000             🧑  作者: Mango
默认情况下,PHP 只能执行扩展名为 .php 的 PHP 文件。但是有时候我们可能需要执行不带扩展名的 PHP 文件,比如 index、router 等等。下面介绍几种方法来实现不带扩展名的 PHP 文件的执行。
如果是在 web 服务器上运行 PHP 代码,可以在 web 服务器的配置中添加以下内容:
在 Apache 配置文件(如 httpd.conf)中添加以下内容:
<FilesMatch "^(?!.*\.php$).*$">
SetHandler application/x-httpd-php
</FilesMatch>
这将会把所有不带 .php 扩展名的文件都处理为 PHP 文件。
在 Nginx 的配置文件中添加以下内容:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.(php|inc)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
这将会把所有不带 .php 扩展名的文件都处理为 index.php 文件。
在 PHP 中,我们可以使用 auto_prepend_file
和 auto_append_file
来对 PHP 脚本进行预处理和后处理。我们可以通过设置 auto_prepend_file
来自定义 PHP 处理程序,以处理不带扩展名的 PHP 文件。
以下是一个示例 PHP 处理程序:
<?php
$self = substr($_SERVER['PHP_SELF'], 1);
$file = __DIR__.'/'.$self;
if (is_file($file)) {
set_include_path(get_include_path().':'.__DIR__);
require $self;
}
将以上代码保存为 php-handler.php
文件。然后在 PHP 配置文件中将 auto_prepend_file
设置为该文件的路径:
auto_prepend_file = "/path/to/php-handler.php"
这将会对所有 PHP 文件进行预处理,如果文件不存在,将会忽略。
最后一个方法是手动处理。我们可以在 PHP 文件的开头加上以下代码:
$path = __DIR__.'/'.$_SERVER['SCRIPT_NAME'];
if (file_exists($path)) {
require $path;
} else {
header('HTTP/1.1 404 Not Found');
echo '404 Not Found';
}
这将会检查请求的文件是否存在,如果存在就执行该文件,否则返回 404 错误。
以上是三种实现不带扩展名的 PHP 文件的执行的方法。根据具体的情况选择合适的方法来实现即可。