сделать вызов jsonp из скрипта PHP - PullRequest
0 голосов
/ 07 июля 2011

Я не уверен, возможно ли это, так как я новичок в PHP. У меня есть URL (например: http://www.mysite.com/data/response/), который дает мне некоторые данные cookie в виде json respose ({"cookie_name": "value", "ttl": 60}). У меня есть php-скрипт, который выводит некоторые данные основанный на значении cookie. Итак, прямо над этим php-скриптом мне нужно позвонить по вышеуказанному URL, получить ответ json / интерпретировать его и установить cookie на основе ответа. Может кто-нибудь помочь мне с этим?

Большое спасибо заранее. L

1 Ответ

1 голос
/ 07 июля 2011

Вот оно:

$url = 'http://www.mysite.com/data/response/';
$result = file_get_contents($url);
$json = json_decode($result, true);

set_cookie('cookie_name', $json['value'], time() + ((int) $json['ttl']));

Поскольку cwallenpoole упоминается в комментариях ниже, убедитесь, что для переменной конфигурации allow_url_fopen во время выполнения установлено значение TRUE (по умолчанию). Если нет - используйте ini_set('allow_url_fopen', 1), но я думаю, что он может быть ограничен безопасным режимом:)

json_decode функция была введена в PHP 5.2.0. Если у вас PHP> = 5.2 и json_decode недоступен, проверьте, включено ли расширение JSON (extension=json.so в вашем php.ini) и был ли ваш PHP объединен с флагом --disable-json.

Если вы используете PHP до версии 5.2, тогда вы можете использовать следующий код (введенный анонимным пользователем на PHP.net):

if ( !function_exists('json_decode') ){
function json_decode($json)
{
$comment = false;
$out = '$x=';

for ($i=0; $i<strlen($json); $i++)
{
    if (!$comment)
    {
        if (($json[$i] == '{') || ($json[$i] == '['))       $out .= ' array(';
        else if (($json[$i] == '}') || ($json[$i] == ']'))   $out .= ')';
        else if ($json[$i] == ':')    $out .= '=>';
        else                         $out .= $json[$i];          
    }
    else $out .= $json[$i];
    if ($json[$i] == '"' && $json[($i-1)]!="\\")    $comment = !$comment;
}
eval($out . ';');
return $x;
}
}

Если allow_url_fopen установлен на 0, и вы не можете изменить его на ini_set или установив его в файле php.ini, вы можете придерживаться cURL (если расширение cURL включено:)):

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER_HEADER, true);

$result = curl_exec($ch);
curl_close($ch);

Остальной код должен работать как в первом примере. Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...