这个URL需要urlencoding在哪里?

时间:2016-07-10 06:14:55

标签: php json amazon-web-services file-get-contents urlencode

我主持了一个关于亚马逊网络服务的网站,由于某些原因,与我在localhost上本地运行相比,有些东西不起作用。

这些东西是

if (array_key_exists("error", $json))

功能和

file_get_contents功能。

我已经注释掉了数组键存在的一部分并且解决了这个问题,至少在登录的那一部分,直到我到了一个显示苗条应用程序错误的视图文档页面

  

无法打开流:HTTP请求失败!找不到HTTP / 1.1 404

,问题在于viewdocspage.php文件,特别是这段代码:

<?php
                 $raw = file_get_contents("http://cosoft.us-east-1.elasticbeanstalk.com/cosoft/mywiki/api.php?action=query&list=allpages&format=json");
                 $pages_response = json_decode($raw, true);
                 $pages_array = $pages_response["query"]["allpages"];
                 $page_titles = [];

我查看并阅读了许多线程,问题在于file_get_contents,其中URL包含特殊字符,例如空格(我没有),因此需要使用urlencode(或rawurlencode ..)进行编码。 )

现在我尝试编码整个网址:

$raw = file_get_contents(urlencode("http://cosoft.us-east-1.elasticbeanstalk.com/cosoft/mywiki/api.php?action=query&list=allpages&format=json"));

但是这导致了这个错误: slim error

  

消息:file_get_contents(http%3A%2F%2Fcosoft.us-east-1.elasticbeanstalk.com%2Fcosoft%2Fmywiki%2Fapi.php%3Faction%3Dquery%26list%3Dallpages%26format%3Djson):无法打开流:没有这样的文件或目录

我认为这可能会发生,因为我读到并不是所有的URL都应该被这个编码包裹,但是我坚持的地方:我使用编码的哪个部分?关于这个错误,我唯一不断出现的特殊字符就是空格,但是我没有任何空格,所以它的其他内容我不知道它是什么......

感谢帮助,谢谢!

2 个答案:

答案 0 :(得分:1)

您只需要对参数进行url_encode。假设你有一个值$value='My name is earl' 如果您想将此值作为参数传递到您的网址中 http://somesite.com/?name=$value值为url_encoded的空格。因此,如果您将其编码为'http://somesite.com/?name='.urlencode($value),则在对其进行编码时,该值将变为My+name+is+earl

答案 1 :(得分:-1)

从URL读取资源可能受到服务器配置的限制。 http://php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen

你应该使用CURL。