PHP+Ajax异步加载Uhome.php输出服务端源码而非执行结果求助
问题根因
你在ajax.php中读取Uhome.php时使用了file_get_contents()直接读取本地文件,该函数仅会返回文件的原始源码,不会触发PHP服务端的解析执行。你加载个人页v时使用的自定义url_get_contents()走CURL发起HTTP请求,才会让服务器执行PHP代码返回渲染后的HTML,两处逻辑不一致导致了问题。
修复步骤
1. 补全ajax.php基础配置
在ajax.php最顶部添加以下代码,开启session并拼接站点根URL:
session_start(); if (isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') { $ssl = 'https'; } else { $ssl = 'http'; } $app_url = $ssl . "://" . $_SERVER['HTTP_HOST'];
2. 修改Uhome加载逻辑
把ajax.php中对应Uhome的分支代码里的file_get_contents替换为url_get_contents,请求Uhome的HTTP访问地址:
else if($call_type == "./../Uhome") { echo json_encode(array( 'status'=>'success', 'title'=> 'Home Page', 'description' => 'Home description', 'url' => $call_type.'.php', 'data'=> url_get_contents($app_url . '/Uhome.php'), )); }
3. 修复settings.php语法错误
你当前settings.php中判断HTTPS的else分支缺少闭合的大括号,会触发PHP语法报错,补上即可:
else { $ssl = 'http'; } // 补全这个大括号 $app_url = ($ssl) . "://".$_SERVER['HTTP_HOST'] . (dirname($_SERVER["SCRIPT_NAME"]) == DIRECTORY_SEPARATOR ? "" : "/") . trim(str_replace("\\", "/", dirname($_SERVER["SCRIPT_NAME"])), "/");
额外注意
如果你的Uhome.php不在站点根目录,调整url_get_contents里的路径即可,确保该路径直接在浏览器访问时能正常打开Uhome页面。
内容的提问来源于stack exchange,提问作者Techdude
相关产品推荐
相关产品推荐

