2

我正在处理的具体问题是使用 Google 图表 API 启用 https,以及在 url 字符串上使用 php file_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;
?>

我从我的主页调用这个文件,传递一个“测试”谷歌图表 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');

图表应该会出现。字符串之间的区别是一个字符。我将在最终版本中使用的“真正的”Google 图表 API 字符串长约 1250 个字符。

那么这是对 get_file_contents() 的限制吗?我已经将 cURL 视为替代方案,但它的细节超出了我的想象。有人可以确认字符限制,如果可能的话提出一些建议?

非常感谢,尼尔

4

1 回答 1

0

编辑:与我在下面所说的不同,这可能不是服务器问题:据说 Apache 对 GET 字符串的限制约为 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()更新:根据这个问题,似乎没有原生长度限制。这很可能是服务器问题。

于 2010-08-31T12:52:37.030 回答