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

VaN
Mammouth du PHP | 1107 Messages

17 sept. 2008, 16:35

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 ?

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

17 sept. 2008, 16:58

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 ); 
...
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

VaN
Mammouth du PHP | 1107 Messages

17 sept. 2008, 17:11

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 ?

Marmotte_74
Invité n'ayant pas de compte PHPfrance

23 oct. 2008, 15:35

J'ai le même problème. toujours avec du php et de l'ajax. Une solution ?