2016-07-10 38 views
-3

我託管了一個我在亞馬遜網絡服務上工作的網站,由於某些原因,我在本地在本地主機上運行它時出現了一些問題。這個URL需要urlencoding在哪裏?

的那些東西

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

功能和

file_get_contents功能。

伊夫註釋掉陣列鍵存在一部分,解決了這個問題,至少登錄的那一部分,直到我到視圖中的文檔頁面,苗條的應用程序顯示錯誤

failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found

和問題針對在於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(其我沒有)等需求進行編碼,使用進行urlencode(或rawurlencode ..?)

現在我用盡編碼整個URL這樣的:

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

但導致這個錯誤: slim error

Message: file_get_contents(http%3A%2F%2Fcosoft.us-east-1.elasticbeanstalk.com%2Fcosoft%2Fmywiki%2Fapi.php%3Faction%3Dquery%26list%3Dallpages%26format%3Djson): failed to open stream: No such file or directory


我想這可能會發生,因爲我讀了並不是所有的URL都應該被這個編碼包裝,而是繼承人Im卡住了:我使用哪個url部分編碼在?唯一的特殊字符,我不斷地來關於這個錯誤accross是空格,但我沒有任何空格,所以它的東西,我不知道它是什麼...

幫助表示讚賞,謝謝!

+0

很好。即使有儘可能詳細的組織和獨特的問題,我得到一個downvote沒有解釋。 smh – masterofcatastrophe

+0

哇... 2更多downvotes。有人可以解釋嗎? – masterofcatastrophe

+0

我猜懷疑可能是因爲你聽到了馬蹄聲,而你正在尋找一匹斑馬,同時忽略了盯着你的那匹馬:'http://cosoft.us-east-1.elasticbeanstalk.com/cosoft/ mywiki/api.php?action = query&list = allpages&format = json'確實返回404 Not Found。你有一個無效的URL,或者你的IP受限制,或者你沒有發送證書......但這不是一個urlencoding問題。 URL中沒有任何內容需要編碼(通常在'?the_keys = and_values_in&ur = query_string'上使用,但不在?=&分隔它們)。 –

回答

1

你只需要url_encode參數。假設您有一個值$value='My name is earl' 如果您想將此值作爲url http://somesite.com/?name=$value中的參數傳遞,那麼url_encoded的值中會有空格。因此,如果將其編碼爲'http://somesite.com/?name='.urlencode($value),則編碼時該值將變爲My+name+is+earl

+0

所以在那個URL我有,什麼是參數和URL編碼應該在哪裏完成?因爲我知道如何使用它的空間,但我沒有我的空間,所以我不知道哪些特殊字符需要它在我的問題 – masterofcatastrophe

+1

您正在使用一個硬編碼的URL沒有特殊字符,需要編碼。不需要url_encode即可保留您的網址。你得到那個404錯誤的原因是因爲這個頁面不存在。我只是在瀏覽器中訪問它,並得到了404錯誤 – ksealey

+0

@masterofcatastrophe:未能打開流:沒有這樣的文件或目錄 – Sbpro

-1

從URL讀取資源可能受服務器配置的限制。 http://php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen

您應該爲此使用CURL。

+0

我也看到CURL是一個建議的解決方案,但它看起來很簡單使用urlencode。我真的不知道如何在這裏實現CURL,而且fopen已經啓用,因爲在localhost服務器上運行它工作正常,它只是AWS,它給出了問題 – masterofcatastrophe

+0

這不是問題在這裏。錯誤將會完全不同,如果你閱讀代碼,你會發現他們顯然已經破壞了URL,這就是它不存在的原因。 – Brad

+0

甚至可以使用CURL正確管理參數。 此外,url fopen通常是禁用的,所以他會在某個時候遇到問題 – ehwas