gpt4 book ai didi

php - PHP 中的压缩流

转载 作者:IT王子 更新时间:2023-10-29 00:12:02 27 4
gpt4 key购买 nike

我有一个 PHP 脚本,它可以动态创建一个 zip 文件并强制浏览器下载该 zip 文件。问题是:我可以直接将 zip 文件写入连接到用户浏览器的输出流,而不是先将其作为真实文件保存在服务器上,然后再发送文件吗?

提前致谢。

最佳答案

如果您的 Web 服务器正在运行 Linux,那么您可以在不生成临时文件的情况下进行流式处理。在 win32 下,您可能需要使用 Cygwin 或类似软件。

如果您使用“-”作为 zip 文件名,它将压缩到标准输出。从那里,很容易使用 popen() 重定向该流。 “-q”参数只是告诉 zip 不要输出它通常会输出的状态文本。有关详细信息,请参阅 zip(1) 联机帮助页。

<?
$zipfilename = "zip_file_name.zip";

if( isset( $files ) ) unset( $files );

$target = "/some/directory/of/files/you/want/to/zip";

$d = dir( $target );

while( false !== ( $entry = $d->read() ) )
{
if( substr( $entry, 0, 1 ) != "." && !is_dir( $entry ) )
{
$files[] = $entry;
}
}

header( "Content-Type: application/x-zip" );
header( "Content-Disposition: attachment; filename=\"$zipfilename\"" );

$filespec = "";

foreach( $files as $entry )
{
$filespec .= "\"$entry\" ";
}

chdir( $target );

$stream = popen( "/usr/bin/zip -q - $filespec", "r" );

if( $stream )
{
fpassthru( $stream );
fclose( $stream );
}
?>

关于php - PHP 中的压缩流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3078266/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com