PHP - Generate list with files and file information
- Date:
- Author: Stefan Cruysberghs
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); }