upload et lecture d'un fichier xml

Eléphant du PHP | 288 Messages

15 nov. 2007, 11:30

Bonjour à tous

J'ai une forme qui a un input de type FILE. Quand l'usagé soumet le formulaire, j'upload le fichier xml sur mon serveur. Jusque là tout va bien. Une fois le fichier sur mon serveur, j'ai besoin de le traiter. C'est la le problème. cette ligne ne marche plus.
$xml = simplexml_load_file($path);
Le path est correct puisque quand je lui donne le nom d'un fichier qui est deja sur le serveur ,ca marche, mais des que je lui donne le nom du fichier qui vient d'être uploader ca marche plus. Je met le bout de code
 if (move_uploaded_file($_FILES['fichierXML']['tmp_name'],$destination_dir.DIRECTORY_SEPARATOR.$destination_file)) 
				 {		
		
	
					
					$path     = 'xml/'.$_FILES['fichierXML']['name'];
					$i        = 2;
					$fonction = new fonction();
					$con      = new connection("xxxxx");
					echo $path;
					$xml = simplexml_load_file($path);
					var_dump($xml);
					$cmp   = $xml->TextField1[0];
					$lname = $xml->TextField1[1];
					$login = $xml->TextField1[2];
					$email = $xml->TextField1[3];
					$pass1 = $xml->TextField1[4];
					$phone = $xml->TextField1[5];
					$fname = $xml->TextField1[6];
J'ai l'impression que même quand le move_uploaded_file renvoie true cela ne veut pas dire que le fichier à fini d'être uploader. Quelqu'un aurait une idée.

Merci d'avance

Mammouth du PHP | 2937 Messages

15 nov. 2007, 12:54

Est-ce que l'extension SimpleXML est activée ? As-tu un message d'erreur qui s'affiche ? Si oui, lequel ? Enfin, as-tu vérifié que le fichier XML était bel et bien chargé et enregistré dans le répertoire voulu ?

Eléphant du PHP | 288 Messages

15 nov. 2007, 17:40

salut Victor,

si tu as bien lu mon premier message ca laisse sous entendre que simpleXML est belle et bien activé puisque je dis clairement que quand je donne le nom d'un fichier xml etant sur le serveur le script marche parfaitement. Pour la deuxieme question, c 'est la je crois qu'il ya un problème. j'ai l'impression que
if (move_uploaded_file($_FILES['fichierXML']['tmp_name'],$destination_dir.DIRECTORY_SEPARATOR.$destination_file)) 
                 { 
on rentre dans le if quand le fichier a été uploadé, parcontre je crois qu'il y a un petit delais avant qu'il soit sur le serveur. C'est ma question en faite, est-ce que quand je rentre dans le if cela veut dire que le fichier est déjà uploadé sur le serveur ou il est peut-être en cours d'upload. Parceque s'il est encore en cours d'upload, c'est claire que cette ligne ne marchera pas.
$xml = simplexml_load_file($path);
vue qu'il trouvera pas le fichier.

Eléphant du PHP | 288 Messages

15 nov. 2007, 18:07

je viens de rajouter les test suivant

 
 
 if (move_uploaded_file($_FILES['fichierXML']['tmp_name'],$destination_dir.DIRECTORY_SEPARATOR.$destination_file)) 
				 {		
					echo "boucle avant is_uploaded_file";
					if(is_uploaded_file($_FILES['fichierXML']['tmp_name']))
					{
							var_dump($_FILES);
							echo "<br>File is uploaded";
							$path     = 'xml/'.$_FILES['fichierXML']['tmp_name'];
							echo "boucle avant file_exists ";
							if(file_exists($path))
							{
								$i        = 2;
								echo "<br>File is existe";
								$fonction = new fonction();
								$con      = new connection("xxxxx");
								echo $path;
								$xml = simplexml_load_file($path);
								var_dump($xml);
 
 
J'ai mis des echo un peu partout pour voir ou je bloque. Je rentre bien dans la boucle
 if (move_uploaded_file($_FILES['fichierXML']['tmp_name'],$destination_dir.DIRECTORY_SEPARATOR.$destination_file)) 
				 {	
 
J'ai un echo qui m'affiche
boucle avant is_uploaded_file
et c'est tout. Quand je vais sur le serveur et que je regarde dans mon dossier xml, le fichier est pourtant la. Une idée.

Merci encore.

Mammouth du PHP | 2937 Messages

15 nov. 2007, 18:17

Vérifie la valeur de $path dans ton simplexml_load_file().

Eléphant du PHP | 288 Messages

15 nov. 2007, 18:37

Avec les nouvaux testes j'ai placé, je rentre dans la premiere boucle
if(move_uploaded_file)
J'ai le premier echo
boucle avant is_uploaded_file
Après je rentre pas dans la deuxieme booucle
if(is_uploaded_file($_FILES['fichierXML']['tmp_name'])) 
Pourtant je devrais parce que je rentre dans la premiere boucle
move_uploaded_file

Mammouth du PHP | 2937 Messages

15 nov. 2007, 19:33

Si tu utilises move_uploaded_file(), il est inutile d'utiliser is_uploaded_file().

Eléphant du PHP | 288 Messages

15 nov. 2007, 19:59

is_uploaded_file fait juste verifier si le fichier a ete uploadé. Et c'est ca je comprend pas si move_upload_file return true is_uploaded_file devrait retourner true aussi. Non?

Mammouth du PHP | 2937 Messages

15 nov. 2007, 20:02

Non seulement move_uploaded_file() fait le boulot d'is_uploaded_file(), mais il t'enregistre le fichier uploadé à l'emplacement indiqué par son second argument.

De deux choses l'une : soit tu utilises is_uploaded_file() et tu écris quelques lignes de code supplémentaires pour enregistrer le fichier uploadé (mais sans utiliser move_uploaded_file()), soit tu utilises move_uploaded_file(). Mais pas les deux à la fois.

Autrement dit, si tu utilises move_uploaded_file() et qu'ensuite tu utilises un is_uploaded_file() pour vérifier que le fichier est uploadé, il est normal que cette dernière fonction ne trouve rien, puisque le fichier a été enregistré et que, par conséquent, il ne se trouve plus dans le répertoire temporaire utilisé pour l'upload.

Eléphant du PHP | 288 Messages

15 nov. 2007, 20:19

ok, je comprend. Je vais l'enlever. Et voir

Invité
Invité n'ayant pas de compte PHPfrance

15 nov. 2007, 21:23

J'ai modifie et ca marche toujours pas. Je n'y comprend rien.
Je mets le code modifie.
if (move_uploaded_file($_FILES['fichierXML']['tmp_name'],$destination_dir.DIRECTORY_SEPARATOR.$destination_file)) 
				 {		
					
							var_dump($_FILES);
							
							$path     = 'xml/'.$_FILES['fichierXML']['name'];
							echo "boucle avant file_exists ";
							echo "<br>File is uploaded $path";
							if(file_exists($path))
							{
								$i        = 2;
								echo "<br>File is existe";
								$fonction = new fonction();
								$con      = new connection("xxxxxx");
								echo $path;
								$xml = simplexml_load_file($path);
								var_dump($xml);

Il rentre dans le if du move_upload_file, mais pas dans file existe. Quand je vais sur mon serveur dans le dossier xml. le fichier existe vraiment. L'arborescence de mes fichiers sur le serveur est comme ceci:

dossier xml
script php

donc pour lire le fichier je dois utiliser un path comme ceci xml/nom du fichier.

j'affiche le resultat du var_dump ainsi que les different echo.
array(1) { ["fichierXML"]=> array(5) { ["name"]=> string(27) "Anuga_Visitor_Form_Uri2.xml" ["type"]=> string(17) "application/x-xml" ["tmp_name"]=> string(18) "/var/tmp/phpEbUqsY" ["error"]=> int(0) ["size"]=> int(2594) } }

boucle avant file_exists
File is uploaded
xml/Anuga_Visitor_Form_Uri2.xml
et quand je vais sur mon serveur le fichier Anuga_Visitor_Form_Uri2.xml est la

Mammouth du PHP | 2937 Messages

15 nov. 2007, 21:53

Tu ne peux pas réutiliser $_FILES pour définir $path.

Invité
Invité n'ayant pas de compte PHPfrance

16 nov. 2007, 00:24

J'ai defini une variable
$Fname = $_FILES['fichierXML']['name'];
avant de faire le move_upload_file et la declaration du path devient:
$path     = 'xml/'.$Fname;
Et ca marche toujours pas.

Merci pour ta patience

Mammouth du PHP | 2937 Messages

16 nov. 2007, 00:56

Tu n'as toujours pas compris. :roll:

Définit $path comme suit :
$path = $destination_dir.DIRECTORY_SEPARATOR.$destination_file;
et dis-moi ce qui se passe alors.

Invité
Invité n'ayant pas de compte PHPfrance

16 nov. 2007, 08:07

merci ca marche.