La commande copy avec PHP
bigbik
Messages postés
165
Statut
Membre
-
bigbik Messages postés 165 Statut Membre -
bigbik Messages postés 165 Statut Membre -
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
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:
- Php copier fichier
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
21 réponses
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.
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
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
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);
?>
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;
}
?>
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
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);
?>
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
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
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
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.
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
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 ???!!!