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 和 告知他们错误发生的时间,以及您可能的任何内容 已经这样做了,这可能导致错误。
有关此错误的详细信息,请参阅服务器错误 .log。
此外,尝试使用错误文档处理请求时遇到 404 未找到错误。
这个函数看起来很粗略。您似乎正在用户空间中重新实现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);
}
我将函数更改为此,我的问题已解决:
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);
}
这应该可以帮助您查看错误消息。它要么显示在屏幕上,要么打印到 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');