Bonjour

Je suis tombé sur un casse tête qui n'en est peut-être pas un, et j'aimerais vos lumières.

Je débute en PHP (plus ou moins) et je code en ce moment un script qui me permet de formater le contenu d'un fichier XML grâce à XSLT avec PHP4.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php 
$nomfichier = "test.xml";
 
if(isset($_GET['page'])) {
        $p = $_GET['page'];
  }
  else {
        $p = 'main';
  }
 
$file = fopen($nomfichier,"r");
$xml = fread($file,filesize($nomfichier));
fclose($file);
 
switch($p)
{
 case 'liste': 
 include('content/liste.php');
 break;
 case 'message':
 include('content/message.php');
 break;
 
 default:
 include('content/main.php');
 break;
}
 
?>
Jusqu'ici rien de compliqué, tout fonctionne avec un fichier enregistré en dur sur le serveur. Je donne simplement le nom du fichier à mon script, qui le recharge à chaque requette :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
$nomfichier = "test.xml";
 
$file = fopen($nomfichier,"r");
$xml = fread($file,filesize($nomfichier));
fclose($file);

Mais voilà : le projet prévoit qu'un utilisateur sélectionne son fichier local et l'envoie au serveur distant pour que celui-ci l'utilise.

Pour ce faire, j'uploade le fichier via un formulaire.
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
<form method="post" enctype="multipart/form-data" action="?page=liste">
      <p>
	<input type="file" name="fichier" size="30">
	<input type="submit" name="upload" value="Uploader">
      </p>
</form>

Et je récupère le fichier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
if( isset($_POST['upload']) ) // si formulaire soumis
{
    $nomxml = $_FILES['fichier']['tmp_name'];
    /* Pleins de tests de sécurité (verif extension, toussa...) */
    $file=fopen($nomxml,"r");
    $xml=fread($file,filesize($nomxml));
    fclose($file);
}
J'ai bien le contenu de mon fichier dans la variable $xml, j'affiche bien ma page 'liste' que je charge tout de suite après l'upload, mais je perds bien évidememnt tout ça dès que je passe sur une autre page via le switch.
Il faut que je trouve un moyen de le conserver... Mais comment ?

J'ai pensé enregistrer le fichier sur le serveur après upload grâce à move_uploaded_file(). Mais :
- Plusieurs utilisateurs peuvent accéder au script en même temps. Donc je ne peux pas sauvegarder le fichier sous un nom fixe.
- Plusieurs utilisateurs peuvent (cas exceptionnel, mais tout de même...) envoyer le même fichier en même temps. Donc je ne peux pas le sauvegarder sous son nom initial.
- Le fichier est "sensible" car personnel. Il doit être supprimé.

Bref ça m'a l'air très compliqué.

N'y a-t-il pas une méthode qui me permettrait de lire le fichier une fois et une seule pour le conserver jusqu'à ce que l'utilisateur ait quitté le script ? (j'en doute fort, mais qui ne tente rien n'a rien... )

Ou sinon, quelle serait la bonne méthode pour sauvegarder mon fichier (et si possible le supprimer après utilisation...) dans un dossier 'xml/' par exemple ?


Si ça manque de précision, dites le moi ¬_¬ Mais sur le moment, je ne vois pas trop quoi rajouter...


Merci d'avance !