2010-08-31 120 views
2

我正在處理的具體問題是啓用https與Google圖表API,以及在url字符串上使用php file_get_contents時可能的字符限制。讓我帶你看看正在發生的事情。我在網上使用一些教程取得了很好的進展,特別是爲了啓用https。我使用他們的「基本方法」從本教程:使用php file_get_contents()和Google Chart API進行字符限制?

http://webguru.org/2009/11/09/php/how-to-use-google-charts-api-in-your-secure-https-webpage/

我在它與這個代碼chart.php文件:

<?php 

$url = urldecode($_GET['api_url']); 

$image_contents = file_get_contents($url); 
echo $image_contents; 
exit; 
?> 

我打電話從我的主頁文件,通過「測試」谷歌圖表網址(我用許多不同的)給它,這是513個字符長:

$chartUrl = urlencode('http://chart.apis.google.com/chart?chxl=0:|Jan|Feb|Mar|Jun|Jul|Aug|1:|100|75|50|25|0&chxt=x,y&chs=300x150&cht=lc&chd=t:60.037,57.869,56.39,51.408,42.773,39.38,38.494,31.165,30.397,26.876,23.841,20.253,16.232,13.417,12.677,15.248,16.244,13.434,10.331,10.58,9.738,10.717,11.282,10.758,10.083,17.299,6.142,19.044,7.331,8.898,14.494,17.054,16.546,13.559,13.892,12.541,16.004,20.026,18.529,20.265,23.13,27.584,28.966,31.691,36.72,40.083,41.538,42.788,42.322,43.593,44.326,46.152,46.312,47.454&chg=25,25&chls=0.75,-1,-1'); 

要在我使用此代碼我的主頁顯示的圖像:

<img src="https://mysite.com/chart.php?api_url=<?php echo $chartUrl; ?>" /> 

示例$ chartUrl字符串應該不顯示任何內容。它會正常工作,直到$ chartUrl字符串的長度超過512個字符(未編碼)。例如,如果您在下面使用此字符串(512個字符長):

$chartUrl = urlencode('http://chart.apis.google.com/chart?chxl=0:|Jan|Feb|Mar|Jun|Jul|Aug|1:|100|75|50|25|0&chxt=x,y&chs=300x150&cht=lc&chd=t:60.037,57.869,56.39,51.408,42.773,39.38,38.494,31.165,30.397,26.876,23.841,20.253,16.232,13.417,12.677,15.248,16.244,13.434,10.331,10.58,9.738,10.717,11.282,10.758,10.083,17.299,6.142,19.044,7.331,8.898,14.494,17.054,16.546,13.559,13.892,12.54,16.004,20.026,18.529,20.265,23.13,27.584,28.966,31.691,36.72,40.083,41.538,42.788,42.322,43.593,44.326,46.152,46.312,47.454&chg=25,25&chls=0.75,-1,-1'); 

圖表應該顯示出來。字符串之間的區別是一個字符。我將在最終版本中使用的'真正'Google圖表API字符串長度大約爲1250個字符。

那麼這是對get_file_contents()的限制嗎?我已經把cURL看作另一種選擇,但它的細節超出了我的頭腦。有人可以確認字符限制,如果可能的話提出一些建議?

非常感謝, 尼爾

回答

0

編輯:不像下面我說,這可能不是一個服務器的問題:Apache的上GET字符串限制被認爲是around 4000 bytes。但是,我建議的解決方法仍然有效,所以我要離開這個答案。

這是非常多的數據放在一個GET字符串,並且可以是一個服務器端的限制(Apache的處理請求)之多的客戶機側的一個(的file_get_contents發送請求)。

我會尋找另一種方法來做到這一點,例如,在一個會話變量和隨機密鑰存儲長的URL:

$_SESSION["URL_1923843294284"] = $loooooong_url; 

,並通過在URL中的隨機密鑰:

<img src="https://mysite.com/chart.php?api_url=1923843294284" /> 

更新:似乎沒有成爲一個天然的長度限制file_get_contents()根據this question。這可能是服務器問題。

+0

感謝您的快速回復。我理解這個想法,但是我無法在實踐中使用它。我使用你的代碼作爲一個例子(與網址替換),我已啓用會話,並嘗試在線和本地主機: $ _SESSION [「URL_1923843294284」] = $ chartUrl; 我有平均的PHP知識,所以我接受我可能做錯了什麼,我想這是解析api_url鍵。我已經迴應了會話變量,該變量將起作用,但字符限制問題再一次引發了醜陋的頭緒! – Neil 2010-08-31 13:33:39

+0

@你需要在兩個腳本中使用'session_start()'來初始化會話。除此之外,它應該工作。 – 2010-08-31 13:35:34

+0

Awww @Neil我現在才意識到,也許,傳遞給Google的最終網址已經超過了512個字節!在這種情況下,我的想法對你沒有任何好處。我道歉。在這種情況下,你可能真的不得不求助於CURL並測試它是否更寬鬆。 – 2010-08-31 13:46:42