PHP中的SERVER全局变量中如何准确获取实际请求的文件名?

8084次阅读 592人点赞 作者: WuBin 发布时间: 2025-11-13 14:30:04
扫码到手机查看

由一个动态引入想到的

事情起因是我想要做一个动态的引入。

// 使用 SCRIPT_FILENAME 获取当前执行的文件名,更可靠
$requestFilename = basename($_SERVER['REQUEST_URI']); 
$requireVolcFiles = [
    'get-image-result.php',
    'submit-image-task.php'
];

if (in_array($requestFilename, $requireVolcFiles)) {
    require_once(__DIR__ . '/libs/volcJimeiAI.class.php'); 
}

require_once(__DIR__ . '/libs/UserManager.class.php');

header("content-type:application/json;charset=utf-8");

这里我想针对某些特定的文件,引入单独的类。这里我使用的是$_SERVER['REQUEST_URI'],但是经过查询发现一个严重问题:

basename($_SERVER['REQUEST_URI'])能准确获取文件名吗?

答案是:不一定,这取决于你的服务器配置。

  • 情况一:URL 重写(如 Apache 的 mod_rewrite 或 Nginx)如果你的网站使用了 URL 重写(例如,将/user/123这样的美化 URL 指向index.php),那么$_SERVER['REQUEST_URI']的值会是/user/123,而basename()的结果会是123,这显然不是你想要的。在这种情况下,你的代码会失效。

  • 情况二:直接访问 PHP 文件如果你的 URL 是直接指向 PHP 文件的,例如http://example.com/get-image-result.php?param=1,那么$_SERVER['REQUEST_URI']的值是/get-image-result.php?param=1basename()函数会正确地返回get-image-result.php

更可靠的方法:使用$_SERVER['SCRIPT_FILENAME']

$_SERVER['SCRIPT_FILENAME']会返回当前正在执行的脚本的绝对路径,例如/var/www/html/get-image-result.php。无论是否开启 URL 重写,它都能准确指向正在运行的文件。配合basename()使用,是获取当前脚本文件名的最佳实践

最终修改如下:

// 使用 SCRIPT_FILENAME 获取当前执行的文件名,更可靠
$requestFilename = basename($_SERVER['SCRIPT_FILENAME']); 

$requireVolcFiles = [
    'get-image-result.php',
    'submit-image-task.php'
];

if (in_array($requestFilename, $requireVolcFiles)) {
    require_once(__DIR__ . '/libs/volcJimeiAI.class.php'); 
}

require_once(__DIR__ . '/libs/UserManager.class.php');

header("content-type:application/json;charset=utf-8");
点赞 支持一下 觉得不错?客官您就稍微鼓励一下吧!
关键词:REQUEST_URI,script_FILENAME,$_SERVER['script_FILENAME'],$_SERVER['REQUEST_URI']),basename
推荐阅读
  • python基础-操作列表和迭代器

    python基础笔记-操作列表和迭代器的相关方法

    6708次阅读 164人点赞 发布时间: 2024-06-13 13:26:27 立即查看
  • uniapp实现被浏览器唤起的功能

    当用户打开h5链接时候,点击打开app若用户在已经安装过app的情况下直接打开app,若未安装过跳到应用市场下载安装这个功能在实现上主要分为两种场景,从普通浏览器唤醒以及从微信唤醒。

    12221次阅读 828人点赞 发布时间: 2022-12-14 16:34:53 立即查看
  • PHP

    【正则】一些常用的正则表达式总结

    在日常开发中,正则表达式是非常有用的,正则表达式在每个语言中都是可以使用的,他就跟JSON一样,是通用的。了解一些常用的正则表达式,能大大提高你的工作效率。

    15425次阅读 646人点赞 发布时间: 2021-10-09 15:58:58 立即查看
  • 【中文】免费可商用字体下载与考证

    65款免费、可商用、无任何限制中文字体打包下载,这些字体都是经过长期验证,经得住市场考验的,让您规避被无良厂商起诉的风险。

    16367次阅读 1304人点赞 发布时间: 2021-07-05 15:28:45 立即查看
  • Vue

    Vue3开发一个v-loading的自定义指令

    在vue3中实现一个自定义的指令,有助于我们简化开发,简化复用,通过一个指令的调用即可实现一些可高度复用的交互。

    18720次阅读 1503人点赞 发布时间: 2021-07-02 15:58:35 立即查看
  • JS

    关于手机上滚动穿透问题的解决

    当页面出现浮层的时候,滑动浮层的内容,正常情况下预期应该是浮层下边的内容不会滚动;然而事实并非如此。在PC上使用css即可解决,但是在手机端,情况就变的比较复杂,就需要禁止触摸事件才可以。

    16901次阅读 1366人点赞 发布时间: 2021-05-31 09:25:50 立即查看
  • Vue

    Vue+html2canvas截图空白的问题

    在使用vue做信网单页专题时,有海报生成的功能,这里推荐2个插件:一个是html2canvas,构造好DOM然后转canvas进行截图;另外使用vue-canvas-poster(这个截止到2021年3月...

    32715次阅读 2567人点赞 发布时间: 2021-03-02 09:04:51 立即查看
  • Vue

    vue-router4过度动画无效解决方案

    在初次使用vue3+vue-router4时候,先后遇到了过度动画transition进入和退出分别无效的情况,搜遍百度没没找到合适解决方法,包括vue-route4有一些API都进行了变化,以前的一些操...

    28566次阅读 2199人点赞 发布时间: 2021-02-23 13:37:20 立即查看
交流 收藏 目录