2

私が取り組んでいる特定の問題は、Google Charts APIでhttpsを有効にすることと、URL文字列でphpfile_get_contentsを使用するときに発生する可能性のある文字数制限です。何が起こっているのかをご紹介します。特にhttpsを有効にするために、ネット上のいくつかのチュートリアルを使用して順調に進歩しました。私はこのチュートリアルの「基本的な方法」を使用しています。

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;
?>

私はメインページからこのファイルを呼び出して、「テスト」GoogleチャートURL(私は多くの異なるものを使用しました)をそれに渡します。これは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');

チャートが表示されます。文字列の違いは1文字です。最終バージョンで使用する「実際の」GoogleチャートAPI文字列は、約1250文字の長さです。

では、これはget_file_contents()の制限ですか?私は代わりにcURLを見てきましたが、その詳細は私の頭に浮かびます。誰かが文字の制限を確認し、可能であればいくつかの提案をすることができますか?

どうもありがとう、ニール

4

1 に答える 1

0

編集:以下で述べたのとは異なり、これはおそらくサーバーの問題ではありません: GET 文字列に対する Apache の制限は約 4000 バイトと言われています。ただし、私が提案する回避策はまだ有効であるため、この回答はそのままにしておきます。

これは GET 文字列に入れるには非常に多くのデータであり、クライアント側の制限 (リクエストを送信する file_get_contents) と同じくらいサーバー側の制限 (リクエストを処理する Apache) になる可能性があります。

これを行う別の方法を探します。たとえば、長い URL をランダムなキーを使用してセッション変数に保存します。

$_SESSION["URL_1923843294284"] = $loooooong_url;

そのランダムなキーを URL に渡します。

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

更新:この質問file_get_contents()によると、ネイティブの長さ制限はないようです。これはサーバーの問題である可能性があります。

于 2010-08-31T12:52:37.030 に答える