2014-12-03 179 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

相关问题