2
function uncompress($srcName, $dstName) {
    $sfp = gzopen($srcName, "rb");
    $dstName = str_replace('.gz', '', $dstName);
    $fp = fopen($dstName, "w");

        fseek($FileOpen, -4, SEEK_END);
        $buf = fread($FileOpen, 4);
        $GZFileSize = end(unpack("V", $buf));

    while ($string = gzread($sfp, $GZFileSize)) {
        fwrite($fp, $string, strlen($string));
    }
    gzclose($sfp);
    fclose($fp);
}

我使用此代码进行解压缩,但它不起作用,并且出现以下错误:

内部服务器错误

服务器遇到内部错误或配置错误,无法完成您的请求。

请联系服务器管理员 webmaster@example.com 并告知他们错误发生的时间,以及您所做的任何可能导致错误的事情。

服务器错误日志中可能提供有关此错误的更多信息。

此外,在尝试使用 ErrorDocument 处理请求时遇到 404 Not Found 错误。

4

3 回答 3

3

这个功能看起来很粗略。看来您正在用户空间中重新实现stream_copy_to_stream()。忘记缓冲区,只需使用本机的东西。

function uncompress($srcName, $dstName)
{
    $src = gzopen($srcName, 'rb');
    $dst = fopen($dstName, 'wb');

    stream_copy_to_stream($src, $dst);

    gzclose($src);
    fclose($dst);
}

想想看,你甚至可以使用copy()

function uncompress($srcName, $dstName)
{
    copy('compress.zlib://' . $srcName, $dstName);
}
于 2012-07-07T07:16:58.237 回答
2

我把我的功能改成了这个,我的问题就解决了:

function uncompress($srcName, $dstName) {
        $sfp = gzopen($srcName, "rb");
        $dstName = str_replace('.gz', '', $dstName);
        $fp = fopen($dstName, "w");


            $GZFileSize = filesize($srcName);


        while ($string = gzread($sfp, $GZFileSize)) {
            fwrite($fp, $string, strlen($string));
        }
        gzclose($sfp);
        fclose($fp);
    }
于 2012-07-02T13:26:35.403 回答
1

这应该可以帮助您查看错误消息。它要么显示在屏幕上,要么打印到 txt 文件中,尽管该目录必须是 php 可写的。

<?php //top of script
error_reporting(E_ALL);
ini_set('display_errors', 1);
ini_set('log_errors', 1);
ini_set('error_log', 'errors.txt');
于 2012-06-29T18:51:53.023 回答