2011-11-05 83 views
1

我有一組php處理頁面,它們通過傳遞數據通過get進行交互,但現在我必須在幾個處理頁面之間傳遞JSON,並且需要與當使用GET。使用CURL發佈JSON然後轉到發佈頁面

當前工作get方法:

//The guts 

header("Location: $moreprocessing_url/?userid=$id"); 

exit(); 

然後在moreprocessing_url拿起:所以現在

$userid = $_GET[id]; 

//More guts 

$something = 'important'; 

header("Location: $public_url/?something=$something"); 

exit(); 

在第一次處理頁面,而不是發送一個簡單的字符串,我需要發JSON - 所以我使用CURL發佈JSON - 但是在發佈帖子後,我希望發佈頁面以繼續處理並使原始頁面停止。上述代碼的工作方式相同,但使用CURL/post代替。也許我對CURL的理解不夠強,這是不可能的?

我捲曲:

$curl = curl_init($moreprocessing_url); 
curl_setopt($curl, CURLOPT_HEADER, false); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, false); 
curl_setopt($curl, CURLOPT_HTTPHEADER, 
array("Content-type: application/json")); 
curl_setopt($curl, CURLOPT_POST, true); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); 

curl_exec($curl); 
curl_close($curl); 

exit(); 

所以這將返回到當前頁面,捲曲的發生,不是我想要的moreprocessing_url - 這可能嗎?基本上我希望這個頁面被髮布到,接管和發送CURL的那個停止。

+0

如果只是將數據從一個頁面傳遞到另一個頁面,難道你不能使用會話? '$ id'變量(或者你的JSON)永遠不會碰到瀏覽器。 –

+0

這些php處理頁面正在從執行會話ID管理的另一種語言中調用,所以試圖避免這種情況..? – bMon

+0

Salman A-我認爲會話用於管理當前Web應用程序用戶的會話標識符 - 我可以只通過會話來傳遞數據嗎? – bMon

回答

0

我相信你想這樣做:

  1. 瀏覽器向guts.php
  2. guts.php帖子JSON編碼數據,從而更guts.php
  3. more-guts.php處理髮布的JSON並返回301臨時移動響應;新的位置是public.php?東西=重要
  4. guts.php收到該響應,並繼到
  5. 瀏覽器遵循重定向

如果這是真的,那麼你需要在瀏覽器對你的cURL腳本做一些調整。沿着這些線的東西:

$curl = curl_init("url.php"); // the URL that processes your POST 

curl_setopt($curl, CURLOPT_POST, true); // use POST method 
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-type: application/json")); // set POST header 
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // set POST body 

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // send output to a variable for processing 
curl_setopt($curl, CURLOPT_HEADER, true); // set to true if you want headers in the output 
curl_setopt($ch, CURLOPT_NOBODY, true); // set to true if you do not want the body 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); // set to false if you want to see what redirect header was sent 

$output = curl_exec($curl); 
curl_close($curl); 

var_dump($output); 

取決於用於CURLOPT_HEADERCURLOPT_NOBODY值,則$output變量將包含響應頭,體或二者(它們是由兩個空行隔開)。如果你想從頭文件中獲得一些東西,你可以使用正則表達式來提取所需的頭文件並將其發送到瀏覽器。

或者如果您選擇這樣做,您可以呼應身體。

+0

好吧,我明白了,並經過測試,並得到了工作。現在,如果在你的例子中:guts.php將{foo:bar}發佈到public.php?我可以退出()捲曲後 - 並讓我的捲曲加載public.php? – bMon

+0

我猜這個問題最簡單的形式是:我如何從我的guts.php處理頁面獲取{foo:bar}到我的公共頁面,在那裏我可以打破JSON並顯示(我想我會使用jQuery或其他的東西)。 – bMon

+0

我接受了,因爲你確實正確回答了我問的問題,並且我得到了它的工作 - 謝謝。但是,你有沒有關於如何從我的php處理頁面獲取(傳遞數據)JSON到公共面向頁面的任何見解? – bMon