[PHP] copie de fichiers

fanny -  
kij_82 Messages postés 4260 Statut Contributeur -
Bonjour,
Je souhaiterai deplacer tout le contenu d'un repertoire qui est sur mon serveur (temp/photos/) vers un autre dossier (photos/) en effacant au préalable le contenu de ce dossier.

Plus en détail
1 ere fois que je lance le script :
dans le dossier temp/phosos/ il y aurait : photo1.jpg, photo2.jpg
dans le dossier photos/ rien

Je voudrais que ca deplace les 2 fichiers dans le dossier photos

2 ème lancement (et pour les futurs lancements)
-Effacer le contenu du dossier photos/
puis envoyer tous les fichiers (sans savoir combien il y en a et comment ils s'appelent) de temp/photos vers photos.

En vous remerciant par avance si quelqu'un peut m'aider

Fanny
A voir également:

1 réponse

kij_82 Messages postés 4260 Statut Contributeur 857
 
Bonjour,

Voilà un petit code à copier / coller dans un fichier :
(Code testé en local chez moi, donc ça devrait fonctionner)

<?php

	function cleanDirectory ( $directory ){
		
		// --- List all files included in input directory
		$filesList = listFile($directory);
		// --- Roll on this list
		for ($i = 0; $i < sizeof($filesList); $i++){
			// --- Retrieve current file name
			$filename = $filesList[$i];
			// --- Check if is a directory or a file
			if ( is_dir($directory."/".$filename) ){
				// --- Current file is a directory, call the same function on this new directory
				cleanDirectory($directory."/".$filename);
				// --- And 
			}
			// --- And for all other cases (included directory case), remove current file
			echo "<BR>&nbsp;&nbsp;unlink file : ".$directory."/".$filename;
			unlink($directory."/".$filename);
		}
		
	}
	
	function copyDocuments ( $inputDirectory, $outputDirectory ){
		
		// --- Parse the input directory to retrieve copy all files to the output directory
		$filesList = listFile($inputDirectory);
		
		// --- Roll on the file list
		for ($i = 0; $i < sizeof($filesList); $i++){
			// --- Retrieve file name
			$filename = $filesList[$i];
			// --- Check if current file is a directory or a file
			if ( is_dir($inputDirectory."/".$filename) ){
				// --- Call the same function on current directory
				copyDocuments($inputDirectory."/".$filename, $outputDirectory);
			}
			else {
				// --- Copy the file in the output directory
				if ( ! copy($inputDirectory."/".$filename,$outputDirectory."/".$filename) ){
					// --- Report copy error :
					echo "<BR>[Error] ".$inputDirectory."/".$filename;
				}
				else
					echo "<BR>[Copied] ".$inputDirectory."/".$filename;
			}
			
		}
		
	}

	function listFile ( $directory ){
			
		$filelist = null;
		$i = 0;
		
		if ($dir = @opendir($directory)) {
			while (($file = readdir($dir)) != false)
				if($file != ".." && $file != "." ) 
					$filelist[$i++] = $file;
			
			closedir($dir);
		}
		// --- Tri de la liste
		if( $filelist != null && sizeof($filelist) != '0')
			sort($filelist);
		
		return $filelist;
	}


 // --- How to use these 2 functions :
 $outputDirectory = "output";
 $inputDirectory 	= "input";
 // 1°) Clean output directory :
 echo "<BR><b>Clean output directory ".$outputDirectory." :</b>";
 cleanDirectory($outputDirectory);
 // 2°) Copy documents from input directory to output directory :
 echo "<BR><b>Copy documents :</b>";
 copyDocuments($inputDirectory, $outputDirectory);

?>


Bien sur tu peux toujours ajouter des variantes comme sélection des fichiers en fonction de leur extension (pour ne copier que telle ou telle sorte de fichier), copie de l'arborescence du fichier d'input dans le fichier output (plutôt que de copier tous les fichiers à la racine du répertoire de sortie)
A toi d'adapter le code selon tes besoins.
1