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

Ubuntu+Apache2+PHP环境下文件上传报错“无法写入目标文件”求助

文件上传功能失效排查与修复思路

问题描述

代码本应实现文件上传功能,但运行时显示Cannot write to destination file。服务器文件归属www-data,目标文件夹projects归属www-data且权限为0777,无重大错误提示。

原代码

<form name="submit" action="#" method="post" enctype="multipart/form-data">
    <input type="file" value="Choose file" id="pic" name="pic">
    <input type="submit" value="Upload" name="submit">
</form>

<?php
ini_set('display_startup_errors', 1).'<br>';
ini_set('display_errors', 1).'<br>';
error_reporting(-1).'<br>';

session_start();
$pic = $_FILES["pic"]["name"];
$folder = 'projects';
$path = $folder.'/'.$pic; 

if (!is_writeable($path)) {
   die("Cannot write to destination file");
}
else{
  move_uploaded_file($_FILES["pic"]["tmp_name"], $path);
  
  echo $path.'<br>';
  echo 'DONE';
}

print_r($_FILES);
?>

解决思路

1. 修正核心判断逻辑错误

当前代码直接判断目标文件路径是否可写,但上传前该文件大概率不存在,is_writeable()对不存在的文件会返回false,直接触发die。正确逻辑应先检查目标文件夹是否可写:

$folder = 'projects';
// 先确保文件夹存在且可写
if (!is_dir($folder)) {
    mkdir($folder, 0777, true); // 递归创建文件夹(如果需要)
}
if (!is_writeable($folder)) {
    die("目标文件夹不可写");
}

2. 增加请求类型判断

页面首次加载时(非POST请求),$_FILES["pic"]不存在,直接访问会引发未定义索引错误。需先判断是否为POST提交再执行上传逻辑:

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    session_start();
    // 后续上传代码放在这里
}

3. 修复表单action属性

action="#"可能导致提交后URL异常,影响PHP接收POST数据。建议显式指定当前脚本路径:

<form name="submit" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">

4. 检查目标文件是否已存在且权限异常

如果projects文件夹内已存在同名文件,且该文件的归属/权限不是www-data可写,也会触发错误。可添加文件存在判断,选择覆盖或重命名:

$pic = $_FILES["pic"]["name"];
$path = $folder . '/' . $pic;
// 如果文件已存在,重命名(示例:添加时间戳)
if (file_exists($path)) {
    $ext = pathinfo($pic, PATHINFO_EXTENSION);
    $filename = pathinfo($pic, PATHINFO_FILENAME);
    $path = $folder . '/' . $filename . '_' . time() . '.' . $ext;
}

5. 排查PHP上传配置限制

检查php.ini中的以下参数,确保未超出限制:

  • upload_max_filesize: 单个上传文件的最大大小
  • post_max_size: POST请求的最大数据量
  • max_execution_time: 脚本最大执行时间

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 04:06:18