所有
作为我正在编写的应用程序的一部分,我需要有一个HTTP PUT Web服务,它接受传入的imagedata,它将通过分析,验证并添加到本地文件存储。
我的问题在大小验证后出现
$_SERVER['CONTENT_LENGTH']
有一个> 0值,这个值与测试文件大小相同,所以我可以假设当我尝试使用
读取传入的流数据时,所有这一切都很顺利但是
file_get_contents('php://stdin');
我得到一个空字符串。我也尝试过使用
file_get_contents('php://input');
这给了我一个空字符串的相同结果。
任何帮助,建议或指示都将不胜感激。
注意:我正在使用
答案 0 :(得分:2)
Apache HTTPD默认拒绝PUT请求。你可以看一下mod_put:
http://perso.ec-lyon.fr/lyonel.vincent/apache/mod_put.html
并将其添加到httpd.conf:
<Location /upload/dir> EnablePut On AuthType Basic AuthName "Web publishing" AuthUserFile /www/etc/passwd AuthGroupFile /www/etc/group <Limit PUT> require valid-user </Limit> </Location>
答案 1 :(得分:1)
我最好的猜测是你需要改变httpd.conf以拒绝PUT请求。你检查过了吗?
答案 2 :(得分:0)
你得到的r
作为第二个arg是不对的。 file_get_contents
不使用a/r/w/a+/r+/w+
使用的fopen
个参数。你可能想要删除它,然后执行:
file_get_contents('php://input');
答案 3 :(得分:0)
file_get_contents
不接受“r”参数 - 请参阅the PHP manual page:
string file_get_contents ( string $filename [, int $flags...)
有效$flag
值为FILE_USE_INCLUDE_PATH, FILE_TEXT, FILE_BINARY
。
尝试删除“r”标志并再次尝试
编辑 - 问题已更新,“r”标志被忽略,显然不是问题的根源。
看起来reported bug in PHP关于file_get_contents
返回HTTP POST的空字符串。从错误描述:
开始,改变指定的表单enctype远离
file_get_contents('php://input')
(以及file, fopen+fread
)没有 返回POST数据,当提交表单时 ENCTYPE = “多部分/格式数据”。当提交没有指定enctype的相同表单时(默认情况下) 使用“application / x-www-form-urlencoded”)一切正常。
multipart/form-data
,这显然不适合图片上传,这似乎是一种解决方法。
内容类型“application / x-www-form-urlencoded”对于发送大量二进制数据或包含非ASCII字符的文本效率不高。内容类型“multipart / form-data”应该用于提交包含文件,非ASCII数据和二进制数据的表单。
进一步修改
此错误似乎已在您的PHP版本中得到解决。您是否已检查以确保正在读入的缓冲区不以car-return /换行符char开头?有一个问题与你的问题有些相似on Sitepoint。
尝试在输入上运行strlen
,看看长度是多少。