使用file_put_contents写入PHP文件仅返回1、内容写入失败如何解决?
问题成因
你代码中file_put_contents($php_name, include "nav.php");的写法存在逻辑错误:
PHP的include语句的核心作用是引入并执行目标文件内容,执行成功时返回值为整数1,并不会把nav.php的原始代码或者运行输出的内容作为字符串返回。最终你写入新文件的内容就是include执行成功的返回值1,就是你观测到的现象的根本原因。
修复方案
根据你的实际需求选择对应写法:
- 如果你需要把
nav.php的原始代码原封不动写入新文件,直接读取文件内容写入即可:
file_put_contents($php_name, file_get_contents("nav.php"));
- 如果你需要把
nav.php运行后输出的动态内容写入新文件,需要用输出缓冲捕获运行结果再写入:
// 开启输出缓冲区 ob_start(); include "nav.php"; // 取出缓冲区内容并清空缓冲区 $nav_run_result = ob_get_clean(); // 写入内容到目标文件 file_put_contents($php_name, $nav_run_result);
安全提示
你当前直接使用用户传入的$_REQUEST["php_name"]作为写入文件名,存在严重的路径穿越安全漏洞:恶意用户可以构造../../webshell.php这类参数值,向服务器任意可写目录写入恶意脚本,建议对文件名做严格的格式校验、限制写入路径到指定目录,禁止传入路径分隔符等特殊字符。
内容的提问来源于stack exchange,提问作者GrafYan
相关产品推荐
相关产品推荐

