2013-04-12 26 views
0

我有一個頁面a.php使用cURL將數據發佈到b.php頁面。 但是,當頁面標題爲b.php時,我沒有收到任何POST數據。php cURL沒有收到數據

這裏是我的代碼:

$data=array(); 
$data['firstname']='A'; 
$data['lastname']='B'; 

$post_str=''; 
foreach($data as $key=>$value){ 
    $post_str.=$key.'='.urlencode($value).'&'; 
} 

$post_str=substr($post_str, 0, -1);//Remove last & from loop 

$ch=curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://localhost/b.php'); 
curl_setopt($ch, CURLOPT_POST, TRUE); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_str); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 

$response=curl_exec($ch); 

curl_close($ch); 
header('location:b.php'); 

b.php頁

echo $_POST['firstname']; 
+0

curl文章,你的頭重定向將計爲2個單獨的http請求,這意味着echo不會輸出任何內容,因爲沒有任何內容發佈在重定向上。你可以添加一個'error_log($ _ POST ['firstname'])',你應該在錯誤日誌中看到curl的值。 –

回答

1

這是因爲該電話:

header('location:b.php'); 

搬遷到b.php沒有任何$_POST數據。

+0

那麼我怎麼能傳遞數據到B頁? –

+0

你可以使用GET:'header('location:b.php?foo = bar')'。 –

+0

我實際上有一個註冊頁面 - >檢查數據頁面 - >協議頁面,在我的檢查數據頁面有if語句。如果所有的數據都正確,它會發布到協議頁面 –

0

你有兩個php腳本,但是就瀏覽器而言,它們並不真正連接。畢竟,網絡意圖是無國籍的。 您的a.php可能會成功發佈到b.php。

header('location:b.php');行調用b.php沒有任何參數。

爲了a.php只會稍微更通用的,我改變了
curl_setopt($ch, CURLOPT_URL, 'http://localhost/b.php');
到:
curl_setopt($ch, CURLOPT_URL, $_SERVER['SERVER_NAME'].'/b.php');

b.php需要記錄,然後顯示結果:

<? 
// if called without POST data, dump the last POST, 
// otherwise record the POST in a file 

$filename = 'temp_data.txt'; 
if (count($_POST) == 0) { 
    if (file_exists($filename)) { 
     // dump recorded results 
     echo "<pre>\n"; 
     readfile($filename); 
     echo "</pre>\n"; 
    } else { 
     echo 'No file available.'; 
    } 

} else { 
// record results: 
    $fp = fopen($filename, 'w'); 
    fwrite($fp, print_r($_POST, true)); 
    fclose($fp); 
} 

如此開放a.php,然後在瀏覽器中打開b.php。