Често ни се налага да манипулираме с файлове от специфична директория. Ако сме с 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.
|
|
Няма коментари:
Публикуване на коментар