PHP技术问答:如何获取主文件中被引入文件的文件名?
解决PHP中获取被引入文件文件名的问题
这问题我之前做项目时也碰到过!$_SERVER["PHP_SELF"]确实只会返回当前执行的主脚本文件名(也就是你这里的particular.php),因为它是基于Web服务器接收请求的入口文件生成的。要获取被include的文件本身的文件名,得用PHP的魔术常量__FILE__来实现,下面给你几种实用的方案:
方案1:直接在被引入文件中获取
在family.php里直接使用__FILE__常量,它会返回当前文件的完整绝对路径,再配合basename()函数就能提取纯文件名:
// family.php 中的代码 $includedFileName = basename(__FILE__); // 要是只需要不带后缀的文件名,可以用 basename(__FILE__, '.php') // 后续重定向时直接用这个变量即可 header("Location: $includedFileName");
这个方法最直接,因为__FILE__不管被引入到哪个主文件里,始终指向它所在的那个文件本身,完全不受主文件影响。
方案2:在主文件中获取被引入文件的文件名
如果需要在主文件particular.php中拿到被引入文件的名字,可以在被引入文件里定义一个变量,主文件引入后直接调用:
// family.php $currentIncludedFile = basename(__FILE__); // particular.php include 'family.php'; // 现在 $currentIncludedFile 就是 family.php,直接用它做重定向 header("Location: $currentIncludedFile");
方案3:批量处理多个被引入文件
如果你有很多需要自动重定向的被引入文件,可以在每个被引入文件里封装一个通用函数,避免重复代码:
// 每个被引入文件(比如 family.php、other.php)的顶部添加这个函数 function getThisIncludedFileName() { return basename(__FILE__); } // 在主文件中使用 include 'family.php'; header("Location: " . getThisIncludedFileName()); // 重定向到 family.php include 'other.php'; header("Location: " . getThisIncludedFileName()); // 重定向到 other.php
简单总结下:$_SERVER["PHP_SELF"]是入口文件的标识,而__FILE__是单个PHP文件自身的标识,后者正是你需要的工具~
内容的提问来源于stack exchange,提问作者tapaljor
相关产品推荐
相关产品推荐

