我正在尝试通过命令行发送cURL请求。以下是我的要求
curl -i http://localhost/test/index.php
-X POST
-F "name=file.png"
-F "content=@/var/www/html/test/file.png"
我遇到的问题是文件没有随请求一起发送。该名称被发送正常但不是文件。任何人都可以看到我做错了什么吗?
我已经检查了文件的权限,因为我认为这可能是问题,但它们很好
后端是使用PHP Slim框架编写的,我正在执行以下操作$app->request->post('content');
答案 0 :(得分:9)
如果您希望能够使用$app->request->post('content');
访问文件的内容,则您的curl请求必须使用<
代替@
content
字段,< / p>
curl -i http://localhost/test/index.php -X POST -F "name=file.png" \
-F "content=</var/www/html/test/file.png"
来自curl的联机帮助页:
迫使 'content'部分为文件,文件名前缀为@符号。要从文件中获取内容部分,请在文件名前加上符号&lt;前缀。 @和&lt;之间的区别然后,@使文件作为文件上传附加在帖子中, 而&lt;创建一个文本字段,然后从文件中获取该文本字段的内容。
使用@
,您将该字段标记为文件。从技术上讲,如果您感兴趣,这会在字段RFC 2388中添加Content-Disposition
标头。 PHP检测到并自动将字段存储在$_FILES
而不是$_POST
中,正如RaphaëlMalié在评论中所述,这就是您无法使用$app->request->post
访问内容的原因。
但是,如果您想支持使用浏览器的$_FILES
元素和表单进行上传,则应考虑在后端切换到使用<input type=file>
。那些总是设置Content-Disposition
标题。
答案 1 :(得分:0)
php版本5.2.6及更低版本中有bug。验证您的PHP版本并最新测试。这可能是问题所在。
答案 2 :(得分:0)
@Bender,使用符号 @ 但对您的PHP代码进行更改,以便您使用 $ _ FILES 变量。那会有所帮助。 确保为cURL提供完全绝对路径。否则你会收到错误。
请在此处提及相同类型的SO问题:File Upload to Slim Framework using curl in php
希望这有帮助。