2014-12-03 183 views
0

我用php curl發送一個REST請求到geoserver並獲得二進制響應。php發送curl的二進制響應給客戶端

$curl = curl_init(); 
    $url = 'http://localhost:8080/geoserver/worksp/wms'; 
    $query_str = "service=WMS&LAYERS=" . $_GET['LAYERS'] . "&TRANSPARENT=" . $_GET['TRANSPARENT'] . "&VERSION=" . $_GET['VERSION'] . "&REQUEST=" . $_GET['REQUEST'] . "&STYLES=" . $_GET['STYLES'] ; 
    $query = $url . '?' . $query_str; 
    //var_dump($query); 
    curl_setopt_array($curl, array(
     CURLOPT_RETURNTRANSFER => 1, 
     CURLOPT_URL => $query, 
     CURLOPT_USERAGENT => 'Codular Sample cURL Request', 
     CURLOPT_BINARYTRANSFER => true, 
     CURLOPT_HEADER => false 
    )); 
    set_time_limit(30);      // set time in secods for PHP 
    curl_setopt($curl, CURLOPT_TIMEOUT, 30); 
    curl_setopt($curl, CURLOPT_USERPWD, "admin:geoserver"); 
    $response = curl_exec($curl); 
    curl_close($curl); 

服務器發送我一個PNG圖像作爲二進制數據的I保存在$response變量。
現在,$response在上面的代碼是一個PNG圖像的二進制數據。我如何將它發送給客戶端而不將其另存爲文件?
另一個問題是,$response的數據類型是什麼?

+0

什麼的var_dump'輸出($響應);' – Bijan 2014-12-03 17:50:42

+0

var_dump:PNG的輸出)相關主題:««»««,; ,,,,,,,,,,,,,,,,,,,,,,,,,,ريال;,; – 2014-12-03 17:56:02

+0

'echo $ response'?也許先用header()調用來告訴客戶端你實際上發送了一個png – 2014-12-03 17:56:27

回答

-1

您可以將二進制數據保存爲文件,然後將其發送給客戶端:

// place the above code here 
    $saveTo = "c:\\temp.png"; 
    if (file_exists($saveTo)) { 
     unlink($saveTo); 
    } 
    $fp = fopen($saveTo, 'wb'); 
    fwrite($fp, $resp); 
    fclose($fp); 

    header("Content-type:image/png"); 
    $fp = fopen($saveTo, 'rb'); 
    fpassthru($fp); 
    exit(); 

,或者您可以使用echo

echo $response; 
+1

「而不保存到文件中」。爲什麼所有這個文件擺弄,當一個簡單的'echo $ response'會完成? – 2014-12-03 17:58:42

+1

@Dariush Jafari PLZ,拿走你的答案。我找不到任何單詞......當我看上面的代碼時,我想哭。 – voodoo417 2014-12-03 18:04:44

相關問題