ограничение на количество символов с помощью php file_get_contents () и API Google Chart?

Конкретная проблема, над которой я работаю, заключается в включении https с API диаграмм Google и возможном ограничении символов при использовании php file_get_contents в строке URL-адреса. Позвольте мне рассказать вам о том, что происходит. Я добился хорошего прогресса, используя некоторые учебные пособия в сети, в частности, чтобы включить протокол 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-адрес диаграммы Google (я использовал много разных) длиной 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');

График должен появиться. Разница между строками составляет один символ. «Настоящая» строка API диаграмм Google, которую я буду использовать в окончательной версии, имеет длину около 1250 символов.

Так это ограничение на get_file_contents()? Я смотрел на cURL как на альтернативу, но его особенности ускользают от меня. Может ли кто-нибудь подтвердить лимит символов и, если возможно, внести некоторые предложения?

Большое спасибо, Нил


person Neil    schedule 31.08.2010    source источник


Ответы (1)


Редактировать: В отличие от того, что я сказал ниже, это, вероятно, не проблема сервера: говорят, что ограничение Apache на строки GET составляет около 4000 байт. Обходной путь, который я предлагаю, по-прежнему действителен, поэтому я оставляю этот ответ на месте.

Это очень много данных, которые нужно поместить в строку 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() в соответствии с этот вопрос . Это вполне может быть проблема с сервером.

person Pekka    schedule 31.08.2010
comment
Спасибо за ваш быстрый ответ. Я понимаю идею, но не могу заставить ее работать на практике. Я использую ваш код в качестве примера (с заменой URL-адресов), я включил сеансы и попробовал онлайн и локальный хост: $_SESSION[URL_1923843294284] = $chartUrl; ‹img src=mysite.com/chart.php?api_url=URL_1923843294284 /› I имею среднее знание PHP, поэтому я допускаю, что могу делать что-то не так, и я предполагаю, что это связано с синтаксическим анализом ключа api_url. Я повторил переменную сеанса, которая будет работать, но снова проблема с ограничением количества символов поднимает свою уродливую голову! - person Neil; 31.08.2010
comment
@Neil, вам нужно инициализировать сеанс, используя session_start() в обоих сценариях. Кроме этого, это должно работать. - person Pekka; 31.08.2010
comment
Awww @Neil Я только сейчас понял, что, возможно, ваш конечный URL, который передается в Google, уже › 512 байт! В таком случае моя идея вам не поможет. Я извиняюсь. В этом случае вам, возможно, действительно придется прибегнуть к CURL и проверить, является ли он более мягким. - person Pekka; 31.08.2010