Problème avec la fonction copy en php
waldner77
Messages postés
196
Statut
Membre
-
lol -
lol -
Bonjour,
voila j'ai une erreur avec la fonction copy et je ne ces pas comment je pourrais le résoudre.
je met mon code avec svp aidez moi
***********************************
************test.php*****************
***********************************
<html>
<head>
<title>Creation de la table</title>
</head>
<body>
<div align="center">
<form method="post" action="test2.php" ">
<?php
// Notez que !== n'existait pas avant 4.0.0-RC2
echo "<CENTER><H4> Aujourd'hui le " . date('d/m/Y à H:m:s ')."</H4>";
if ($handle = opendir('A_DIFFUSER')) {
echo '<select name="valeur[]" size=30 multiple>';
/* Ceci est la façon correcte de traverser un dossier. */
while (false !== ($file = readdir($handle))) {
if($file != ".." && $file != ".")
{
echo "<option> $file\n </option>"; //multiselect
}
}
echo '</SELECT></CENTER>';
closedir($handle);
}
?>
<?php
// information pour la connection à le DB
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'enregistrement';
// connection à la DB
$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());
// requête SQL qui compte le nombre total d'enregistrement dans la table et qui
//récupère tous les enregistrements
$select = 'SELECT nom,prenom FROM membre';
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
echo '<select name="valeur[]" size=30 multiple>';
/* Ceci est la façon correcte de traverser un dossier. */
while($row = mysql_fetch_row($result)){
$Nom = $row[0];
$prenom = $row[1];
echo '<option>'.$Nom. ' ' .$prenom.'</option>';
}
echo '</SELECT></CENTER>';
// Deconnexion de la base de donnees
mysql_close();
?>
<input type="submit" value="Valider">
</form>
</div>
</body>
</html>
************************
*******test2.php**********
************************
<html>
<body>
<?php
if(isset($_POST['valeur']) && !empty($_POST['valeur']))
{ echo "toto";
$Col1_Array = $_POST['valeur'];
foreach($Col1_Array as $select)
{
//affichage des valeurs sélectionnées
echo "$select";
copy( "C:\wamp\www\test projet\test3\A_DIFFUSER\.$select" , "C:\wamp\www\test projet\test3\A VERIFIER\.$select")
echo "toto";
}
}
}
?>
</body>
</html>
et voila le résultat de mon erreur
totoSEL20080-21 (-).pdf
Warning: copy(C:\wamp\www est projet est3\A_DIFFUSER\.SEL20080-21 (-).pdf) [function.copy]: failed to open stream: Invalid argument in C:\wamp\www\test projet\test3\test2.php on line 15
totoSEL20080-4X (B).pdf
Warning: copy(C:\wamp\www est projet est3\A_DIFFUSER\.SEL20080-4X (B).pdf) [function.copy]: failed to open stream: Invalid argument in C:\wamp\www\test projet\test3\test2.php on line 15
totoSEL20080-6 (A).pdf
etc...
voila j'ai une erreur avec la fonction copy et je ne ces pas comment je pourrais le résoudre.
je met mon code avec svp aidez moi
***********************************
************test.php*****************
***********************************
<html>
<head>
<title>Creation de la table</title>
</head>
<body>
<div align="center">
<form method="post" action="test2.php" ">
<?php
// Notez que !== n'existait pas avant 4.0.0-RC2
echo "<CENTER><H4> Aujourd'hui le " . date('d/m/Y à H:m:s ')."</H4>";
if ($handle = opendir('A_DIFFUSER')) {
echo '<select name="valeur[]" size=30 multiple>';
/* Ceci est la façon correcte de traverser un dossier. */
while (false !== ($file = readdir($handle))) {
if($file != ".." && $file != ".")
{
echo "<option> $file\n </option>"; //multiselect
}
}
echo '</SELECT></CENTER>';
closedir($handle);
}
?>
<?php
// information pour la connection à le DB
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'enregistrement';
// connection à la DB
$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());
// requête SQL qui compte le nombre total d'enregistrement dans la table et qui
//récupère tous les enregistrements
$select = 'SELECT nom,prenom FROM membre';
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
echo '<select name="valeur[]" size=30 multiple>';
/* Ceci est la façon correcte de traverser un dossier. */
while($row = mysql_fetch_row($result)){
$Nom = $row[0];
$prenom = $row[1];
echo '<option>'.$Nom. ' ' .$prenom.'</option>';
}
echo '</SELECT></CENTER>';
// Deconnexion de la base de donnees
mysql_close();
?>
<input type="submit" value="Valider">
</form>
</div>
</body>
</html>
************************
*******test2.php**********
************************
<html>
<body>
<?php
if(isset($_POST['valeur']) && !empty($_POST['valeur']))
{ echo "toto";
$Col1_Array = $_POST['valeur'];
foreach($Col1_Array as $select)
{
//affichage des valeurs sélectionnées
echo "$select";
copy( "C:\wamp\www\test projet\test3\A_DIFFUSER\.$select" , "C:\wamp\www\test projet\test3\A VERIFIER\.$select")
echo "toto";
}
}
}
?>
</body>
</html>
et voila le résultat de mon erreur
totoSEL20080-21 (-).pdf
Warning: copy(C:\wamp\www est projet est3\A_DIFFUSER\.SEL20080-21 (-).pdf) [function.copy]: failed to open stream: Invalid argument in C:\wamp\www\test projet\test3\test2.php on line 15
totoSEL20080-4X (B).pdf
Warning: copy(C:\wamp\www est projet est3\A_DIFFUSER\.SEL20080-4X (B).pdf) [function.copy]: failed to open stream: Invalid argument in C:\wamp\www\test projet\test3\test2.php on line 15
totoSEL20080-6 (A).pdf
etc...
Configuration: Windows Vista Firefox 3.0.10
17 réponses
-
Et comme ça:
//affichage des valeurs sélectionnées
echo $select;
echo( "C:\wamp\www\test projet\test3\A_DIFFUSER\\".$select , "C:\wamp\www\test projet\test3\A VERIFIER\\".$select);
echo "toto";
Il faut doubler le \ sinon le " n'est pas pris en compte et il considère $select comme une chaine de carac et non comme une variable. -
maintenant sa me fait sa
totoSEL20080-19 (A).pdf
Warning: copy(C:\wamp\www est projet est3\A_DIFFUSER\SEL20080-19 (A).pdf) [function.copy]: failed to open stream: Invalid argument in C:\wamp\www\test projet\test3\test2.php on line 15
totoSEL20080-20 (A).pdf
Warning: copy(C:\wamp\www est projet est3\A_DIFFUSER\SEL20080-20 (A).pdf) [function.copy]: failed to open stream: Invalid argument in C:\wamp\www\test projet\test3\test2.php on line 15
totoSEL20080-21 (-).pdf
Warning: copy(C:\wamp\www est projet est3\A_DIFFUSER\SEL20080-21 (-).pdf) [function.copy]: failed to open stream: Invalid argument in C:\wamp\www\test projet\test3\test2.php on line 15
totoSEL20080-4X (B).pdf -
Oups, j'avais pas vu ça... Si ton formulaire envoie des fichiers, il doit y avoir dans la balise d'ouverture de formulaire enctype="multipart/form-data">
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
je ne voit pas du tout ou il faut l'utiliser ces pour sa
-
bon, oublie ça, j'ai dis une connerie. Ensuite j'ai corrigé quelques erreurs de syntaxe:
<html> <head> <title>Creation de la table</title> </head> <body> <div align="center"> <form method="post" action="test2.php" "> <?php // Notez que !== n'existait pas avant 4.0.0-RC2 echo "<CENTER><H4> Aujourd'hui le " . date('d/m/Y à H:m:s ')."</H4>"; if ($handle = opendir('A_DIFFUSER')) { echo '<select name="valeur[]" size=30 multiple>'; /* Ceci est la façon correcte de traverser un dossier. */ while (false !== ($file = readdir($handle))) { if($file != ".." && $file != ".") { echo "<option> $file\n </option>"; //multiselect } } echo '</SELECT></CENTER>'; closedir($handle); } ?> <?php // information pour la connection à le DB $host = 'localhost'; $user = 'root'; $pass = ''; $db = 'enregistrement'; // connection à la DB $link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() ); mysql_select_db($db) or die ('Erreur :'.mysql_error()); // requête SQL qui compte le nombre total d'enregistrement dans la table et qui //récupère tous les enregistrements $select = 'SELECT nom,prenom FROM membre'; $result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() ); echo '<select name="valeur[]" size=30 multiple>'; /* Ceci est la façon correcte de traverser un dossier. */ while($row = mysql_fetch_row($result)){ $Nom = $row[0]; $prenom = $row[1]; echo '<option>'.$Nom. ' ' .$prenom.'</option>'; } echo '</SELECT></CENTER>'; // Deconnexion de la base de donnees mysql_close(); ?> <input type="submit" value="Valider"> </form> </div> </body> </html> ************************ *******test2.php********** ************************ <html> <body> <?php if(isset($_POST['valeur']) && !empty($_POST['valeur'])) { echo "toto"; $Col1_Array = $_POST['valeur']; foreach($Col1_Array as $select) { //affichage des valeurs sélectionnées echo "$select"; copy( "C:\wamp\www\test projet\test3\A_DIFFUSER\\".$select , "C:\wamp\www\test projet\test3\A VERIFIER\\".$select); echo "toto"; } } ?> </body> </html>
Pour finir, ton erreur te dis que:
- soit le dossier que tu cherches à ouvrir n'existe pas
- soit le chemin que tu as entré n'est pas le bon
- soit tu n'as pas les droits pour écrire dans ce dossier. -
1- bas le chemin il est bon car il affiche le contenue du listage de mon répertoire.
2-le dossier il est présent car on arrive a lire a l'intérieur.
3-je ne cherche pas a l'écrire mais a copier le fichier pdf dans un autre répertoire, grace au multiselect
donc la je suis complètement perdu a 100%
merci encore pour le coup de main c'était gentil de ta part -
Bonjour
Il vaut mieux utiliser des simples quotes, car entre doubles quotes d'autres combinaisons sont interprétées comme le \t (dans \test)
copy( 'C:\wamp\www\test projet\test3\A_DIFFUSER\\'.$select , 'C:\wamp\www\test projet\test3\A VERIFIER\\'.$select);
regarde bien le chemin dans le message d'erreur, c'est C:\wamp\www est projet est3 au lieu de C:\wamp\www \test projet \test3 -
j'ai trouver la solution.
il faut m'être a chaque fois une double quotes.
voila mon copy
copy( "C:\\wamp\\www\\test projet\\test3\\A_DIFFUSER\\".$select , "C:\\wamp\\www\\test projet\\test3\\A VERIFIER\\".$select);
et grace a sa j'ai pu copier sur l'autre fichier.
merci pour le coup main -
-
As-tu compris pourquoi il fallait les doubler, ou as-tu fait ça au pif ?
Tu n'avais pas besoin de tous les doubler...
copy( "C:\wamp\www\\test projet\\test3\A_DIFFUSER\\".$select , "C:\wamp\www\\test projet\\test3\A VERIFIER\\".$select); -
j'ai fait sa au piff mais je pence qe c'est a cause de l'espace qui a entre test projet
-
Aucun rapport avec l'espace :-)
c'est parce que le \ sert à introduire certains caractères spéciaux dans les chaînes à guillemets doubles : \n, \r, \t... voir la liste : https://www.php.net/manual/fr/language.types.string.php#language.types.string.syntax.double
Dans les chaînes à guillemets simples, il n'y a que le \' et le \\ -
merci beaucoup pour l'explication ne je savait pas du tout, comme sa je ne vais plus faire l'erreur.
MERKI MERKI MERKI -
comme sa je ne vais plus faire l'erreur.
Faut pas dire ça ! J'ai beau le savoir, je me trompe encore ;-) -
je suis tout a fait d'accord avec toi mais je pense que je ne vais pas refaire l'erreur pendant un moment.
MERKI encore -