Archivage des fichiers MP3

Mammouth du PHP | 725 Messages

21 sept. 2012, 05:45

Bonjour,

Je voudrais archiver mes fichiers MP3 dans un dossier archive nomme (site.com.zip); je fais une commande de ligne Linux:
<?php
			// archiver le dossier MP3
			$path2mp3 = '../Downloads/Medias/MP3/';
			$site = 'site.com';
			
			// archive name
			$compressFolder = $site.'.zip';
			
			$cmd = "zip -r $compressFolder $path2mp3";
			
			$compressMP3 = exec($cmd);
			
			if($compressMP3)
			{
				echo 'Done';
			}
			else
			{
				echo 'Not Done';
			}

?>

Quand je l'execute en PHP ca marche pas, mais quand je l'execute en terminal:

Code : Tout sélectionner

zip -r site.com.zip /home/rimie/www/Downloads/Medias/MP3
ca marche, MAIS, quand je dezipp le fichier je trouve que l'archive contient tous les dossiers et sous dossiers a partir de 'home' jusqu'au repertoire MP3

Comment puis je archiver le repertoire MP3 seulement, en executant la commande en PHP??

Merci

ViPHP
ViPHP | 2577 Messages

21 sept. 2012, 08:50

Il faut vérifier qu'apache a bien les droits d''écriture pour créer le fichier. Ce n'est pas le cas en général dans le répertoire d'un utilisateur. Apache fonctionne généralement en temps que www-data du groupe www-data. Dans le répertoire d'un utilisateur les fichiers ne sont autorisés en écriture qu'a rimie du groupe rimie.

Pour vérifier les droits d'écriture le plus simple est d'être root et de passer www-data : su puis su www-data ou sudo su www-data.

Pour ce qui est de la cible, ca dépends des positions relatives. Essayes déjà avec des chemins absolus, pour lancer la commande, comme tu le fais en ligne de commande. Tu tenteras le ../ après.

Regarde dans les différents moyens de lancer une commande celui qui permet de récupérer le résultat et fait la commande sous la forme : commande &2>&1 pour avoir les messages d'erreur. Une simple commande ls &2>&1 peut être utile pour récupérer les sorties pour commencer.

Mammouth du PHP | 725 Messages

28 sept. 2012, 03:52

Desolee pour le retard, j'avais pas access au serveur.
Il faut vérifier qu'apache a bien les droits d''écriture pour créer le fichier.
Je suis connectee en tant que rimie, et j'ai tous les droits
Regarde dans les différents moyens de lancer une commande celui qui permet de récupérer le résultat et fait la commande sous la forme : commande &2>&1 pour avoir les messages d'erreur. Une simple commande ls &2>&1 peut être utile pour récupérer les sorties pour commencer.
Je vais essayer cette commande

J'ai pense a utiliser la bibliotheque ZIP:
<?php
$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {
	//echo 'oki';
$zip->addFile('file.txt', 'newname.txt');
    $zip->close();
    echo 'ok';
} else {
    echo 'échec';
}
?>
Le fichier ne s'ajoute pas

Mammouth du PHP | 725 Messages

28 sept. 2012, 11:55

j'ai ajoute l'option que tu m'as dis:
$compressMP3 = exec($cmd ." 2>&1" );
resultat:
sh: zip: command not found
J'ajoute que la librairie zip est active:

Code : Tout sélectionner

zip Zip enabled Extension Version $Id: php_zip.c 294817 2010-02-09 17:51:39Z pajoye $ Zip version 1.9.1 Libzip version 0.9.0

Mammouth du PHP | 725 Messages

28 sept. 2012, 13:27

J'ai essaye avec:
$cmd = "/usr/bin/zip -r $compressFolder $path2mp3";
ca marche, mais le fichier zip va se creer ou exactement, quel chemin?

une erreur ou je sais pas quoi:

Code : Tout sélectionner

updating: ../Downloads/Medias/MP3/001.mp3 (deflated 6%)

Mammouth du PHP | 725 Messages

28 sept. 2012, 15:52

c'est bon, j'ai precise le chemin de destination et ca marche:

Code : Tout sélectionner

/usr/bin/zip -r /home/rimie/www/Downloads/Medias/MP3/site.com.zip ../Downloads/Medias/MP3/001.mp3 adding: ../Downloads/Medias/MP3/001.mp3 (deflated 6%)
le seul soucis comme j'ai precise auparavant, quand je fais unzip du fichier zip:

Code : Tout sélectionner

unzip site.com.zip -d test
j'ouvre le dossier test, et je trouve le repertoire Downloads > Medias > MP3 et puis le fichier 001.mp3, comment faire afin d'avoir quelque chose comme:

Code : Tout sélectionner

test > 001.mp3
j'extracte les fichiers au repertoire test, je trouve les fichiers sans les sous repertoires??

Merci