2011-07-07 44 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