Често ни се налага да манипулираме с файлове от специфична директория. Ако сме с Apache сървър, можем да преработим .htaccess файла, да укажем на браузъра къде се намира директорията, съдържаща файловете и да видим списък с нейното съдържание. Ако целта ни е просто да разгледаме списък с изображенията, намиращи се в тази директория, това е достатъчно. Ако обаче искаме да контролираме реда, в който се показват изображенията и файлове с какви разширения да се показват, преработването на .htaccess файла на сървъра не е достатъчно.
Да си предсавим, че искаме да почистим директорията images от ненужните файлове. Как ще направим това с РНР?
Да си предсавим, че искаме да почистим директорията images от ненужните файлове. Как ще направим това с РНР?
Дефинираме клас и декларираме свойствата
class DirectoryImages {
//Създава свойствата
public $filearray = array();
}
Дефинираме конструктор за класа
Името на конструктора може да съвпада с името на класа.
//Създава конструктор function DirectoryImages( $directory){ $d = "";
if(is_dir($directory)){
$d = opendir($directory)
or die("
Директорията не може да бъде отворена.");
while(false !== ($f=readdir($d))){
if(is_file("$directory/$f")){
$this-> filearray[] = $f;
}
}
closedir($d);
}else{
//грешка
die("Трябва да премина през директорията.");
}
Конструкторът приема като параметър променливата $directory- името на директорията. Всички файлове, които се съдържат в директорията, се добавят към променливата $filearray. Променливите $d и $f са локални за конструктора и обръщението към тях е като към нормална РНР променлива. Случаят с $filearray е различен. Обръщението към нея, трябва да стане с $this-> .
Функциите, които съм използвала за работа с директорията images са:
- opendir()- отваря директория;
- readdir()- чете директория;
- is_file()- извлича всички файлове от директорията и ги поставя като членове на масива filearray[];
- closedir()- затваря директорията.
Дефинираме останалите методи на класа
Кои ще са останалите методи? Необходимо ни е да сортираме изображенията по азбучен ред, да проверим дали всички файлове в директорията са изображения и да изведем само изображенията. За всяко едно от тези действия, които трябва да извършим, ни е необходим метод (респ. функция), който ще извършва това действие.
//Сортира масива function naturalCaseInsensitiveOrder(){ natcasesort($this->filearray); } //Проверява дали файловете в директорията са изображения function checkAllImages(){ $bln = true; $extension = ""; $types = array( "jpg", "jpeg", "gif", "png"); foreach ($this->filearray as $key => $value){ $extension = substr($value,(strpos($value, ".") + 1)); $extension = strtolower($extension); if(!in_array($extension, $types)){ $bln = false; break; } } return $bln; } //Извежда изображенията function setDirectoryImage(){ if ($bln = true) foreach ($this-> filearray as $value){ echo "<div style=\"color:red; float:left;text-align:center; \"><img style=\" margin: 10px 10px 10px 10px;\" src=\"images/$value\"/><br><br><span><small> Име на файла:</small></span><small> $value</small><br><br></div>"; }
Файлът, който ще съдържа class DirectoryImages {}, съм наименувала DirectoryImages.php.
Създаваме обект от клас DirectoryImages {}
Във файл index.php ще създам обект от клас DirectoryImages и ще извикам функциите, работещи с него.
<html> <head> <title>Работа с изображения</title> <meta charset="UTF-8"> </head> <body> <?php require 'DirectoryImages.php'; $di = new DirectoryImages('images'); $di->checkAllImages() or die("Не всички файлове са изображения."); $di-> naturalCaseInsensitiveOrder(); $di->setDirectoryImage(); ?> </body> </html>
Едно от предназначенията на файла index.php е да създаде нов обект, принадлежащ на клас DirectoryImages, поради тази причина, с помощта на контролната структура require включваме файл DirectoryImages.php.
Следващите стъпки:
Създава се нов обект.
Извиква се метод, който проверява дали всички файлове в директорията са изображения.
Извиква се метод, който сортира изображенията във възходящ ред.
Извиква се метод, който извежда изображенията на екрана.
Файловете DirectoryImages.php и index.php, може да изтеглите от тук:
При изпълнението на скрипта от файл index.php, резултатът в браузъра ще е:
За динамично създаване на изображения, РНР поддържа библиотеката GD library- библиотека с отворен код. Повече можете да прочетете на: https://libgd.github.io и http://php.net и след това да приложите наученото, преработвайки скрипта от този линк: Работа с библиотеката GD.
|
Няма коментари:
Публикуване на коментар