L'extension File Info
Fileinfo est un script PHP que vous pouvez utiliser dans votre application Ajax pour obtenir des informations essentielles sur un fichier sur le serveur de votre site web:
- La date.
- La taille.
- Le type.
L'objet XMLHttpRequest dispose d'une fonction similaire getResponseHeader mais son fonctionnement dépend de la configuration du serveur et souvent ne retourne pas ce que vous en attendez.
Comment cela fonctionne
Le script PHP en fait contient seulement une fonction, fileinfo, avec un argument: le nom d'un fichier ou une URL.
Cette fonction fait appel aux fonctions PHP suivantes (compatibles avec toutes les versions de PHP:
- filemtime pour obtenir la date et la fonction date() pour la formater;
- filesize pour avoir la taille du fichier;
- filetype qui retourne ces chaînes de caractères: file, dir, link, unknow, etc.
Ces informations sont stockées dans un tableau avec ces clés dans l'ordre: date, size, type et ce tableau est retourné par la fonction.
Pour utiliser la fonction, on l'appelle avec un code comme celui-ci:
include_once("fileinfo.php");
$x = fileinfo("uneurl.html");
print_r($x);
Ces informations sont affichées et en même temps retournées dans un tableau.
Vous pouvez alors faire une requête POST pour appeler le script PHP avec le nom de fichier comme paramètre, et utiliser responseText pour le résultat.
Exemple de résultat:
Thu, 28 Jun 2007 19:37:18 GMT
1575
file
Voir l'extension PHP (renommée fileinfo-php.txt).
Démonstration Ajax avec la méthode HEAD
Le code source est intégrée dans cette page, et donné ci-dessous.
Le code HTML:
<input type="text" id="filename" value="anaa-file-info.php">
<input type="button" value="Informations" onClick="submitForm('filename')">
<div id="zone"></div>
Le code Ajax et JavaScript:
<script src="anaa.js" type="text/javascript"></script>
<script language="JavaScript">
function submitForm(id)
{
var url = document.getElementById(id);
var xhr=AACreate();
xhr.onreadystatechange=function()
{
if(xhr.readyState == 4)
{
var h = xhr.getAllResponseHeaders();
document.getElementById("zone").innerHTML = "Headers:<br/>";
document.getElementById("zone").innerHTML += h;
}
};
xhr.open("HEAD", url, true);
xhr.send(null);
}
</script>
Démonstration de file info avec Anaa en enchaînant POST et GET
Cette demo utilise le framework Anaa.
Elle utilise le script PHP fileinfo.php avec une commande Ajax POST pour passer des paramètres au script, en l'occurence l'URL d'une page sur laquelle on veut obtenir des informations. On retrouve les résultats affichés par le script de la même façon qu'on le fait avec la méthode GET, en utilisant l'attribut responseText (ou response XML).
Taper l'URL d'un fichier:
Code HTML:
<form method="POST" action="">
<input type="text" id="filename" value="" size="80">
<input type="button" value="Retrieve" onClick="submitFormAnaa()">
</form>
<div id="storage"></div>
Code source JavaScript
function retrieve(content)
{
var storing = document.getElementById("storage");
content = content.replace(/\n/, "<br>");
storing.innerHTML = content;
}
function submitFormAnaa()
{
var content = document.getElementById("filename").value;
AAWrite("chain-fileinfo.php", "url=" + content, retrieve);
}
Code PHP:
<?php
include_once("fileinfo.php");
$url=$_POST['url'];
fileinfo($url);
?>
Extension fileinfo.php:
function fileinfo($filename)
{
$pagedate = date ("D, d M Y H:i:s", filemtime($filename)) . " GMT";
$pagesize = filesize($filename);
$pagetype = filetype($filename);
echo "Date: ", $pagedate."<br>";
echo "Size: ", $pagesize."<br>";
echo "Type: ", $pagetype."<br>";
}
$url=$_POST['url'];
fileinfo($url);
Le code dans cette page est simplifié par rapport au code de l'archive mais fonctionnel.