2017-09-25 1 views
2

Donc, je créer un fichier zip avec un mot de passe:Créer une archive zip avec un mot de passe

function createZip($fileName,$fileText,$zipFileName,$zipPassword) 
    { 

     shell_exec('zip -P '.$zipPassword.' '.$zipFileName.'.zip '.$fileName); 
     unlink($fileName); 
     return file_exists($zipFileName.'.zip'); 
    } 


    $filex = "/backup/home/fyewhzjp/long_location_of_a_file/temp/data/map10/data.txt"; 
    // $file_content = 'test'; 
    $archive = "/backup/home/fyewhzjp/long_location_of_a_file/temp/data/map10/archive"; 

    createZip($filex,$file_content,$archive,$pass); 

Et cela fonctionne. Je reçois un archive.zip dans mon dossier /temp/data/map sur le site Web. Mais, quand j'ouvre mes archives, je peux voir un tas de dossiers, et data.txt à la fin, disons que ce sera /backup/home/fyewhzjp/long_location_of_a_file/temp/data/map10/data.txt Donc, je dois laisser seulement data.txt dans mon dossier, sans autres dossiers. Comment puis-je le faire?

Répondre

1

Si quelqu'un va faire face au même problème que moi, voici la solution: il suffit d'ajouter -jrq après zip dans shell_exec comme ceci:

shell_exec('zip -jrq -P '.$zipPassword.' '.$zipFileName.'.zip '.$fileName); 

Après cela, le chemin complet sera ignoré.

1

Plutôt que d'utiliser shell_exec pourquoi ne pas simplement utiliser la classe ZipArchive avec les fonctions ZipArchiveOpen::open et ZipArchive::setPassword, il semble que cela rendrait les choses beaucoup plus facile.

<?php 
$zip = new ZipArchive; 
$res = $zip->open('test.zip', ZipArchive::CREATE); 
if ($res === TRUE) { 
    $zip->addFromString('test.txt', 'file content goes here'); 
    $zip->addFile('data.txt', 'entryname.txt'); 
    $zip->setPassword('your_password_here'); 
    $zip->close(); 
    echo 'ok'; 
} else { 
    echo 'failed'; 
} 
?> 

Note: Cette fonction définit uniquement le mot de passe à utiliser pour décompresser l'archive; il ne transforme pas un ZipArchive protégé par mot de passe en un ZipArchive protégé par mot de passe.

+0

Je suis désolé, l'anglais n'est pas ma langue maternelle, mais voulez-vous dire que je ne peux utiliser "setPassword" pour déchiffrer mon archive zip, et pas pour créer et protéger mes archives avec un mot de passe? –

+0

Correct, cela ne fonctionne pas comme prévu ... – Milkmannetje