php默认不解析put请求的表单数据,需通过php://input手动读取原始请求体并依content-type类型(json或url编码)解析;文件上传需改用post+x-http-method-override头或base64编码传输。

PHP 默认不直接解析 PUT 请求的表单数据(如 application/x-www-form-urlencoded 或 multipart/form-data),因为 PHP 只自动解析 GET、POST 和 DELETE(仅限 CGI/SAPI 限制下)的原始请求体。但处理 JS 发起的 PUT 请求完全可行,关键是手动读取并解析原始输入流。
确认前端正确发送 PUT 请求
确保 JavaScript 使用 fetch 或 AJAX 正确设置方法和内容类型:
- 使用
method: 'PUT' - 设置
Content-Type头,常见为application/json或application/x-www-form-urlencoded - 避免在
FormData中直接用 PUT(部分浏览器不支持),推荐转为 JSON 或手动拼接 URL 编码字符串
在 PHP 中读取 PUT 数据
PHP 提供 php://input 流来获取原始请求体,适用于 PUT、PATCH 等非 POST 方法:
-
$rawData = file_get_contents('php://input');—— 获取原始字节 - 若前端发的是 JSON:
$data = json_decode($rawData, true); - 若前端发的是 URL 编码(如
name=John&age=25):parse_str($rawData, $data); - 注意:
$_POST在 PUT 请求中始终为空,不能依赖它
处理文件上传(需额外配置)
标准 PUT 不支持 multipart 文件上传(浏览器 fetch 不会自动构造 multipart boundary)。如需传文件:
- 改用
POST+ 自定义X-HTTP-Method-Override: PUT头(服务端识别后按 PUT 逻辑处理) - 或前端将文件转为 Base64 编码随 JSON 一起发送,PHP 中解码保存
- 不建议直接用 PUT 发送 raw multipart —— PHP 不会自动解析
$_FILES,且需手动解析 boundary,复杂易错
安全与兼容性提醒
实际部署时需注意:
- 确保 Web 服务器(如 Apache/Nginx)允许 PUT 方法(默认可能禁用)
- Apache 需启用
mod_rewrite或配置<limit put></limit>;Nginx 需在 location 块中显式添加limit_except或if ($request_method !~ ^(GET|HEAD|POST|PUT|DELETE|OPTIONS)$) { return 405; } - 验证
Content-Type头,防止误解析恶意数据 - 对
json_decode结果检查json_last_error(),避免空或无效 JSON 导致逻辑错误
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











