PHP fpassthru - 如何输出文件数据而不在屏幕上打印?

时间:2015-09-15 07:13:58

标签: php fopen

如何在不在屏幕上打印的情况下输出文件数据?

$file = "G:/...7F0D23C62002546097485FC518222504D29693FC8D2FCBB7.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');
} else {
   echo 'success!';
}

结果,

  

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 (成功!

但我只想要

  

成功!

有可能吗?

3 个答案:

答案 0 :(得分:0)

fpassthru()函数从打开文件中的当前位置读取所有数据,直到EOF,并将结果写入输出缓冲区。

此函数返回传递的字符数或失败时的FALSE

PHP fpassthru() Function

提示和注释

  

注意:在Windows上对二进制文件使用fpassthru()时,请记住以二进制模式打开文件。

     

提示:如果您已经写入文件,请调用rewind()将文件指针设置为文件的开头。

     

提示:如果您只想将文件内容转储到输出缓冲区而不先修改它,请改用readfile()函数。

答案 1 :(得分:0)

这是一个古老的问题,但也许答案对某人有用。

ob_start();
var_dump(fpassthru($fp));

$success = ob_get_clean();

...然后检查$成功是否为“成功!”。文字。

答案 2 :(得分:0)

您可以通过设置适当的标题来强制下载tar文件:

$file = "./test.tgz";

// Set headers
header("Content-Type: application/x-tar");
header("Content-Disposition: attachment; filename=test.tgz");
header("Content-Length: " + filesize($file));    
header("Content-Transfer-Encoding: binary");

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

// Dump the tar and stop the script
$success = fpassthru($fp);

fclose($fp);

PHP header()函数文档:https://www.php.net/manual/en/function.header.php