gpt4 book ai didi

PHP 在解压缩 GZipped 文件时挂起?

转载 作者:行者123 更新时间:2023-12-04 18:18:28 26 4
gpt4 key购买 nike

我正在解压缩 .gz 文件并将输出放入 tar用 php。
我的代码看起来像

$tar = proc_open('tar -xvf -', array(0 => array('pipe', 'r'), 1 => array('pipe', 'w'), 2 => array('pipe', 'a')), &$pipes);
$datalen = filesize('archive.tar.gz');
$datapos = 0;
$data = gzopen('archive.tar.gz', 'rb');
while (!gzeof($data))
{
$step = 512;
fwrite($pipes[0], gzread($data, $step));
$datapos += $step;
}
gzclose($data);
proc_close($tar);

它工作得很好(tar 提取了几个目录和文件),直到压缩文件的一半多一点(根据我的 $datapos ),然后脚本将卡在 fwrite($pipes...)永远排队(我等了几分钟让它前进)。

压缩存档为 8425648 字节 (8.1M) 大,未压缩存档为 36720640 字节 (36M) 大。

我在这里可能做错了什么,因为我没有找到任何考虑类似问题的资源?

我在 2.6.32-5-amd64 linux 机器上运行 php5-cli 版本 5.3.3-7+squeeze3(使用 Suhosin 0.9.32.1)。

最佳答案

1 => array('pipe', 'w')
您有 tar 在标准输出上为您提供数据(文件名)。您应该清空该缓冲区。 (我通常只是阅读它。)

您也可以将其发送到文件中,这样您就不必处理它了。
1 => array('file', '[file for filelist output]', 'a')
如果你在 Linux 上,我喜欢这样做
1 => array('file', '/dev/null', 'a')
[编辑:一旦输出足够多,它会等你从标准输出读取,这是你挂的地方。]

关于PHP 在解压缩 GZipped 文件时挂起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11230424/

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