2009-11-12 7 views
1

Je trouve cette question (ici) sur la copie d'un fichier sans écraserdossier Copie sans écraser

How do you copy a file in PHP without overwriting an existing file?

Ce que je besoin est un script php pour copier tous les fichiers dans un dossier , il y a aussi quelques sous-dossiers; donc ça devrait être récursif.

Je dois le transférer via FTP, donc je ne sais pas si cela fait une grande différence dans l'approche.

Merci beaucoup d'avance!

+1

Puis-je demander ce qui exige l'existence de ce script écrit en PHP. Il semble que l'utilisation de rsync vous donnerait un meilleur kilométrage pour l'effort impliqué. –

+0

J'ai besoin de copier les fichiers de base de données du serveur SQL (.bak, etc), donc assez gros fichiers. Le serveur sur lequel le script est exécuté, en tant que serveur source sur lequel les fichiers sont en tant que serveur de destination, est un serveur Linux. Je pensais à PHP parce que tous les autres scripts sont en PHP mais d'autres suggestions sont les bienvenues. Thx – laurens

Répondre

3

Essayez ce, à partir a comment sur la page de manuel pour copy:

function recurse_copy($src,$dst) { 
    $dir = opendir($src); 
    @mkdir($dst); 
    while(false !== ($file = readdir($dir))) { 
     if (($file != '.') && ($file != '..')) { 
      if (is_dir($src . '/' . $file)) { 
       recurse_copy($src . '/' . $file,$dst . '/' . $file); 
      } 
      else { 
       copy($src . '/' . $file,$dst . '/' . $file); 
      } 
     } 
    } 
    closedir($dir); 
} 

Notez que cette solution se fera un plaisir d'écraser tous les fichiers qui existent dans le répertoire $dst. Si vous voulez éviter cela, vous pouvez envelopper le code this question dans une fonction et appeler cette fonction au lieu de copy.

Je ne suis pas sûr de ce que vous voulez transférer via FTP, si vous clarifiez que je serai heureux de modifier ma réponse.

+0

Très gentil, merci pour la réponse. Est-ce que cette solution fonctionnera pour FTP? Je veux transférer quelques dossiers avec des fichiers de base de données SQL (assez gros fichiers ...). Je voudrais exécuter le script sur un serveur différent du serveur sur lequel les bases de données sont activées. Et la destination est un autre serveur. L'écrasement devrait être totalement évité car les fichiers sont si gros. Merci d'avance! – laurens

+0

Je suis un peu confus par votre commentaire - désolé si je suis dense. Si vous voulez récupérer les fichiers du dossier distant, vous devez faire un peu plus de travail (voir 'ftp_get' et' ftp_nlist'); Si vous souhaitez placer les fichiers sur un serveur distant (afin que vous exécutiez le processus de sauvegarde à partir du serveur source), voir 'ftp_put'. Mais Ed a raison - PHP n'est certainement pas l'outil pour ce travail. –

+0

Mon mauvais. Apparemment, je dois chercher une solution bash (?) – laurens

0

Il y a une grande différence entre la copie du système de fichiers et FTP copie que vous pouvez jeter un oeil à la PEAR FTP Class

Questions connexes