如何在不在屏幕上打印的情况下输出文件数据?
$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 (成功!
但我只想要
成功!
有可能吗?
答案 0 :(得分:0)
fpassthru()
函数从打开文件中的当前位置读取所有数据,直到EOF,并将结果写入输出缓冲区。
此函数返回传递的字符数或失败时的FALSE
。
注意:在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