PHP文件上传失败主因是表单未设enctype="multipart/form-data"、input name与$_FILES键不匹配或AJAX误用;move_uploaded_file()失败需查目录权限、临时路径及错误码;下载乱码须严格按序设置Content-Type、Content-Disposition(中文用rawurlencode)、Content-Length响应头且header前无任何输出。

PHP上传文件时$_FILES为空或报“Undefined index”
根本原因通常是表单未正确配置,而非PHP代码问题。检查以下三点:
• 表单 必须设置 enctype="multipart/form-data",缺了这个,浏览器根本不会发送文件字段
• 的 name 属性值(如 name="avatar")必须与 $_FILES 中的键完全一致,大小写敏感
• 不要通过 AJAX(如 fetch 未设 Content-Type)直接提交表单——原生表单提交才能触发 $_FILES 自动填充
move_uploaded_file()失败但没报错
常见于权限、路径或临时目录异常。关键排查点:
• 目标目录(如 /var/www/uploads/)必须存在且 Web 服务器用户(如 www-data 或 apache)有写权限
• 检查 upload_tmp_dir 是否被禁用或空间不足:运行 phpinfo() 查看 upload_tmp_dir 值,再确认该路径可写
• move_uploaded_file() 返回 false 时不抛异常,必须显式判断:
if (!move_uploaded_file($_FILES['file']['tmp_name'], $target_path)) {
error_log('move_uploaded_file failed: ' . $_FILES['file']['error']);
}• 错误码
$_FILES['file']['error'] 是整数,0 表示成功,1 或 2 表示超限(upload_max_filesize 或 MAX_FILE_SIZE),需同步调大 PHP 配置
下载文件时浏览器打开乱码或提示“无法下载”
核心是响应头缺失或冲突。必须按顺序输出:
• 先调用 header() 设置全部响应头,**不能有任何输出(包括空格、BOM、echo)在 header() 之前**
• 关键头三项缺一不可:
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . rawurlencode($filename) . '"');
header('Content-Length: ' . filesize($filepath));•
Content-Type 用 application/octet-stream 最安全;若用 text/plain 等类型,浏览器可能尝试渲染而非下载• 文件名含中文必须用
rawurlencode()(非 urlencode()),否则 Chrome/Firefox 解析失败• 输出文件内容前加
readfile($filepath),并确保无后续输出
并发下载多个文件时卡死或断连
PHP 默认阻塞式执行,大文件下载易超时。解决方向:
• 关闭输出缓冲:ob_end_clean() + ignore_user_abort(true) 防止用户关闭页面中断传输
• 设置脚本执行时间不限:set_time_limit(0)(注意 CLI 和 Web SAPI 行为差异)
• 更稳妥做法是不直接用 PHP 流式输出,改用 Web 服务器接管:将文件放在 Nginx/Apache 可访问路径,用 X-Accel-Redirect(Nginx)或 X-Sendfile(Apache)头委托服务器发送,PHP 只校验权限
SHOPEX简灰服装商城整站源码下载。 安装方法:1.解压上传程序至网站根目录.. 访问:域名/bak.(用户名:admin 密码:123456)2.进入帝国备份王后,配置数据库数据库信息.选择-www.taomoban.net目录.还原数据库.3.修改FTP目录下的config/config.phpphp 数据库连接信息.4.登陆网站后台--清空缓存..5.删除bak文件夹 后台:shopadm










