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
Bonsoir,

J'ai un problème assez particulier, j'explique :
je veux interroger une base de données et sortir le résultat de ma requête dans un fichier csv ou txt au choix puis réutiliser ce fichier via un autre script php qui doit récupérer les informations du fichier csv ligne par ligne puis les concaténer avec de la lancer en boucle la commande copy sachant que chaque ligne concaténée correspond au nom du fichier qui sera la variable source et de destination.

J'espère que j'ai bien expliqué ma situation. Merci d'avance pour votre aide



A voir également:

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
Je pense que ça va marchait. la commande copy ne fonctionne pas de la sorte avec php???
1
Utilisateur anonyme
13 avril 2011 à 08:13
Bonjour,

Et dans ce que vous avez listé, qu'est-ce qui vous pose problème ?
0
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
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 ??
0
Utilisateur anonyme
13 avril 2011 à 10:04
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.
0
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
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
0
Utilisateur anonyme
13 avril 2011 à 10:24
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
0

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
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
0
Utilisateur anonyme
13 avril 2011 à 10:37
Une chose après l'autre
Vérifie déjà que ta commande copy fonctionne
donc fait un fichier test.php qui copie un fichier du répertoire a au répertoire b et vérifie que la commande fonctionne
la boucle viendra plus tard, quand quelque chose ne fonctionne pas il faut agir étape par étape
0
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
Oui la commande marche. quand j'écris le nom du fichier à copier en dur
0
Utilisateur anonyme
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);

?> 
0
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
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
0
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
<?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; 
} 

?>  
0
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
je ne comprend pas. mon fichier csv est ok et pourtant j'ai l'erreur :

erreur, impossible ouvrir fichier.csv
0
Utilisateur anonyme
13 avril 2011 à 11:26
avez vous mis le chemin complet du fichier ?
0
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
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);
?>
0
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
je ne sais pas pourquoi il me dit impossible d'ouvrir le fichier
0
Utilisateur anonyme
13 avril 2011 à 11:53
Il faut que vous précisiez le chemin complet du fichier
0
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
je l'ai fais :

erreur, impossible ouvrir C:\wamp\www est_copie ichier.csv
0
Utilisateur anonyme
13 avril 2011 à 12:23
Heu...

C'est un drôle de nom de fichier ça
0
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
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
0
Utilisateur anonyme
13 avril 2011 à 13:39
dans quel répertoire est votre fichier fichier.csv (chemin complet) ?
dans quel répertoire doivent être les fichiers à copier (chemin complet) ?

Parce que dans votre code, vous ne spécifiez pas ces chemins, il faut le faire.
0
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
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
0
Utilisateur anonyme
13 avril 2011 à 13:56
Copie récursive ?
0
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
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
0
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
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
0
Utilisateur anonyme
13 avril 2011 à 14:22
Ce n'est pas récursif ça.
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;
}


0
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.
0
Utilisateur anonyme
14 avril 2011 à 09:24
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.
0
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
J'ai fais des echo. les chemins affcihés sont correcte n'empêche le message d'erreur persiste
0
Utilisateur anonyme
14 avril 2011 à 14:38
avez vous fait un essai d'une des copies dans un autre script avec les mêmes noms de fichiers etc ?
Parce que si les echo sont bons, et que la copie marche, y a un os dans votre code quelque part, si la copie d'essai ne fonctionne pas c'est un problème de droit ou de chemin
0
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
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
0
Utilisateur anonyme
14 avril 2011 à 15:56
il n'y a aucune raison que ça ne concatène pas correctement
0
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
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 ???!!!
0
Utilisateur anonyme
14 avril 2011 à 16:27
vos noms dans le fichier sont sans accents, sans espaces ?
0