将文件上传到PHP的Curl PUT请求

Sha*_*ali 5 php upload curl nginx put

我正在尝试使用HTTP PUT上传文件.
看了一下后,似乎$_FILES数组只有POST和multipart/form-data.使用PUT时,我需要手动读取php://input以获取数据.两种方法都不起作用.

我尝试了以下选项,并感谢您提供的任何提示:

curl --upload avatar.jpg http://api.test.com/user/dsadasdsa
curl -X PUT -F "filedata=@avatar.jpg" http://api.test.com/user/dsadasdsa
Run Code Online (Sandbox Code Playgroud)

我的PHP文件试图打印这个但返回一个空字符串:

echo file_get_contents("php://input");
Run Code Online (Sandbox Code Playgroud)

我开始认为这可能是一个Nginx问题,缺少PUT DELETE支持并安装了nginx-extras以及将以下内容添加到我的nginx配置中但不幸的是这也无济于事.

root /var/www/;

dav_methods PUT DELETE MKCOL COPY MOVE;

create_full_put_path on;
dav_access group:rw all:r;
Run Code Online (Sandbox Code Playgroud)

小智 3

我有一些调试的想法。

做 avar_dump(file_get_contents('php://input'));而不是 echo。根据参考资料

此函数可能返回布尔值 FALSE,但也可能返回计算结果为 FALSE 的非布尔值。请阅读有关布尔值的部分以获取更多信息。使用 === 运算符来测试该函数的返回值。

如果您得到bool(false)as 输出,则存在一些错误导致您无法阅读php://input- 很可能是 PHP 问题。如果您得到string(0) "",则(不再?)中什么都没有php://input,这更有可能是 nginx 问题。

另外,根据php://参考文献,您不能使用php://inputwith enctype="multipart/form-data"。你确定你不用那个吗?如果您更熟悉的话,您也可以尝试使用 HTML 文件。

默认情况下,您还可以检查错误日志/var/log/nginx/error.log。另外,检查 HTTP 响应代码。是200吗?如果没有,它是有用的代码吗?