2011-07-07 77 views
0

我不确定这是否可能,因为我是PHP新手。我有一个URL(例如:http://www.mysite.com/data/response/),它给了我一些cookie数据作为json respose({“cookie_name”:“value”,“ttl”:60})。我有一个PHP脚本,根据cookie值输出一些输出。所以,在这个PHP脚本之上,我需要调用上面的url,获取json响应/解释它并根据响应设置一个cookie。有人可以帮助我吗?从PHP脚本内进行jsonp调用

非常感谢提前。 大号

回答

1

这就是:

$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扩展(您的php.ini中的extension=json.so)以及您的PHP与--disable-json标志进行了整合。

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,你不能改变它:

如果使用预5.2 PHP那么你可以使用下面的代码(通过PHP.net匿名用户推出) ini_set或通过设置在你的php.ini文件,你可以坚持卷曲(如果卷曲扩展启用了:)):

$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); 

其余的代码应该在第一个例子中工作。希望能帮助到你!

+0

你应该提到,只有当'allow_url_fopen'设置为'1'(默认情况下,但可以禁用),这才有效。 –

+1

如果你想要一个来自'json_decode'的关联数组,你需要传递第二个参数为TRUE。 – cwallenpoole

+0

@cwallenpoole:你是对的,谢谢! @Felix Kling:谢谢你的更新。 – WASD42