📌  相关文章
📜  如何在 php 中执行不带扩展名的 php 文件(1)

📅  最后修改于: 2023-12-03 15:08:44.301000             🧑  作者: Mango

如何在 PHP 中执行不带扩展名的 PHP 文件

默认情况下,PHP 只能执行扩展名为 .php 的 PHP 文件。但是有时候我们可能需要执行不带扩展名的 PHP 文件,比如 index、router 等等。下面介绍几种方法来实现不带扩展名的 PHP 文件的执行。

方法 1: 配置 web 服务器

如果是在 web 服务器上运行 PHP 代码,可以在 web 服务器的配置中添加以下内容:

Apache

在 Apache 配置文件(如 httpd.conf)中添加以下内容:

<FilesMatch "^(?!.*\.php$).*$">
    SetHandler application/x-httpd-php
</FilesMatch>

这将会把所有不带 .php 扩展名的文件都处理为 PHP 文件。

Nginx

在 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 文件。

方法 2: 自定义处理程序

在 PHP 中,我们可以使用 auto_prepend_fileauto_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 文件进行预处理,如果文件不存在,将会忽略。

方法 3: 手动处理

最后一个方法是手动处理。我们可以在 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 文件的执行的方法。根据具体的情况选择合适的方法来实现即可。