PHP - pclzip.lib麻烦

时间:2010-10-19 16:19:02

标签: php zip

Dunno如果有人使用这个库来制作(服务器端)一个zip文件。在这里你可以看到我的代码:

$i=0;
while ($row = mysql_fetch_array($query, MYSQL_NUM)) {
    $title[$i]=$row[1]." - ".$row[2];

    // i remove some chars, because they can create confusion with the filesystem
    $titleontxt=$title[$i];
    $title[$i]=str_replace("/", "", $title[$i]);
    $title[$i]=str_replace(":", "", $title[$i]);
    $title[$i]=str_replace("*", "", $title[$i]);      
    $title[$i]=str_replace("?", "", $title[$i]);      
    $title[$i]=str_replace('"', "", $title[$i]);
    $title[$i]=str_replace("<", "", $title[$i]);
    $title[$i]=str_replace(">", "", $title[$i]);
    $title[$i]=str_replace("|", "", $title[$i]);                  
    $title[$i]=str_replace(",", "", $title[$i]);

    $trackid=$row[0];
    mkdir("./temp/".$_SESSION['nickname'], 0700);
    $file = fopen("./temp/".$_SESSION['nickname']."/".$title[$i].".txt", "w");
    $fwrite = fwrite($file, $titleontxt."\r\n");

    $j=0;
    $fwrite = fwrite($file, "\r\n single side");
    $fwrite = fwrite($file, "\r\n there is a single line");


    fclose($file);
    $i++;
}

include_once("./lib/pclzip.lib.php");
$data=date("Y-m-d");
$zipstring="./temp/".$_SESSION['nickname']."/".$trackid."-GTW-Tracklist.zip";
$filezip=new PclZip($zipstring);

for($i=0; $i<sizeof($title); $i++) {
        // inserisce i txt nel file zip
        $v_list = $filezip->add("./temp/".$_SESSION['nickname']."/".$title[$i].".txt", PCLZIP_OPT_REMOVE_ALL_PATH);
        if ($v_list == 0) { 
            die("Error : ".$filezip->errorInfo(true)); 
        } 
}

for($i=0; $i<sizeof($title); $i++) {
    unlink("./temp/".$_SESSION['nickname']."/".$title[$i].".txt");
}

header("Content-type: application/zip"); 
header("Content-Disposition: attachment; filename=$zipstring"); 
header("Content-Description: Backup"); 
header("Content-Length: ".filesize($zipstring)); 
readfile($zipstring);     
unlink($zipstring);
rmdir("./temp/".$_SESSION['nickname']);
exit;

无论如何,当我尝试使用这个库时,我有两个问题:

1 - 当我需要制作一个zip时,我用来创建一个名为/ temp / username的文件夹。然后,我做了那个拉链。在firefox上,当我在客户端发送文件时,它在zip文件名的开头添加语法_temp_username_filename.zip。为什么这样?

2 - 我下载了zip,我将其打开,然后将txt打开到此文件中。当我关闭它时,winrar询问我是否要插入新的“数据”,但我不添加任何数据。我只是打开和关闭。为什么呢?

我知道,这是一个奇怪的问题,但也许有人遇到同样的问题!干杯

1 个答案:

答案 0 :(得分:1)

  1. 输出文件名_temp_username_filename.zip来自您使用header("Content-Disposition: attachment; filename=$zipstring");。您试图嵌入斜杠/字符,Firefox不允许这些字符。它会将/转换为_。解决方案:如果您不喜欢该文件名,请在发送该标题之前将$zipstring更改为其他内容。

  2. 这是Winrar特定的行为,与生成的ZIP文件几乎没有关系。解决方案:不要使用Winrar。