2012-09-19 54 views
1

我使用this post給出的示例功能:HTTP POST從PHP,沒有捲曲

<?php 
function do_post_request($url, $data, $optional_headers = null) 
{ 
    $params = array('http' => array(
       'method' => 'POST', 
       'content' => $data 
      )); 
    if ($optional_headers !== null) { 
    $params['http']['header'] = $optional_headers; 
    } 
    $ctx = stream_context_create($params); 
    $fp = @fopen($url, 'rb', false, $ctx); 
    if (!$fp) { 
    throw new Exception("Problem with $url, $php_errormsg"); 
    } 
    $response = @stream_get_contents($fp); 
    if ($response === false) { 
    throw new Exception("Problem reading data from $url, $php_errormsg"); 
    } 
    return $response; 
} 
?> 

我也嘗試過使用file_get_contents()類似的方法,如:

$options = array(
    'http'=>array(
    'method'=>"POST", 
    'header'=> 
     "Accept-language: en\r\n". 
     "Content-type: application/x-www-form-urlencoded\r\n", 
    'content'=>http_build_query(
     array(
      'arg1'=>'arg_data_1', 
      'oper'=>'get_data', 
      'arg2'=>'arg_data_2', 
      'id_number'=>'7862' 
     ),'','&' 
    ) 
)); 

$context = stream_context_create($options); 
$refno = file_get_contents('/path/to/script/script.php',false,$context); 

var_dump($refno); 

與這兩個腳本,來自服務器腳本的響應是相同的,並且是script.php的TEXT。服務器腳本的代碼永遠不會開始執行,腳本的文本內容(PHP代碼)將返回到原始腳本。

有點怪怪的,它並沒有返回的所有文字,但只是某些部分......我試圖使測試腳本(test.php)只包含:

<?php 
echo '{"a":1,"b":2,"c":3,"d":4,"e":5}'; 
?> 

,但不返回任何來自POST請求的東西,所以我沒有包括這一點。 script.php是一個必須長的腳本,它執行大量的邏輯和MySQL查詢,然後返回一個JSON對象。

希望的輸出是讓PHP代碼執行並返回一個JSON對象(它與ajax一起工作的方式)。

我在做什麼錯?

+1

你只需讀本地文件 - 你完全繞過Web服務器,所以PHP代碼沒有被加工成成品的內容。 – andrewsi

+0

爲什麼不使用捲曲? – Motes

+0

http://stackoverflow.com/questions/2367458/php-post-data-with-fsockopen – Motes

回答

3

您正在試圖訪問本地腳本。 你必須把它像任何其他外部腳本一樣

$refno = file_get_contents('http://yourhost/path/to/script/script.php',false,$context);