PHP cURL - 如何从fpassthru检查返回数据类型?

时间:2015-09-16 05:42:29

标签: php curl fopen

首先,如何调用从 fpassthru 返回成功的此类数据?

  

mUVmo6O \%W&安培; 0X米ծAZ&安培;'^ C1 $mꮪO> {{ 1}} A0> CLhH&安培; ��>�c;;U�km��G��� @   5 ^ {,V [iZ4e1.uPm \MU˅BfY.fk&GT。; CzИ] i的ت)} I ^ JYZ֪2 Z = L ^ W | ^'}亩V; 6y `` ]A ߗ 6_w Mg #   0 WwvL4DS)B “” 3F9h   ž& T公司%I, AI,ME䒢Dʄeh*ǒ= WQD<)I { %XQEO:ƛmoJP'noKSTU&放大器;曲+ VFM; MJ-IH1升;NoԎt= 1>!G [çݬ'D0 3sPdISRI1 O 7V, | %$〜Lx6 g“LJRNq” i    18 mL(G0 8 %a cȌ kB/ } ,G C'q x!X \ “A!C H_H)的p +克ۇٴ*ޫA6G   6PD $ *米; 7U,LT〜V | P〜QET”   QB $ ## /)H%   ? 1 Q Ә> kB?#h“ Q<9 p $ O|8 ”FI, L ? & [ k5gB&安培;} ^ - 〜^ MS; PRF __:?#3 Z =!Š{X [.pAhTƌ˺v'} 7֫QD)ӝt7 (

它们是此文件的输出 - ���w��#�W�lv�ZUl��~_��ŝg�^{Ww�0�+��%J�/A�!��AD��8"�P��3�K�D�$ �K�V;�����,Uf{Өn��6EW�}�ԧϭ�@g����������X?aI�$¶��1��s&3�8%���#�S�/:�z �80������s��Je��撟O�*�O

download.php

然后我如何检查cURL我是否收到此类数据?

例如,$file = "G:/../xxx.tgz"; // Open the file in a binary mode $fp = fopen($file, 'rb'); // Dump the tar and stop the script $success = fpassthru($fp); fclose($fp); if(!$success) { throw new Exception('Unable to downlonad'); }

curl.php

但如果$curl = curl_init(); curl_setopt ($curl, CURLOPT_URL, "http://127.0.0.1/.../download.php"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec ($curl); curl_close ($curl); var_dump(gettype($result)); // string 'string' (length=6) 中的echo 'hello world',我的数据类型结果也是download.php。我需要区分他们。有可能吗?

1 个答案:

答案 0 :(得分:2)

首先,使用RETURNTRANSFER成功的curl_exec将始终是一个字符串。您需要找到另一种方法来确定字符串表示的格式。

在HTTP中执行此操作的标准方法是使用mime-types。这些通常会添加到HTTP响应中的其他标头中。

在download.php中添加标题

$file = "G:/../xxx.tgz";

// Open the file in a binary mode
$fp = fopen($file, 'rb');

// output content-type header
header('Content-Type: '. mime_content_type($file));
// Dump the tar and stop the script
$success = fpassthru($fp);

fclose($fp);

if(!$success) {
    throw new Exception('Unable to downlonad');
}

在curl.php中查找内容类型标题 - 请注意,这是一个非常粗略的脚本,应该适用于您的情况并指出正确的方向。

$curl = curl_init();
curl_setopt ($curl, CURLOPT_URL, "http://127.0.0.1/.../download.php");
curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
$response = curl_exec ($curl);
curl_close ($curl);

list($headers, $body) = explode("\r\n\r\n", $response);

$headers = explode("\r\n", $headers);
$contentType = "";
foreach ($headers as $header) {
    $headerParts = explode(':', $header);
    if($headerParts[0] == 'Content-Type') {
        $contentType = $headerParts[1];
    }
}

var_dump($contentType);