PHP - проблемы с pclzip.lib - PullRequest
       1

PHP - проблемы с pclzip.lib

0 голосов
/ 19 октября 2010

Не знаю, если кто-то использует эту библиотеку для создания (на стороне сервера) 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;

В любом случае, когда я пытаюсь использовать эту библиотеку, у меня возникают 2 проблемы:

1 - когда мне нужно сделать zip, я использую для создания папки с именем / temp / username. Затем я делаю этот почтовый индекс. В Firefox, когда я отправляю файл на клиент, он добавляет в начале имени файла zip синтаксис _temp_username_filename.zip Почему это?

2 - я загружаю zip, открываю и открываю txt в этот файл. Когда я закрываю его, winrar спрашивает меня, хочу ли я вставить новые «данные», но я не добавляю никаких данных. Я просто открываюсь и закрываюсь. Почему?

Я знаю, это странный вопрос, но, возможно, у кого-то были такие же проблемы! Приветствия

1 Ответ

1 голос
/ 19 октября 2010
  1. Выходное имя файла _temp_username_filename.zip происходит от использования вами header("Content-Disposition: attachment; filename=$zipstring");. Вы пытались вставить косую черту / символов, которую Firefox не позволяет. Любой / превращается в _. Решение: Если вам не нравится это имя файла, перед отправкой этого заголовка измените $zipstring на что-то другое.

  2. Это поведение, специфичное для Winrar, и имеет мало общего с созданным ZIP-файлом. Решение: не используйте Winrar.

...