2009-10-12 10 views
0

Je souhaite déplacer tous les fichiers d'un dossier vers un autre. mon code est comme suit. dans ce que j'ai fait un dossier dans lequel je veux copier tous les fichiers du dossier templatsCopier un fichier d'un dossier à un autre

$doit = str_replace(" ", "", $slt['user_compeny_name']); 
mkdir("$doit"); 
$source = "templat/"; 
$target = $doit . "/"; 
$dir = opendir($source); 
while (($file = readdir($dir)) !== false) { 
    copy($source . $file, $target . $file); 
} 

Cela fonctionne très bien. copier tous les fichiers mais donner avertissement que le premier argument pour copier() fonction ne peut pas être un répertoire

peut me aider dès que possible

Répondre

3
if ($file != "." && $file != "..") { 
// copy 
} 
4

READDIR lira tous enfants dans un répertoire, y compris d'autres dirs , et dirs 'virtuels' comme. et .. (lien vers le répertoire racine et parent, resp.) Vous devrez vérifier cela et empêcher la fonction copy() pour ces instances.

while (($file = readdir($dir)) !== false) 
{ 
    if(!is_dir($file)) 
    { 
     copy($source.$file, $target.$file); 
    } 
} 
3

Vous ne comptabilisons pas les . et les fichiers .. en haut du répertoire. Cela signifie que la première chose qu'il essaie de copier est "\ template". ce qui serait le même que d'essayer de copier le répertoire.

ajouter quelque chose comme:

if ($file !== "." && $file !== "..") 
... 
3

opendir() comprendra des articles . et .. selon le documentation.

Vous devrez les exclure en utilisant le code dans les autres commentaires.

+0

merci! Maintenant ça fonctionne bien – Rajanikant

0

Je sais, cette question est assez ancienne, mais aussi les réponses. Je ressens le besoin de montrer de nouvelles méthodes, qui peuvent être utilisées pour exécuter la tâche demandée.

Entre-temps, les objets ont été introduits avec beaucoup plus de fonctionnalités et de possibilités. Inutile de dire que les autres réponses fonctionneront toujours aussi bien.

Mais ici nous allons, en utilisant la DirectoryIterator:

$szSrcFolder = 'source_folder'; 
$szTgtFolder = 'target_folder'; 

foreach (new DirectoryIterator($szSrcFolder) as $oInfo) 
    if ($oInfo->isFile()) 
     copy($oInfo->getPathname(), $szTgtFolder . DIRECTORY_SEPARATOR . $oInfo->getBasename()); 

Rappelez-vous, dans ce script, tous les chemins sont par rapport au répertoire de travail du script lui-même.

Je pense que cela s'explique, mais nous allons jeter un coup d'oeil. Ces quelques lignes parcourront tout le contenu du dossier source et vérifieront s'il s'agit d'un fichier et le copieront dans le dossier cible, en conservant le nom du fichier d'origine.

Questions connexes