2

конкретная проблема, над которой я работаю, включает https с API диаграмм Google и возможный предел символов при использовании php file_get_contents в строке url. Позвольте мне рассказать вам, что происходит. Я сделал хороший прогресс, используя некоторые учебные пособия в сети, в частности, чтобы включить https. Я использую их «основной метод» из этого учебника:ограничение лимита с php file_get_contents() и API диаграммы Google?

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

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

ответ

0

Edit: В отличие от меня, указанных ниже, это, вероятно, не проблема сервера: 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" /> 

Update: Там, кажется, не быть уроженцем предел длины для file_get_contents() в зависимости this question. Возможно, это проблема сервера.

+0

Благодарим за быстрый ответ. Я понимаю эту идею, но я не могу заставить ее работать на практике.Я использую ваш код в качестве примера (с заменой urls), я включил сеансы и попробовал онлайн и localhost: $ _SESSION ["URL_1923843294284"] = $ chartUrl; У меня есть среднее знание PHP, поэтому я принимаю, что могу что-то делать неправильно, и я предполагаю, что это связано с разбором ключа api_url. Я повторил переменную сеанса, которая будет работать, но опять же проблема с лимитом лимита вызывает уродливую голову! – Neil

+0

@Neil вам нужно инициализировать сеанс, используя 'session_start()' в обоих сценариях. Кроме этого, он должен работать. –

+0

Awww @Neil Я понимаю только теперь, что, возможно, ваш окончательный URL-адрес, который передается в Google, уже> 512 байт! В этом случае моя идея не принесет вам никакой пользы. Я извиняюсь. В этом случае вам действительно придется прибегать к CURL и проверять, является ли это более мягким. –

Смежные вопросы