2011-07-07 6 views
0

PHPを初めて使ったのでこれが可能かどうかはわかりません。私はjson respose({"cookie_name": "value"、 "ttl":60})のようにいくつかのクッキーデータを与えるURL(例えば:http://www.mysite.com/data/response/)を持っています。私は、クッキーの値に基づいていくつかの出力を表示するPHPスクリプトを持っています。だから、私は上記のURLを呼び出し、jsonの応答を取得する/それを解釈し、応答に基づいてクッキーを設定する必要がこのPHPスクリプトの上に右。誰かがこれで私を助けてくれますか?PHPスクリプト内からjsonpコールを作成する

事前に感謝します。ここで L

答えて

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フラグと組み合わされているかどうかを確認してください。

あなたは事前5.2 PHPを使用する場合は、あなたが(PHP.net上の匿名ユーザーにより導入された)次のコードを使用することができます:allow_url_fopenが0に設定されている、あなたがして変更することができない場合

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; 
} 
} 

は、あなたはcURLのに固執することができini_setやphp.iniファイルでそれを設定することで、(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); 

残りのコードは、最初の例のように動作するはずです。それが役に立てば幸い!

+0

これは 'allow_url_fopen'が' 1'(デフォルトでは無効ですが)に設定されている場合にのみ動作することに言及してください。 –

+1

'json_decode'からの連想配列が必要な場合は、2番目のパラメータをTRUEとして渡す必要があります。 – cwallenpoole

+0

@cwallenpoole:そうです、ありがとう! @Felix Kling:更新にも感謝します。 – WASD42

関連する問題