The File Info extension
Fileinfo is a PHP script that you can use from your Ajax application to get essential informations about a file on the server or any website:
- The date.
- The size.
- The type.
The XMLHttpRequest object has a similar function, getResponseHeader but it depends upon the configuration of the server and often doesn't return what you expect from it.
How it works
The PHP script currently holds a single function, fileinfo, with an argument: the name of a file or a URL.
The function makes use of some PHP functions (compatible with all version of PHP) to get the infos:
- filemtime() to get the date, and date() to format it;
- filesize() for the size of the file;
- filetype that returns these strings: file, dir, link, unknow, etc.
These infos are packed into an array with these keys in order: date, size, type and this array is returned by the function.
To use the function, call it with a such code:
include_once("fileinfo.php");
$x = fileinfo("someurl.html");
print_r($x);
These infos are displayed and also stored into a file in the current directory, fileinfo.txt, one info per line.
You can then make a POST request to call the PHP script, with the filename as parameter,
and use responseText for the result.
Example of result:
Thu, 28 Jun 2007 19:37:18 GMT
1575
file
View the PHP extension (renamed fileinfo-php.txt).
Ajax demo with the HEAD method
Call a script, actually included in this page with a filename as parameter. The PHP script retrieves essential infos about the file and display them below in this page.
HTML code:
<input type="text" id="filename" value="anaa-file-info.php">
<input type="button" value="Informations" onClick="submitForm('filename')">
<div id="zone"></div>
Ajax and JavaScript code:
<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>
Demo using Anaa by chaining POST to execute a PHP script and GET to retrieve the results
This demonstration use the Anaa framework.
It uses the fileinfo.php PHP script with a POST Ajax command to pass parameters to the script, in this case the URL of a page on which you want information. The results are retrieved by the JavaScript script in the same way we do it with the GET method, using the responseText attribute (or XML response).
Type the URL of a file:
HTML code:
<form method="POST" action="">
<input type="text" id="filename" value="" size="80">
<input type="button" value="Retrieve" onClick="submitFormAnaa()">
</form>
<div id="storage"></div>
JavaScript source code:
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);
}
PHP code:
<?php
include_once("fileinfo.php");
$url=$_POST['url'];
fileinfo($url);
?>
fileinfo.php extension:
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);
The code in this page is the code of the archive simplified a bit but is functional.