当我在浏览器上运行以下查询时:
http://127.0.0.1:8096/solr/select/?q=june 17&start=0&rows=8&indent=on&hl=on&hl.fl=Data&wt=json
我得到了结果。没问题。请注意,6月和17之间有一个空格
然而,当我在我的PHP中收到该查询,即$ q = 6月17日,我使用
$url="http://127.0.0.1:8096/solr/select/?q=$q&start=0&rows=8&indent=on&hl=on&hl.fl=Data&wt=json";
$json_O=json_decode(file_get_contents($url),true);
在此之后,我在我的萤火虫上看到以下内容:
<b>Warning</b>: file_get_contents(http://127.0.0.1:8096/solr/select/?q=june 17&start=0&rows=8&indent=on&hl=on&hl.fl=Data&wt=json) [<a href='function.file-get-contents'>function.file-get-contents</a>]: failed to open stream: HTTP request failed! HTTP/1.1 505 HTTP Version Not Supported
但请注意,如果我的查询词之间没有空格(我的意思是它只是一个单词)那么一切都很完美。
与file_get_contents()相比,当我在浏览器上发出完全相同的查询时,为什么它可以正常工作。任何解决方案都将不胜感激。
答案 0 :(得分:2)
q
参数的值中有一个空格。可能是这样。尝试urlencode()
参数。
$url="http://127.0.0.1:8096/solr/select/?q=".urlencode($q)."&start=0&rows=8&indent=on&hl=on&hl.fl=Data&wt=json";
$json_O=json_decode(file_get_contents($url),true);
答案 1 :(得分:1)
这是因为file_get_contents
函数在HTTP中向Web服务器发送请求,看起来像这样
GET /solr/select/?q=bla HTTP/1.0
Host: 127.0.0.1
...[more headers here]...
请注意,请求中指定了HTTP版本(HTTP/1.0
)
现在,如果请求字符串中有空格,则发送类似
的内容GET /solr/select/?q=bla foo HTTP/1.0
Host: 127.0.0.1
...[more headers here]...
您的服务器似乎将foo
解析为版本并返回505 HTTP Version Not Supported
。如果您对字符串中的空格进行编码(例如,将其替换为%20
,则不应该这样做。)