You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP如何判断文件是否在public_html目录以避免$_SERVER变量未定义报错

实现方案

CLI模式下运行Cron脚本时没有Web服务器注入的HTTP相关$_SERVER变量,因此会触发未定义数组键报错。你可以通过校验当前脚本的绝对路径是否属于public_html目录来控制代码执行逻辑,具体实现如下:

  1. 首先确认你服务器上public_html目录的绝对路径,常规虚拟主机的路径格式为/home/你的用户名/public_html,你可以在public_html下新建PHP文件执行echo realpath(__DIR__);获取准确路径。
  2. 用如下if判断包裹原有代码:
// 替换为你自己的public_html绝对路径
$public_html_root = '/home/xxx/public_html';
// 获取当前被执行脚本所在目录的绝对路径
$current_script_dir = realpath(__DIR__);

// PHP 8.0及以上版本可用str_starts_with判断前缀
if (str_starts_with($current_script_dir, $public_html_root)) {
    $page_url = "https://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
    $ip_address = $_SERVER['REMOTE_ADDR'];
}

如果你的PHP版本低于8.0,可替换为兼容写法:

// 路径前缀匹配,strpos返回0代表字符串出现在最开头
if (strpos($current_script_dir, $public_html_root) === 0) {
    $page_url = "https://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
    $ip_address = $_SERVER['REMOTE_ADDR'];
}

额外优化建议

为了避免极端场景下(比如public_html目录下的脚本也被CLI调用)出现报错,建议额外添加$_SERVER键存在性校验:

if (strpos($current_script_dir, $public_html_root) === 0 
    && isset($_SERVER['HTTP_HOST'], $_SERVER['REQUEST_URI'], $_SERVER['REMOTE_ADDR'])) {
    $page_url = "https://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
    $ip_address = $_SERVER['REMOTE_ADDR'];
}

内容的提问来源于stack exchange,提问作者user17213773

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 14:36:04