OVH Cloud OVH Cloud

exec xcopy

3 réponses
Avatar
seb
bonjour,

j'ai une fonction qui doit copier un répertoire.

Sous linux, no pb avec:
exec('cp -R /source /dest');

Sous Windows:
exec('xcopy C:\source C:\dest /e/i');
ne marche pas (ni system, ni passthru) alors que en ligne de commande ça
passe

par contre:
exec('copy C:\source.jpg C:\dest.jpg');
ça fonctionne

Il y a un pb avec xcopy et php ou je fais une bête erreur de synthaxe ?

seb

3 réponses

Avatar
Marc

Il y a un pb avec xcopy et php ou je fais une bête erreur de synthaxe ?



essaie de lancer un .bat avec des arguments figés pour voir.

Avatar
Paul
en PHP, moi je ferais pas comme cela, en fait je n'utiliserais pas la mé
thode "Exec" (qui peut etre désactivée sur certains serveur d'ailleur)

voici la méthode que j'utiliserai :

1. ouvrir le dossier (avec chdir() je crois, en PHP)
2. boucle sur tous les fichiers (sauf . et ..)
3. copier les fichiers un à un (on est dans la boucle) en PHP, avec la
méthode copy()



Le 17 Sep 2004 22:51:16 GMT
"seb" vous écriviez :

bonjour,

j'ai une fonction qui doit copier un répertoire.

Sous linux, no pb avec:
exec('cp -R /source /dest');

Sous Windows:
exec('xcopy C:source C:dest /e/i');
ne marche pas (ni system, ni passthru) alors que en ligne de commande
ça passe

par contre:
exec('copy C:source.jpg C:dest.jpg');
ça fonctionne

Il y a un pb avec xcopy et php ou je fais une bête erreur de synthaxe
?

seb


Avatar
P'tit Marcel

j'ai une fonction qui doit copier un répertoire.

Sous Windows:
exec('xcopy C:source C:dest /e/i');
ne marche pas (ni system, ni passthru) alors que en ligne de commande ça
passe

par contre:
exec('copy C:source.jpg C:dest.jpg');
ça fonctionne

Il y a un pb avec xcopy et php ou je fais une bête erreur de synthaxe ?



à mon avis, copy est une commande interne du DOS (native dans le
COMMAND.COM) alors que xcopy est un exécutable. J'imagine que ta
commande exec est exécutée sans un environnement en place comprenant les
PATH kivonbien et que de ce fait l'exécutable xcopy n'est pas trouvé.

sur le fond, je partage l'opinion de Paul : fait plutot une boucle en
php, ça marchera sur toutes les plate formes (au lieu d'avoir une
variante par OS) et n'exige pas d'accès à la ligne de commande.

donc tu devrais faire un truc du genre :

function copie_repertoire($rep, $rep2) {
if (is_dir($rep)) {
if(!file_exists($rep2)) mkdir($rep2);
if (is_writable($rep2) and ($dh = opendir($rep)) {
while (($fichier = readdir($dh)) !== false) {
if(is_file($fichier)) {
copy("$rep/$fichier", "$rep2/$fichier");
}
if(is_dir($fichier)
and ($fichier <> '.') and ($fichier <> '..')) {
copie_repertoire("$rep/$fichier", "$rep2/$fichier");
}
}
closedir($dh);
}
}
}

(non testé)