You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PHP本地服务器大文件上传报错问题求助

解决PHP大文件上传失败及代码错误问题

一、先修复代码中的核心错误

你的两个报错都是代码逻辑或路径问题导致的,先解决这些才能顺利排查上传大小的限制问题:

1. 修复「Undefined index: temp」错误

这个错误说明你代码里引用的$_FILES['temp']不存在——大概率是文件上传失败时(比如超过大小限制),PHP直接丢弃了上传请求,导致这个数组索引没生成。你需要先严格检查文件上传的状态,再进行后续操作:

// 注意:这里的'temp'要和你HTML表单中file输入框的name属性保持一致!
$fileInputName = 'temp';

// 先判断是否有上传请求
if (!isset($_FILES[$fileInputName])) {
    die("未选择上传文件,或上传请求无效!");
}

// 获取上传错误码,针对性处理
$uploadError = $_FILES[$fileInputName]['error'];
if ($uploadError !== UPLOAD_ERR_OK) {
    $errorMsg = match($uploadError) {
        UPLOAD_ERR_INI_SIZE => "文件大小超过了php.ini中upload_max_filesize的限制",
        UPLOAD_ERR_FORM_SIZE => "文件大小超过了表单中MAX_FILE_SIZE的限制",
        UPLOAD_ERR_PARTIAL => "文件仅完成部分上传",
        UPLOAD_ERR_NO_FILE => "未选择任何文件",
        UPLOAD_ERR_NO_TMP_DIR => "服务器缺少临时文件存储目录",
        UPLOAD_ERR_CANT_WRITE => "无法将文件写入磁盘,请检查目录权限",
        UPLOAD_ERR_EXTENSION => "PHP扩展阻止了本次文件上传",
        default => "上传失败,错误代码:$uploadError"
    };
    die($errorMsg);
}

2. 修复「file_get_contents找不到文件」错误

你报错中的路径C:\wamp64\www\project\project明显是路径拼接重复了项目目录。另外,不建议用file_get_contents读取临时文件再写入,PHP官方推荐用move_uploaded_file()处理上传文件,更安全高效:

// 获取当前工作目录(即C:\wamp64\www\project)
$targetDir = getcwd();
// 获取上传文件的原始文件名(自动过滤非法路径)
$fileName = basename($_FILES[$fileInputName]['name']);
// 拼接最终保存路径(用DIRECTORY_SEPARATOR适配Windows路径)
$targetPath = $targetDir . DIRECTORY_SEPARATOR . $fileName;

// 移动临时文件到目标路径
if (move_uploaded_file($_FILES[$fileInputName]['tmp_name'], $targetPath)) {
    echo "文件上传成功,保存路径:$targetPath";
} else {
    die("无法将临时文件移动到目标目录,请检查目录读写权限!");
}

二、确保php.ini配置真正生效

你修改了php.ini但无效,大概率是改了错误的配置文件没重启Apache服务

1. 找到Apache正在使用的php.ini

创建一个info.php文件,内容如下:

<?php phpinfo(); ?>

访问这个页面,找到「Loaded Configuration File」项,这就是Apache实际加载的php.ini绝对路径,必须修改这个文件,而不是WAMP目录下的其他php.ini副本。

2. 修改关键配置项

打开正确的php.ini,调整以下参数(数值根据你的需求设置,示例为10MB):

; 单个上传文件的最大允许大小
upload_max_filesize = 10M
; POST请求的总大小限制(必须大于upload_max_filesize,因为POST还包含其他表单数据)
post_max_size = 12M
; 脚本最长执行时间(大文件上传需要更长时间,默认30秒可能不够)
max_execution_time = 300
; 处理输入数据的最长时间
max_input_time = 300
; 脚本可用的最大内存
memory_limit = 64M

3. 重启Apache服务

修改完php.ini后,一定要重启WAMP中的Apache服务,否则配置不会生效。

三、检查其他可能的限制

1. HTML表单中的MAX_FILE_SIZE

如果你的表单里有<input type="hidden" name="MAX_FILE_SIZE" value="2097152">,这个值是2MB(2097152字节),需要把它改成和php.ini中upload_max_filesize对应的大小,比如10MB就是10485760

2. Apache的LimitRequestBody配置

检查Apache的httpd.conf或虚拟主机配置文件,确保没有设置过小的请求体限制:

; 设置为0表示不限制,或设置足够大的字节数(10MB=10485760)
LimitRequestBody 0

修改后同样需要重启Apache。

内容的提问来源于stack exchange,提问作者H.Banik

火山引擎 最新活动