PHP生成文件如何指定保存路径到上层目录diagramasBPMN?
问题解决方法
一、修正JS端错误
- 路径错误:路径开头的
/代表站点根目录,开头加/后后续的../相对路径跳转不会生效,要使用相对路径请去掉开头的/,根据你JS文件和savel.php的实际相对位置调整路径层级 - 语法错误:原
$.post的参数对象未闭合,回调函数错误放在了参数对象内部
修正后JS代码示例:
// 请根据实际文件相对位置调整savel.php的路径,此处示例为JS文件所在目录往上两层找savel.php $.post('../../savel.php', { diagramaXml: xml, idDiagrama: diagramaID }, function(data) { console.log('success'); });
二、修正PHP端错误
- 语法错误:
file_put_contents第一个参数是字符串类型,必须用引号包裹 - 路径错误:
/diagramasBPMN/代表服务器系统根目录下的diagramasBPMN文件夹,不是你项目的上层目录,要根据savel.php和目标目录的相对位置写路径,比如savel.php所在目录的上层有diagramasBPMN文件夹,就用../diagramasBPMN/ - 安全问题:直接使用
$_POST['idDiagrama']拼接路径会存在目录遍历攻击风险,需用basename()过滤文件名 - 权限检查:要确保
diagramasBPMN目录的权限允许Web服务运行用户(如www-data、apache、nginx等)写入,Linux环境可执行sudo chmod 755 目录路径或者sudo chown -R www-data:www-data 目录路径授权
修正后PHP代码示例:
<?php // 1. 过滤文件名,防止目录遍历 $fileName = basename($_POST['idDiagrama']); // 2. 拼接正确的目标路径,此处示例为savel.php所在目录的上层的diagramasBPMN目录 $savePath = '../diagramasBPMN/' . $fileName; // 3. 写入内容,加错误判断 $saveResult = file_put_contents($savePath, $_POST['diagramaXml']); if ($saveResult !== false) { die('file has been saved'); } else { die('save failed, please check directory permission or path'); } ?>
额外排查项
- 如果使用绝对路径更稳妥,可以用
__DIR__常量获取当前savel.php所在目录的绝对路径,再拼接上层目录:$savePath = __DIR__ . '/../diagramasBPMN/' . $fileName; - 可先在PHP中输出
$savePath打印实际生成的路径,确认和你预期的目标路径一致
内容的提问来源于stack exchange,提问作者ctovelox
相关产品推荐
相关产品推荐

