News
Photos
Articles
Components
Applications
Kleinkunst

PHP - Generate list with files and file information

Met de scGetFileList functie kan je een lijst met bestanden en bijhorende bestandsinformatie genereren. Dit kan gemakkelijk zijn om dynamische pagina's te generen met links naar bestanden of met thumbnails van afbeeldingen. In dit artikeltje geef ik meer informatie over de benodigde PHP functies zodat je de opbouw van onderstaande PHP source zou begrijpen.

Parameters scGetFileList

Input

De input-parameters zijn het pad, eventueel een lijst met toegelaten extenties, alleen bestanden of ook mappen en tenslotte of je alle details van de bestanden wil ophalen.

function scGetFileList($strPath, $arrFilterExtentions = '', 
  $strFilterFileType = 'A', $blnDetails = True)

Output

Het resultaat is een array met 8 velden. Daarbij de bestandsinformatie zoals naam, type, grootte en attributen, maar eventueel ook de breedte en hoogte van afbeeldingen.

Sequence
FileAndPath
File
Extention
FileType
Size
Attributes
ImageType
ImageWidth
ImageHeight

Hoe de functie gebruiken ?

Enkele voorbeelden van input-parameters :

print_r(scGetFileList('../Test')); 


print_r(scGetFileList('../Test','','D')); 


print_r(scGetFileList('../Test','JPG')); 


$arrExtentions = array('HTM','PHP');
print_r(scGetFileList('../Test',$arrExtentions));

 

Benodigde PHP functies

Hieronder een lijstje van de PHP functies die je nodig hebt om de scGetFileList functie te maken. De hyperlinks verwijzen naar de handleiding op de PHP website.

  • readdir en closedir : functies waarmee je door de bestanden van een opgegeven map kan lopen
  • is_dir : een functie om op te vragen of het opgegeven pad een bestand of map is
  • is_readable en is_writable : 2 functies waarmee je de attributen van een bestand kan nagaan
  • filesize : een functie die je de grootte van een bestand in bytes teruggeeft
  • getimagesize : een functie de je de breedte en hoogte van een afbeelding teruggeeft
  • strrchr : een string functie waarmee je het laatste punt kan terugvinden in de bestandsnaam, hierna volgt de extentie

 

PHP source code scGetFileList functie

Hieronder de PHP source code. De functie zou "goed leesbaar" moeten zijn zodat je er iets van kan bijleren.

/*------------------------------------------------------------------
scGetFileList
Input
  - $arrExtentions = one file extention or array of file extentions
  - $strFileType : A=All, F=Files, D=Directories
Output
  - Sequence
- FileAndPath
- File
- Extention
- FileType
- Size
- Attributes
- ImageType
- ImageWidth
- ImageHeight How to use e.g. - print_r(scGetFileList('../Test')); - print_r(scGetFileList('../Test','','D')); - print_r(scGetFileList('../Test','JPG')); - $arrExtentions = array('HTM','PHP'); print_r(scGetFileList('../Test',$arrExtentions)); ------------------------------------------------------------------*/
function scGetFileList($strPath, $arrFilterExtentions = '', $strFilterFileType = 'A', $blnDetails = True) { $intSequence = 0; $ptrDirectory = opendir($strPath); $arrFileList = array(); while (($strFile = readdir($ptrDirectory)) !== false) { if ($strFile != '.' && $strFile != '..') { $strPathAndFile = $strPath . '/' . $strFile; $strAttributes = ''; if ($blnDetails) { if (is_readable($strPathAndFile)) { $strAttributes .= 'r'; } if (is_writable($strPathAndFile)) { $strAttributes .= 'w'; } } $intFileSize = 0; $strFileSizeDescription = ''; $strImageType = ''; $intImageWidth = 0; $intImageHeight = 0; if (is_dir($strPathAndFile)) { $strFileType = 'D'; $strExtention = ''; } else { $strFileType = 'F'; if ($blnDetails) { $intFileSize = filesize($strPathAndFile); $arrImageInfo=getimagesize($strPathAndFile); $arrImageTypes=array('','GIF','JPG','PNG'); $strImageType = $arrImageTypes[($arrImageInfo[2]>0?$arrImageInfo[2]:0)]; if ($strImageType <> '') { $intImageWidth = $arrImageInfo[0]; $intImageHeight = $arrImageInfo[1]; } } $strExtention = strrchr($stFile,".");
if ($strExtention <> '') {
$strExtention = strtoupper(substr($strExtention,1));
} } if ($arrFilterExtentions == '') { $blnValid = True; } else { if (!is_array($arrFilterExtentions)) { $arrExtentions = array($arrFilterExtentions); } $blnValid = False; for($i=0; $i < count($arrFilterExtentions); $i++) { if($strExtention == $arrFilterExtentions[$i]) { $blnValid = True; } } } if ($strFilterFileType == 'D' && $strFileType == 'F') { $blnValid = False; } if ($strFilterFileType == 'F' && $strFileType == 'D') { $blnValid = False; } if ($blnValid == True) { $intSequence++; $arrFileList[] = array( 'Sequence' => $intSequence, 'FileAndPath' => $strPathAndFile, 'File' => $strFile, 'Extention' => $strExtention, 'FileType' => $strFileType, 'Size' => $intFileSize, 'Attributes' => $strAttributes, 'ImageType' => $strImageType, 'ImageWidth' => $intImageWidth, 'ImageHeight' => $intImageHeight ); } } } closedir($ptrDirectory); return($arrFileList); }