Ubuntu16服务器图片上传失败求助:HTML表单与PHP代码排查
图片上传失败的问题排查与修复
1. 核心变量名不匹配(最直接原因)
你的HTML表单中文件输入框的name属性是myfile:
<input id="fileupload" name="myfile" type="file">
但PHP代码中却用$_FILES['file']来获取文件,变量名完全不对应,导致无法读取上传的文件数据。
修改PHP代码,把所有$_FILES['file']替换为$_FILES['myfile']:
<html> <body> <?php $filename = $_FILES['myfile']['name']; $location = "./uploads/".$filename; if( move_uploaded_file($_FILES['myfile']['tmp_name'], $location)){ echo '上传成功!'; }else{ echo '上传失败!'; } ?> </body> </html>
2. 权限补充检查
虽然你执行了chmod 755 /var/www/html/uploads -R,但还需要确保uploads目录的所有者是Web服务器的运行用户(Ubuntu下Apache/Nginx默认运行用户为www-data),否则即使权限为755,Web进程也可能没有写入权限。执行以下命令修正:
chown www-data:www-data /var/www/html/uploads -R
3. 进阶错误排查建议
如果修改后仍失败,建议添加错误排查代码,查看具体的上传错误信息:
<html> <body> <?php // 打印完整上传数组,查看错误详情 print_r($_FILES['myfile']); // 根据错误码输出对应信息 if ($_FILES['myfile']['error'] !== UPLOAD_ERR_OK) { $error_map = [ 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扩展阻止了文件上传' ]; echo '上传错误:' . $error_map[$_FILES['myfile']['error']]; } else { $filename = $_FILES['myfile']['name']; $location = "./uploads/".$filename; if( move_uploaded_file($_FILES['myfile']['tmp_name'], $location)){ echo '上传成功!'; }else{ echo '文件移动失败!'; } } ?> </body> </html>
同时检查服务器php.ini配置,确保:
upload_max_filesize和post_max_size设置足够大(例如upload_max_filesize = 10M)file_uploads = On(已开启文件上传功能)
内容的提问来源于stack exchange,提问作者Back2Basics
相关产品推荐
相关产品推荐

