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

PHP fpassthru-如何在不在屏幕上打印的情况下输出文件数据?,php,fopen,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) {

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

$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!';
}
结果,

��M�U�供应商管理组织�6.�O��\%��W�&0Xۤmծ�阿兹&�'�^C����100万美元��ꮪ���O>
��>�CU�公里��G���A0>C���LhH�&�<代码>���W��#�W�吕�祖尔��~_��ŝg�^{Ww�0�+��%J�/A.�!��公元��8"�P��3.�K�D�$  �K�v�����,Uf{}n��6EW�}�ԧϭ�@G����������X?aI�$¶��1.��s&3�8%���#�s�/:�Z
�80������s��日本脑炎��撟O�*�O
@ �5^.{,五��.�[�����伊兹���4e1.u�下午�\��穆˅�高炉��Y�F���k>���C���Z�η]i�ت)i�^��JYz֪2z�=����L��^W��|����^'�}亩v�;6y``��]A.�� ����ߗ�6_w���镁�#�� �����۟0W��W���v�L����4.�DS)b�""�3F9��H�� ƶ&t%���我�,��?��A.�i、 m�� e��̗���䒢迪恩*�ǒ=W��Q�D�kB?#h“�Q <9�P�$���O | 8�“菲,�L��?���&�����[��K�5gB������&}�^-��~��^�太太��p�����R�F�__��?����:#��3.��Z=�!s{X���[��.帕�H�Tƌ��˺�v��'}�7.���֫�qd)ӝ��T����7.� ����(成功

但我只是想

成功

是否可能?

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

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

小贴士及注意事项 注意:在Windows上使用二进制文件时,请记住以二进制模式打开文件

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

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


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

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

$success = ob_get_clean();

…然后检查$success以查看“success!”文本。

您可以通过设置适当的标题强制下载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()函数文档:

将结果写入输出缓冲区
-这是什么意思?我知道这一点,并且已经通读了!