PHP中没有RESOURCE常量,使用会报错;应通过__DIR__拼接相对路径获取资源路径,并用is_readable检查可读性,避免路径遍历风险。

PHP里没有 RESOURCE 常量
PHP 标准运行时环境不提供名为 RESOURCE 的内置常量。如果你在代码里写了 RESOURCE 并期望它返回资源路径,那会直接报错:Notice: Use of undefined constant RESOURCE 或更严的 Fatal error: Uncaught Error: Undefined constant 'RESOURCE'。
这个命名容易让人联想到 Java 的 getResource() 或 Android 的 R.drawable.xxx,但 PHP 没有这种抽象资源管理机制——它的“资源”(resource)类型指的是像数据库连接、文件句柄这类运行时句柄,不是路径字符串。
想获取当前脚本所在目录或项目资源路径?用 __DIR__ 和相对路径
绝大多数实际场景中,所谓“资源路径”其实是图片、配置、模板等文件相对于当前 PHP 文件或项目根目录的位置。正确做法是组合 __DIR__(当前文件所在目录的绝对路径)与相对路径:
-
__DIR__ . '/assets/images/logo.png'—— 同级assets目录下的图片 -
dirname(__DIR__) . '/config/database.php'—— 上级目录的配置文件 - 如果项目有统一入口(如
public/index.php),建议定义一个ROOT_DIR常量:define('ROOT_DIR', dirname(__DIR__));然后统一用ROOT_DIR . '/resources/lang/en.json'
require_once / include 路径错误?优先用 __DIR__ 拼接,别依赖 getcwd()
常见坑:用 require_once 'config/db.php' 依赖当前工作目录(getcwd()),但 CLI 下执行位置不同、Web 服务器路由重写、CLI 与 Web 环境混用时极易失败。
立即学习“PHP免费学习笔记(深入)”;
安全写法永远基于当前文件位置:
- ✅ 正确:
require_once __DIR__ . '/../config/db.php'; - ❌ 危险:
require_once 'config/db.php';(路径解析依赖运行时 cwd) - ⚠️ 不推荐:
require_once dirname(dirname(__FILE__)) . '/config/db.php';(__DIR__更简洁、性能略优)
需要动态加载资源(如多语言包、主题模板)?自己建映射表,别硬编码路径
当资源路径随环境/用户/语言变化时,硬拼路径很快失控。建议用简单映射 + 预检查:
$resource_map = [
'en' => __DIR__ . '/lang/en.json',
'zh' => __DIR__ . '/lang/zh.json',
];
$lang = $_GET['lang'] ?? 'en';
$resource_path = $resource_map[$lang] ?? $resource_map['en'];
if (!is_readable($resource_path)) {
throw new RuntimeException("Resource not found or unreadable: $resource_path");
}
注意点:
- 始终用
is_readable()检查,而不是只靠路径拼接 - 避免把用户输入(如
$_GET['lang'])直接拼进路径,防止路径遍历(../../../etc/passwd)——上面示例做了白名单控制 - 如果资源量大或需热更新,可考虑用 Composer 的
autoload.files或 PSR-4 自动加载规则替代手动 require
Paths 类或一组常量),后续维护成本越低。别让每个文件都自己算一遍“资源在哪”。



















