La commande copy avec PHP
Fermé
bigbik
Messages postés
159
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
1 juillet 2011
-
12 avril 2011 à 23:52
bigbik Messages postés 159 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 1 juillet 2011 - 15 avril 2011 à 14:58
bigbik Messages postés 159 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 1 juillet 2011 - 15 avril 2011 à 14:58
A voir également:
- Php copier fichier
- Fichier rar - Guide
- Fichier host - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier iso - Guide
21 réponses
bigbik
Messages postés
159
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
1 juillet 2011
1
15 avril 2011 à 14:58
15 avril 2011 à 14:58
Je pense que ça va marchait. la commande copy ne fonctionne pas de la sorte avec php???
Utilisateur anonyme
13 avril 2011 à 08:13
13 avril 2011 à 08:13
Bonjour,
Et dans ce que vous avez listé, qu'est-ce qui vous pose problème ?
Et dans ce que vous avez listé, qu'est-ce qui vous pose problème ?
bigbik
Messages postés
159
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
1 juillet 2011
1
13 avril 2011 à 09:53
13 avril 2011 à 09:53
Bonjour Zébulon,
voici mon code, il marche pas pour la copie en fonction des infos du fichier csv:
<?php
$fichier = "fichier.csv";
$contenu=file_get_contents("fichier.csv");
$splitContainer = split(';', $contenu);
$id = $splitContainer[0];
$genre = $splitContainer[1];
$fichier2 = $id.".wav";
echo $fichier2;
$rep1 =$fichier2;
$rep2 ="./test1/$fichier2";
if(@copy($rep1,$rep2))
{
Echo "Le fichier a été copié";
}
else echo "Erreur";
?>
En fait je sais même pas si c'est la bonne logique sachant que le fichier csv contient plus d'une centaine de ligne et de 4 ou 5 colonnes.
Donc quand le script php recupére les infos normalement il doit faire la copie e tous les fichiers correspondants
Ou dois je mettre la boucle?? pourquoi ce bout de script ne marche pas ??
voici mon code, il marche pas pour la copie en fonction des infos du fichier csv:
<?php
$fichier = "fichier.csv";
$contenu=file_get_contents("fichier.csv");
$splitContainer = split(';', $contenu);
$id = $splitContainer[0];
$genre = $splitContainer[1];
$fichier2 = $id.".wav";
echo $fichier2;
$rep1 =$fichier2;
$rep2 ="./test1/$fichier2";
if(@copy($rep1,$rep2))
{
Echo "Le fichier a été copié";
}
else echo "Erreur";
?>
En fait je sais même pas si c'est la bonne logique sachant que le fichier csv contient plus d'une centaine de ligne et de 4 ou 5 colonnes.
Donc quand le script php recupére les infos normalement il doit faire la copie e tous les fichiers correspondants
Ou dois je mettre la boucle?? pourquoi ce bout de script ne marche pas ??
Bon déjà est-ce que PHP a les droits suffisants pour écrire dans le répertoire /tests1/ ?
De plus si vous écrivez /test1/ il s'agit d'un répertoire à la racine de votre FS.
Ne pas confondre les chemins HTTP et les chemins du FS, pour des fichiers il faut préciser toutes l'arborescence genre /var/www/html/projet/tests1, sinon PHP ne comprend pas.
Ensuite il se peut que le niveau de sécurité PHP n'autorise pas les actions sur votre FS.
De plus si vous écrivez /test1/ il s'agit d'un répertoire à la racine de votre FS.
Ne pas confondre les chemins HTTP et les chemins du FS, pour des fichiers il faut préciser toutes l'arborescence genre /var/www/html/projet/tests1, sinon PHP ne comprend pas.
Ensuite il se peut que le niveau de sécurité PHP n'autorise pas les actions sur votre FS.
bigbik
Messages postés
159
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
1 juillet 2011
1
13 avril 2011 à 10:10
13 avril 2011 à 10:10
oui le dossier se trrouve dans le répertoire www. ce n'est pas un dossier partargé
As tu un script qui peut résoudre mon problème ou a défaut quelles sont les modifs à apporter au mien
As tu un script qui peut résoudre mon problème ou a défaut quelles sont les modifs à apporter au mien
Ce n'est pas un pb de script, mais de chemin et sans doute de droits.
Le chemin des fichiers qui n'est pas bon
Il faut que tu mettes le chemin complet des fichiers depuis la racine de ton file system pour la commande copy, sinon ça ne fonctionne pas. Corrige ça déjà pour voir si ça fonctionne.
Et attention, ce n'est pas parce que ton répertoire est dans www que PHP a des droits d'écriture dessus
Le chemin des fichiers qui n'est pas bon
Il faut que tu mettes le chemin complet des fichiers depuis la racine de ton file system pour la commande copy, sinon ça ne fonctionne pas. Corrige ça déjà pour voir si ça fonctionne.
Et attention, ce n'est pas parce que ton répertoire est dans www que PHP a des droits d'écriture dessus
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
bigbik
Messages postés
159
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
1 juillet 2011
1
13 avril 2011 à 10:30
13 avril 2011 à 10:30
j'ai mis le chemin complet mais toujours rien.
remarque je pense que c'est normal que cela ne marche vu que j'ai pas de boucle qui indique de recupérer ligne après ligne pour la copie. je sais pas comment faire
remarque je pense que c'est normal que cela ne marche vu que j'ai pas de boucle qui indique de recupérer ligne après ligne pour la copie. je sais pas comment faire
bigbik
Messages postés
159
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
1 juillet 2011
1
13 avril 2011 à 10:41
13 avril 2011 à 10:41
Oui la commande marche. quand j'écris le nom du fichier à copier en dur
Utilisateur anonyme
13 avril 2011 à 10:50
13 avril 2011 à 10:50
Je ferais ceci avec CHEMIN étant le chemin jusque www
<?php $fichier = "fichier.csv"; $f=fopen($ficher,'r'); while ($contenu=fgets($f)) { $splitContainer = split(';', $contenu); $id = $splitContainer[0]; $genre = $splitContainer[1]; $fichier2 = $id.".wav"; $rep1 =CHEMIN.'/'.$fichier2; $rep2 =CHEMIN."/test1/$fichier2"; if(@copy($rep1,$rep2)) { Echo "Le fichier a été copié"; } else echo "Erreur"; } fclode($f); ?>
bigbik
Messages postés
159
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
1 juillet 2011
1
13 avril 2011 à 10:58
13 avril 2011 à 10:58
j'ai le message d'erreur :
Warning: fgets(): supplied argument is not a valid stream resource in xxx on line4
Fatal error: Call to undefined function fclode() in in xxx on line 23
Warning: fgets(): supplied argument is not a valid stream resource in xxx on line4
Fatal error: Call to undefined function fclode() in in xxx on line 23
il faut préciser le chemin complet du fichier csv, on est encore ici en file system, pas en HTML
pour fclode($f) c'est fclose($f), doigts boudinés...
pour faire ça mieux
pour fclode($f) c'est fclose($f), doigts boudinés...
pour faire ça mieux
<?php $fichier = CHEMIN_FICHIER."fichier.csv"; if ($f=@fopen($ficher,'r')) { while ($contenu=@fgets($f)) { $splitContainer = split(';', $contenu); $id = $splitContainer[0]; $genre = $splitContainer[1]; $fichier2 = $id.".wav"; $rep1 =CHEMIN.'/'.$fichier2; $rep2 =CHEMIN."/test1/$fichier2"; if(@copy($rep1,$rep2)) { Echo "Le fichier a été copié"; } else echo "Erreur"; } fclode($f); } else { echo 'erreur, impossible ouvrir fichier '.$fichier; } ?>
bigbik
Messages postés
159
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
1 juillet 2011
1
13 avril 2011 à 11:13
13 avril 2011 à 11:13
je ne comprend pas. mon fichier csv est ok et pourtant j'ai l'erreur :
erreur, impossible ouvrir fichier.csv
erreur, impossible ouvrir fichier.csv
bigbik
Messages postés
159
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
1 juillet 2011
1
13 avril 2011 à 11:33
13 avril 2011 à 11:33
oui. avec se script il marche bien :
<?php
//$row = 0;
$handle = fopen("fichier.csv", "r");
while ($data = fgetcsv($handle, 1000, ";")) {
$num = count($data);
$chaine_infos = $data; // On a une chaîne
$array_infos = explode('/', $chaine_infos); // On transforme cette chaîne en array
// Puis on peut afficher le contenu de l'array
echo '<pre>';
print_r($chaine_infos);
echo '</pre>';
}
fclose($handle);
?>
<?php
//$row = 0;
$handle = fopen("fichier.csv", "r");
while ($data = fgetcsv($handle, 1000, ";")) {
$num = count($data);
$chaine_infos = $data; // On a une chaîne
$array_infos = explode('/', $chaine_infos); // On transforme cette chaîne en array
// Puis on peut afficher le contenu de l'array
echo '<pre>';
print_r($chaine_infos);
echo '</pre>';
}
fclose($handle);
?>
bigbik
Messages postés
159
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
1 juillet 2011
1
13 avril 2011 à 11:33
13 avril 2011 à 11:33
je ne sais pas pourquoi il me dit impossible d'ouvrir le fichier
bigbik
Messages postés
159
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
1 juillet 2011
1
13 avril 2011 à 11:59
13 avril 2011 à 11:59
je l'ai fais :
erreur, impossible ouvrir C:\wamp\www est_copie ichier.csv
erreur, impossible ouvrir C:\wamp\www est_copie ichier.csv
bigbik
Messages postés
159
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
1 juillet 2011
1
13 avril 2011 à 13:09
13 avril 2011 à 13:09
j'ai créé un nouveau script de qui m'ouvre bien le fichier mais la copie ne se fait pas. Je comprend pas.
$fp = @fopen("fichier.csv", "r");
set_time_limit(10000);
if($fp){
while (!feof($fp))
{
$ligne = @fgets($fp, 1024);
$split=split(";",$ligne);
$id=$split[0];
$fichier2 = $id.".wav";
$rep1 =$fichier2;
$rep2 ="C:\wamp\www\test_copie\test1\$fichier2";
if(@copy($rep1,$rep2))
{
Echo "Le fichier a été copié";
}
else echo "Erreur";
}
fclose($fp);
} else {
echo 'erreur, impossible ouvrir '.$fichier;
}
pourquoi la copie ne marche pas
$fp = @fopen("fichier.csv", "r");
set_time_limit(10000);
if($fp){
while (!feof($fp))
{
$ligne = @fgets($fp, 1024);
$split=split(";",$ligne);
$id=$split[0];
$fichier2 = $id.".wav";
$rep1 =$fichier2;
$rep2 ="C:\wamp\www\test_copie\test1\$fichier2";
if(@copy($rep1,$rep2))
{
Echo "Le fichier a été copié";
}
else echo "Erreur";
}
fclose($fp);
} else {
echo 'erreur, impossible ouvrir '.$fichier;
}
pourquoi la copie ne marche pas
bigbik
Messages postés
159
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
1 juillet 2011
1
13 avril 2011 à 13:53
13 avril 2011 à 13:53
Je pense pas que ça soit le problème. même si je le spécifie j'ai le même résultat.
Même avec le chemin du fichier au complet j'ai le même résultat. Maintenant qu'il m'ouvre bien le fichier et fait le split, comment puis je procéder pour la copie récursive
Même avec le chemin du fichier au complet j'ai le même résultat. Maintenant qu'il m'ouvre bien le fichier et fait le split, comment puis je procéder pour la copie récursive
bigbik
Messages postés
159
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
1 juillet 2011
1
13 avril 2011 à 14:15
13 avril 2011 à 14:15
Actuellement le fichier ne comporte qu'une colonne et chaque ligne correspond à un nom de fichier
Donc une fois le lifchier csv ouvert et Oui en fait chaque ligne du fichier qui ne comporte actuellement qu'un le split est fait, il faut que le script puisse copier les fichiers dans le dossier test1
C'est ça l'objectif final
Donc une fois le lifchier csv ouvert et Oui en fait chaque ligne du fichier qui ne comporte actuellement qu'un le split est fait, il faut que le script puisse copier les fichiers dans le dossier test1
C'est ça l'objectif final
bigbik
Messages postés
159
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
1 juillet 2011
1
13 avril 2011 à 14:16
13 avril 2011 à 14:16
Actuellement le fichier ne comporte qu'une colonne et chaque ligne correspond à un nom de fichier
Donc une fois que le fchier csv est ouvert et qu'un split est fait, il faut que le script puisse copier les fichiers dans le dossier test1
C'est ça l'objectif final
Donc une fois que le fchier csv est ouvert et qu'un split est fait, il faut que le script puisse copier les fichiers dans le dossier test1
C'est ça l'objectif final
Ce n'est pas récursif ça.
Il faut juste ajouter une boucle comme ceci
Il faut juste ajouter une boucle comme ceci
$fp = @fopen("fichier.csv", "r"); set_time_limit(10000); if($fp){ while (!feof($fp)) { $ligne = @fgets($fp, 1024); $split=split(";",$ligne); // Boucle sur les fichiers foreach($split as $id) { $fichier2 = $id.".wav"; $rep1 =$fichier2; $rep2 ="C:\wamp\www\test_copie\test1\$fichier2"; if(@copy($rep1,$rep2)) { Echo "Le fichier a été copié"; } else echo "Erreur"; } // Boucle sur les fichiers } fclose($fp); } else { echo 'erreur, impossible ouvrir '.$fichier; }
Bonsoir neoprog67,
Je viens de tester le code, malheureusement la copie ne se fait pas. Certes le fichier csv est ouvert et lu mais j'ai ERREUR au moment de la copie. Peux tu tester juste avec un fichier audio. tu mets juste le nom du fichier audio dans la 1ère ligne de la 1ère colonne du fichier csv.
Je viens de tester le code, malheureusement la copie ne se fait pas. Certes le fichier csv est ouvert et lu mais j'ai ERREUR au moment de la copie. Peux tu tester juste avec un fichier audio. tu mets juste le nom du fichier audio dans la 1ère ligne de la 1ère colonne du fichier csv.
Non désolé, je ne peux pas tester, ma config n'est pas comparable, je ne connais pas vos droits sur les répertoires, votre config PHP et cie.
Testez une copie simple dans un code à part. Si ça fonctionne là et si vos variables $rep1 et $rep2 contiennent quelque chose de correct, faites des echo pour vérifier, ça doit fonctionner.
Testez une copie simple dans un code à part. Si ça fonctionne là et si vos variables $rep1 et $rep2 contiennent quelque chose de correct, faites des echo pour vérifier, ça doit fonctionner.
bigbik
Messages postés
159
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
1 juillet 2011
1
14 avril 2011 à 14:02
14 avril 2011 à 14:02
J'ai fais des echo. les chemins affcihés sont correcte n'empêche le message d'erreur persiste
bigbik
Messages postés
159
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
1 juillet 2011
1
14 avril 2011 à 14:44
14 avril 2011 à 14:44
Je pense que c'est au niveau de la variable parce que quand je mets le nom du varaible en dur ($fichier2='test.html')a copie se fait. donc c'est pas un problème de chemin ou de droit.
J'ai peur que cela ne vient d'ici :
$fichier2 = $id.".wav";
j'ai peur qu'il ne concatene pas correctement d'autant que je suis l'amin par défaut du poste
J'ai peur que cela ne vient d'ici :
$fichier2 = $id.".wav";
j'ai peur qu'il ne concatene pas correctement d'autant que je suis l'amin par défaut du poste
bigbik
Messages postés
159
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
1 juillet 2011
1
14 avril 2011 à 16:02
14 avril 2011 à 16:02
C'est ce que je me disais aussi. Maintenant que l'on sait que c'est pas un problème de dossier ,ni de droit vu que la copie se fait quand on donne une valeur correspondante nom au fichier à copier à la variable.
La question est de savoir d'où vient le blocage???!!! pourquoi la copie ne se fait pas si le script prend l'info depuis le fichier csv ???!!!
La question est de savoir d'où vient le blocage???!!! pourquoi la copie ne se fait pas si le script prend l'info depuis le fichier csv ???!!!