【问题标题】:char limit with php file_get_contents() and Google Chart API?php file_get_contents() 和 Google Chart API 的字符限制?
【发布时间】:2011-04-06 06:26:10
【问题描述】:

我正在处理的具体问题是使用 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 视为替代方案,但它的细节超出了我的想象。有人可以确认字符限制,如果可能的话提出一些建议?

非常感谢, 尼尔

【问题讨论】:

    标签: php limit character google-visualization file-get-contents


    【解决方案1】:

    编辑: 与我在下面所说的不同,这可能不是服务器问题:据说 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" />
    

    更新:根据this questionfile_get_contents() 似乎没有本机长度限制。这很可能是服务器问题。

    【讨论】:

    • 感谢您的快速回复。我理解这个想法,但我无法让它在实践中发挥作用。我以您的代码为例(替换了 url),我启用了会话并尝试了在线和 localhost: $_SESSION["URL_1923843294284"] = $chartUrl; mysite.com/chart.php?api_url=URL_1923843294284" /> 我的 PHP 知识一般,所以我接受我可能做错了什么,我猜这与解析 api_url 键有关。我已经回应了会话变量,它会起作用,但是字符限制问题再次引起了它的丑陋!
    • @Neil 您需要在两个脚本中使用session_start() 初始化会话。除此之外,它应该可以工作。
    • Awww @Neil 我现在才意识到,您传递给 Google 的最终 URL 的长度可能已经 > 512 字节了!在那种情况下,我的想法对你没有任何好处。我道歉。在这种情况下,你可能真的不得不求助于 CURL 并测试它是否更宽松。
    猜你喜欢
    • 1970-01-01
    • 2017-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 2016-08-09
    • 1970-01-01
    相关资源
    最近更新 更多