Обучение в PHP - част 15 (Работа с директории)

Стандартни операции с директории
Стандартните операции, които може да ви се наложи да извършите, докато работите с директории, са:


[*]Прочитане на файловете в директория.

[*]Копиране на файлове от една директория в друга

[*]Преместване на файловете от една директория в друга

[*]Изтриване на файлове

[*]Изтриване на директории
]

В следващите секции ще разгледаме всяка една от тези операции по отделно

Прочитане на файлове

Трябва да използвате функцията opendir(), readdir(), и closedir(), за да осъществите достъп до директория, да прочетете съдържанието й, и да я затворите.

Нека да разгледаме тези основни функции и тяхното действие.

Функцията opendir() има следния синтаксис

resource opendir ( string път );

Функцията opendir() връща маниполатор на директория, която може да се използва в следващи извиквания на функции, работещи с директории. Функцията има един аргумент, който задава пътя на желаната директория. Функцията opendir() връща стойност True, ако зададения път е валиден и директорията е била отворена успешно. От друга страна, ако пътят е невалиден или директорията не може да се отвори поради липса на права, функцията връща стойност False.

Ключовата дума resource се използва за манипулатори на директории.

Функцията closedir() се използва за затваряне на директория. Ако функцията затвори директория, тя връща стойност True. В противен случай се връща стойност False. Функцията има следния синтаксис:

vaoid closedir ( resource манипулатор_на_директория );

За да успее функцията closedir(), директорията, зададена от манипулатора, трябва да е била отворена с функцията opendir().

Функцията readdir() се използва за прочитане на съдържанието на определена директория. Тя има следния синтаксис:

string readdir( resource манипулатор_на_директория );

Функцията readdir() приема като свой единствен аргумент манипулатор_на_директория, чието съдържание трябва да прочете, и връща името на следващия файл в директорията. Имайте предвид, че имената се връщат в случаен ред.

Разгледайте следния код, за да разберете действието на горните три функции.

<?php
$dir opendir('/home/meeta/new');
while ($read_file = readdir( $dir ) )
{
echo read_file“, \n“;
}

closedir( $dir );
?>



В горния код се отваря директория с име new, която се намира в директорията home/meeta/. След като се прочетат всички файлове в директорията, директорията се затваря.

В следващата секция, ще видите как можете да копирате файлове чрез прост скрипт на PHP.

Копиране на файлове

За да копирате файл от една директория в друга, трябва да използвате функцията copy(). Функцията има следния синтаксис:

int copy ( string източник, string цел );

Както можете да видите, функцията copy() има два аргумента Първият аргумент е оригиналният файл, който трябва да се копира, вторият аргумент представлява целевия файл, който трябва да се създаде. Функцията връща стойност True, ако копирането е извършено успешно. В противен случай връща стойност False.

Ако целевия файл съществува, копирането ще бъде извършено. Но ако не съществува, ще се създаде нов файл със зададеното име и изходния файл ще се копира в него.

Разгледайте следния код за да разберете действието на функцията copy().

<?php
$source = '/home/meeta/hello.php';
$destination = '/home/meeta/new/h1.php';
if ( copy ( $source, $destination ))
{
echo „ Файлът е копиран успешно.“;
}
else
{
echo „Зададения файл не може да се копира.“;
}
?>


В горния код файлът с име hello.php намиращ се в директорията /home/meeta, се копира в директорията /home/meeta/new под името h1.php. Ако файлът се копира успешно, се извежда съобщението Файлът е копиран успешно. От друга страна, ако операцията е неуспешна, се извежда съобщението Зададения файл не може да се копира

Можете да получите съобщение за грешка по време на копирането на файл от една директория в друга, ако нямате достатъчно права, за да направите това. Поради тази причина, преди да копирате файл, проверете дали имате права за това.

Преместване на файлове

За да можете да преместите файл от една директория в друга чрез PHP, използвайте функцията rename() .

Както можете да предположите от функцията тя служи за преименуване на файла. Но ако зададете различни директории за новото и старото име, тази функция ще премести файла.

Функцията има следния синтаксис:

int rename(string източник, string цел);

Както функцията copy(), функцията rename() приема два аргумента. Първият аргумент е името на файла, който ще се премества, а вторият параметър представлява целевия файл, който ще се премества, а вторият параметър, представлява целевия файл, който трябва да се създаде. Функцията връща стойност True, ако операцията е била извършена успешно. В противен случай връща стойност False.

Можете да получите съобщение за грешка по време на преместването на файл от една директория в друга, ако нямате достатъчно права, за да направите това. Поради тази причина, преди да местите файлове, проверете дали имате права.

Разгледайте следния пример, за да разберете употребата на функцията rename() за преместване на файлове.

<?php
$source ='/home/meeta/hello.php';
$distantion ='/home/meeta/figures';
if (rename ( $source, $distantion))
{
echo = „Файлът е преместен успешно“;
}
else
{
echo „Зададения файл не може да бъде преместен.“;
}
?>


В горния пример се прави опит да се измести файла hello.php от директорията /home/meeta/ в директорията /home/meeta/figures. Ако файлът е преместен успешно, се извежда съобщението Файлът е преместен успешно. Но ако операцията по преместване не е успяла, ще се изведе съобщението Зададения файл не може да бъде преместен.

Използването на функцията rename() забавя значително изпълнението на програмата, тъй като функцията rename() трябва да се обърне към операционната система, която да стартира програмата rename. Поради тази причина е по-добре да създадете свой скрипт, за да премествате файлове от едно място на друго.

Знаем, че операцията по присвояване на файл се състои от две независими операции: копиране на файла на ново място и изтриването му от старото място. Така, че можем да напишем следната функцията за преместване на файл.

Function move ( $source, $destination )
{
copy ($source, $destination);
or die („Не мога да копирам файла!“);
unlink ( $\source )
or die („Не мога да изтрия файла“);
}


В следващата секция, ще видите, как можете да изтриете един или повече файлове от директория, като използвате функцията unlink().

Изтриване на файлове

Допълнителните и ненужните файлове внасят хаос в системата ви. За да се оправи този хаос, трябва периодично да изтривате ненужните файлове. PHP предоставя функцията unlink() за изтриване на файл.

Функцията има следния синтаксис

int unlink( strin име_на_файл);

Функцията unlink() приема един аргумент, задаващ името на файла, който трябва да се изтрие. Функцията връща стойност 1, ако файлът е изтрит успешно, и стойност 0, ако не е изтрит.

Разгледайте следния пример:

<?php
$file_delete = '/home/meeta/my.php';
if ( unlink( $file_delete))
{
echo „Файлът е изтрит успешно“;
}
else
{
echo „Файлът не може да се изтрие“;
}
?>


В горния код се изтрива файлът my.php от директорията / home/meeta/. Ако изтриването на файла е успешно, се показва съобщението Файлът е изтрит успешно. Ако файлът не може да бъде изтрит, се извежда съобщението Зададения файл не може да се изтрие.

Както и при предишните операции трябва да имате необходимите права, за да изтриете файла.

Функцията unlink() е предназначена за Unix и Linux и може да не работи под Windows.

Работа с множество файлове в директория

В предишния урок, видяхте как можете да изтривате отделни файлове, Сега да предположим, че трябва да изтриете всички файлове в дадена директория, които са 245 файла и поддиректории. Вместо да изтривате отделните файлове в директорията, можете да изтриете всички файлове и директории на веднъж. PHP не предоставя вградена функция за тази цел. Но можете да използвате методите mapdir() и maptree() на класа File_Find от PEAR

В следващите две секции, ще ви запозная с функциите mapdir() и maptree() и как можете да ги използвате в скриптовете си на PHP.

Функцията mapdir()

Тъй като функцията mapdir() е метод на класа File_Find от PEAR, ще трябва да включите класа в скрипта си. За да направите това, трябва да добавите следния ред, преди да използвате функцията mapdir()

include_once 'File_Find.php';

Функцията mapdir() има следния синтаксис:

resource mapdir( resource манипулатор_на_директория );

Методът mapdir() връща масив, съдържащ всички поддиректории на дадена директория заедно с файловете в зададената директория и поддиректориите й.

Разгледайте следния пример, който показва имената на всички файлове в дадена директория.

<?php
include 'File_Find.php';
$file_read = File_Find :: mapdir ( '/home.meeta/new' );
foreach ( $file_read as $fr )
{
echo „$fr“, „\n“;
}
?>


Чрез горния код се отпечатват имената на всички файлове в директорията /home/meeta/new с помоща на метода mapdir().

Функцията maptree()

Можете да използвате метода maptree(), за да обработите всички файлове и поддиректории в дадена директория. Това също е метод на класа File_Find в PEAR. Методът maptree() е по-мощен от метода mapdir(), тъй като метода, зарежда цялото съдържание на директорията в масив. Методът има следния синтаксис:

resource maptree( resource манипулатор_на_директория);

Методът maptree() връща масив. Резултатния масив, на практика се състои от два различни масива. Първият масив съдържа всички поддиректории на зададената директория. Вторият масив връща всички файлове в зададената директория и нейните поддиректории. Следващия ред илюстрира тази концепция.

dir_tree ( $dirs, $files ) = File_Find :: maptree( '/var/www/html/meeta' );

Функцията maptree(), както можете да видите от горния код, връща масив dir_tree, който от своя страна съдържа два отделни масива: $dirs и $files. Масивът $dirs съдържа всички поддиректории, а масивът $files съдържа всички файлове в зададената директория и нейните поддиректории.

Разгледайте следния пример, за да разберете как можете да използвате функцията maptree(), за да изтриете множество файлове от дадена директория:

<?php
include 'File_Find.php';
dir_tree ( $dir_delete, $file_delete ) = File_Find :: maptree( '/home/meeta/figures2' );
foreach ( $files_delete as $fd )
{
if ( ! ( unlink ($fd)))
{
echo „Не мога да изтрия файла!“;
}
else<
{
echo „Файлът е изтрит успешно!“;
}
}
?>


В горния код, цялото съдържание на директорията /home/meeta/figures2 се получава в масива dir_tree. Този масив от своя страна, съдържа всички поддиректории в масив с име dir_delete и файловете в масива file_delete. Всички файлове намиращи се в масива file_delete, се изтриват чрез цикъла foreach.

Изтриване на директории

Можете да използвате функцията rmdir(), за да изтривате директории. За да изтриете директории, трябва да имате необходимите права върху директорията. Друг много важен факт, който трябва да запомните, е, че за да можете да изтриете директория, тя трябва да е празна. Ако директорията не е празна, няма да можете да я изтриете.

Функцията rmdir() има следния синтаксис:

int rmdir( string име_на_директория );

както се вижда от горния синтаксис, функцията приема като свой аргумент името или пътя на директорията, която трябва да изтрие.

Разгледайте следния прост пример, който се използва за изтриване на празна директория dir1.

<?php
$dir_delete = '/home/meeta/dir1';
if ( rmdir( $dir_delete))
{
echo „Директорията е изтрита успешно“;
}
else
{
echo „Директорията не може да се изтрие.“:
}
?>


Горния код е прост и нереалистичен. Разгледайте следващия пример, който изтрива директория със цялото и съдържание.

<?php
include 'File_Find.php';
dir_tree ( $dir_delete, $file_delete ) = File_Find :: maptree('/home/meeta/figures2' );
foreach ( $files_delete as $fd )
{
if ( ! ( unlink ($fd)))
{
echo „Не мога да изтрия файла!“;
}
else
{
echo „Файлът е изтрит успешно!“;
}
}
foreach ( dir_delete as $dd )
if ( ! ( unlink ($fd)))
{
echo „Не мога да изтрия Директорията!“;
}
else
{
echo „Директорията е изтрита успешно!“;
}
}
?>


В горния код всички файлове в директорията се съхраняват в масив file_delte, а всички поддиректории – в масива dir_delete. Първият цикъл foreach се използва за изтриване на всичко файлове в директорията. Вторият цикъл foreach изтрива всички поддиректории.

Copyrighted - Our & Pero


/ Трябва да сте регистриран за да напишете коментар /