Page 1 sur 1

[ AJAX + PHP ] fonction opendir(), problème avec IE

Posté : 17 sept. 2008, 16:35
par VaN
Bonjour,

J'utilise une fonction Javascript, qui grâce à AJAX, exécute un script PHP, qui va chercher l'extension d'un fichier, dans un dossier, placé sur le serveur :

La fonction JS :

Code : Tout sélectionner

function getFileName() { var sessionId = document.getElementById('sessionId').value; var fileExtension = creerXHR('getExtension.php?sessionId='+ sessionId); var fileName = 'uploadedFile'+fileExtension; alert(fileName); return fileName; }
Le fichier getExtension.php :
<?php
$dirname = 'uploaded_files/'.$_REQUEST['sessionId'];
$dir = opendir('uploaded_files/'.$_REQUEST['sessionId']); 

while($file = readdir($dir)) {
	if($file != '.' && $file != '..' && $file != 'Thumbs.db' && !is_dir($dirname.$file)) {
		$extension = strrchr($dirname.$file,'.');
		echo $extension;
	}
}
closedir($dir);
?>
Et je rencontre un comportement très bizarre de la part de mon fichier PHP :

Sous Firefox ET Firefox en mode Internet Explorer (plugin IE Tab), il me renvoie l'extension, comme voulu.

Sous IE par contre, la fonction opendir() me renvoie une erreur :
Image

1. Vu qu'il s'sagit d'un fichier PHP qui cause l'erreur, comment cela se fait'il qu'il ne soit pas interprété de la même façon sous FF et IE ? Et comment cela se fait'il qu'il passe bien sous FF IE Tab, et pas sous IE ?

2. Vu que mon dossier uploaded_files\5k92ngk8v0bdntv8ska4ku40e3 existe bien, d'où peut venir cette erreur ?

Posté : 17 sept. 2008, 16:58
par sadeq
La seule réponse logique est que le noms de la session va différer de FF à IE pour la même page en un instant donné. Donc, en clair : ta zone sessionId contient le sid de la session du navigateur que tu passe en paramètre à ton programme PHP, qui à son tour essaye d'ouvrir un dossier qui a le même nom de sessionId. Alors si ce dossier n'existe pas, il est normal ton message d'erreur.

Le mieux est de programmer ça en testant sur l'existence du dossier avant de tenter son ouverture :
<?php
$dirname = 'uploaded_files/'.$_REQUEST['sessionId'];

if ( ! file_exists( $dirname ) ) exit();

$dir = opendir( $dirname ); 
...

Posté : 17 sept. 2008, 17:11
par VaN
La seule réponse logique est que le noms de la session va différer de FF à IE pour la même page en un instant donné. Donc, en clair : ta zone sessionId contient le sid de la session du navigateur que tu passe en paramètre à ton programme PHP, qui à son tour essaye d'ouvrir un dossier qui a le même nom de sessionId. Alors si ce dossier n'existe pas, il est normal ton message d'erreur.
Ce que je ne comprends pas, c'est que mon dossier (celui qui apparait dans l'erreur) existe, sur mon installation locale. C'est vérifié. Alors il existe à la fois pour FF, et pour IE. Pourquoi FF le trouve, et pas IE ?

Posté : 23 oct. 2008, 15:35
par Marmotte_74
J'ai le même problème. toujours avec du php et de l'ajax. Une solution ?