Ubuntu 17.10下LAMP环境PHP无法创建文件问题求助
解决PHP无法创建/写入文件的问题
先帮你梳理下问题,从代码错误到权限配置逐一排查:
1. 先修正代码里的致命错误
你代码里的alert()是JavaScript函数,PHP根本不认识这个语法,会直接导致脚本报错终止;另外代码末尾的fclose($...是截断状态,语法不完整,这两个问题会让你的代码根本执行不到文件写入环节。
给你一个修正后的调试版本:
<?php // 先判断表单是否提交 if(isset($_POST['statusFormSubmit']) && $_POST['statusFormSubmit'] === "Submit") { // PHP里用var_dump做调试输出,更直观 var_dump("进入PHP处理逻辑"); $varStatus = $_POST['statusInput']; var_dump("获取到的输入值:", $varStatus); $path = $_SERVER['DOCUMENT_ROOT'] . '/mydata.csv'; var_dump("目标文件路径:", $path); // 先检查文件所在目录是否存在,不存在就创建 $dir = dirname($path); if(!is_dir($dir)) { mkdir($dir, 0755, true); // 递归创建多级目录 var_dump("已自动创建目录:", $dir); } // 尝试打开文件并写入 $fs = fopen($path, "a"); if($fs) { fwrite($fs, $varStatus . ", " . $varStatus . "\n"); fclose($fs); var_dump("文件写入成功!"); } else { // 输出具体错误信息,方便排查 var_dump("文件打开失败,错误详情:", error_get_last()); } } ?>
2. 验证文件路径的准确性
先确认$_SERVER['DOCUMENT_ROOT']的真实值——可以单独写个测试脚本:
<?php echo "当前网站根目录:" . $_SERVER['DOCUMENT_ROOT']; ?>
Ubuntu的LAMP默认根目录是/var/www/html,那你的目标文件路径就是/var/www/html/mydata.csv,要确保这个路径对应的目录确实存在。
3. 严格检查目录/文件的权限与所有权
即使你说已经设置了权限,还是建议手动验证:
- 查看网站根目录的权限和归属:
理想状态是所有者为ls -ld /var/www/htmlwww-data:www-data(Apache的运行用户),目录权限至少是755(所有者可读可写可执行,其他用户可读可执行)。 - 如果文件已经存在,检查文件权限:
确保ls -l /var/www/html/mydata.csvwww-data用户有写入权限(权限位包含w)。 - 如果文件不存在,给根目录设置正确的权限:
(别用sudo chown www-data:www-data /var/www/html sudo chmod 755 /var/www/html777权限,非常不安全)
4. 排查PHP的安全限制
有些PHP配置会阻止文件操作:
- 创建
phpinfo.php文件(内容为<?php phpinfo(); ?>),访问后搜索open_basedir,如果有值,确保你的目标文件路径在允许的目录范围内。 - 查看
disable_functions项,确认没有禁用fopen、fwrite、mkdir这些文件操作函数(默认不会禁用)。
5. 查看错误日志定位问题
如果以上步骤都没解决,直接看Apache的错误日志,能拿到最准确的报错信息:
sudo tail -f /var/log/apache2/error.log
执行你的表单提交操作后,日志里会明确告诉你是权限不足、路径不存在还是其他问题。
内容的提问来源于stack exchange,提问作者Gauthier
相关产品推荐
相关产品推荐

