2014-09-25 44 views
0

我有三個Web服務器。其中兩個論壇有一個需要在發送發佈請求時運行的php腳本,第三個腳本發送命令給兩個較低的服務器。我需要發送一個post請求到2個較低的服務器,只使用php。這是我當前的代碼:僅在服務器間發送帖子php

所有的
function sendcom($sData, $sUrl){ 
    $params = array('http' => array(
      'method' => 'POST', 
      'content' => $sData 
    )); 
    $ctx = stream_context_create($params); 
    $fp = @fopen($sUrl, 'rb', false, $ctx); 
    if (!$fp) { 
     Exit; 
    } 
    $response = @stream_get_contents($fp); 
    if ($response === false) { 
     Exit; 
    } 
} 
?> 

首先,爲什麼將數據發送到子服務器沒有這個劇本的工作。其次,有沒有更好的方法來做到這一點(請記住,我只使用PHP)。

+0

停止使用'@'來抑制您的錯誤消息。抑制錯誤的函數可能是問題,並且你壓制的錯誤會告訴你爲什麼。 – Sammitch 2014-09-25 16:26:59

+0

我的錯誤實際上在於代碼中的其他地方,但下面的curl方法比我目前的更好。 – Aurora 2014-09-25 16:37:34

回答

0

你應該使用捲曲

function sendcom($sData, $sUrl){ 
    //open connection 
    $ch = curl_init(); 

    //set the url, number of POST vars, POST data 
    curl_setopt($ch,CURLOPT_URL, $sUrl); 
    curl_setopt($ch,CURLOPT_POSTFIELDS, $sData); 

    //execute post 
    curl_exec($ch); 

    // Check Error 
    if($errno = curl_errno($ch)) { 
     $error_message = curl_strerror($errno); 
     echo "cURL error ({$errno}):\n {$error_message}"; 
    } else { 
     echo "<h2>Posted</h2>"; 
    } 
    curl_close($ch); 
} 
0

捲曲是你所需要的:

例如,我需要把一些變量將消息發送文本電話:

<?php 
    $phoneNumber = '4045551111'; 
    $message = 'This message was generated by curl and php'; 
    $curlPost = 'pNUMBER=' . urlencode($phoneNumber) . '&MESSAGE=' . urlencode($message) . '&SUBMIT=Send'; 

    // initialize connection 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, 'http://www.webserver.com/sendSMS.php'); 
    curl_setopt($ch, CURLOPT_HEADER, 1); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost); 

    //execute post 
    $data = curl_exec(); 
    curl_close($ch); 

或者您可以通過JSON以正確格式的JSON數據發送數據:

<?php 
    $data = array("phoneNumber" => "4045551111", "message" => "This message was generated by curl and php");                  
    $data_string = json_encode($data);                     

    // initialize connection 
    $ch = curl_init('http://www.webserver.com/sendSMS.php');                  
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                  
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                  
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(                   
    'Content-Type: application/json',                     
    'Content-Length: ' . strlen($data_string))                  
);                             

    //execute post 
    $result = curl_exec($ch); 
    curl_close($ch); 

CURLOPT_RETURNTRANSFER純粹是這樣,來自遠程服務器的響應放置在$result而不是回顯。