HTML, Excel, Word, SEOPHP êóðñ äëÿ ÷àéíèêîâ ⇒ Óïðàâëåíèå ôàéëàìè è êàòàëîãàìè

PHP äëÿ "÷àéíèêîâ"

Èíñòðóìåíòû
Âûáèðàåì IDE
Âûáèðàåì Web-ñåðâåð
Âûáèðàåì ÑÓÁÄ
Ñòðóêòóðà ÿçûêà PHP
Ïåðâûé øàã
Ñèíòàêñèñ
Òèïû äàííûõ
Ïåðåìåííûå è êîíñòàíòû
Îïåðàòîðû
Âûðàæåíèÿ
Óïðàâëÿþùèå ñòðóêòóðû
Ôóíêöèè
Êëàññû
Èñêëþ÷åíèÿ
Îøèáêè
Ìàññèâû
Ãëîáàëüíûå ìàññèâû
Cookies
Ñåññèè
Çàãðóçêà ôàéëîâ
Ðàáîòà ñ ôàéëàìè
Ðàáîòà ñ ôàéëàìè íà äèñêå
Ðàáîòà ñ äàííûìè â ôàéëå
Ïðèìåð óïðàâëåíèÿ ôàéëàìè
Ðàáîòà ñ áàçàìè äàííûõ
Ïîäêëþ÷åíèå
Àíàëèç ðåçóëüòàòîâ
Âûïîëíåíèå çàïðîñîâ
Îòêëþ÷åíèå
Ïðèìåð: îòñëåæèâàíèå ïîëüçîâàòåëåé
Ðàáîòà â ñåòè
Îòïðàâêà ïî÷òû
Áåçîïàñíîñòü
HTTP-àóòåíòèôèêàöèÿ
Çàùèòà ëîãèíîì è ïàðîëåì
Àâòîìàòèçàöèÿ
Ðåãóëÿðíûå âûðàæåíèÿ â PHP
Èíòåãðàöèÿ
PHP è JavaScript

 

Óïðàâëåíèå ôàéëàìè è êàòàëîãàìè


Àâòîð: Àðòåìüåâ Ñåðãåé Èãîðåâè÷
ICQ: 438856621
email: _spin_@bk.ru

Ïîä óïðàâëåíèåì ôàéëàìè è êàòàëîãàìè â PHP ïîäðàçóìåâàþòñÿ òàêèå îïåðàöèè êàê:

Êîïèðîâàíèå ôàéëîâ ïðîèçâîäèòñÿ ñ ïîìîùüþ ôóíêöèè copy(). Ôóíêöèÿ èìååò âñåãî 2 ïàðàìåòðà - èìÿ èñõîäíîãî ôàéëà è èìÿ êîíå÷íîãî ôàéëà. Ôóíêöèÿ âîçâðàùàåò TRUE, åñëè êîïèðîâàíèå ïðîøëî óñïåøíî, è FALSE åñëè ïðîèçîøëà îøèáêà. Åñëè êîíå÷íûé ôàéë óæå ñóùåñòâóåò - îí áóäåò ïåðåçàïèñàí è ôóíêöèÿ âåðí¸ò TRUE. Ïðè èñïîëüçîâàíèè copy() íà Windows-ïëàòôîðìå åñòü îñîáåííîñòü: åñëè ñêîïèðîâàòü ôàéë íóëåâîãî ðàçìåðà, òî ôàéë óñïåøíî ñêîïèðóåòñÿ, íî copy() âåðí¸ò FALSE.

Ïðèìåð êîïèðîâàíèÿ ôàéëà:

<?php

    $source = 'readme.txt';
    $dest = 'readme_copy.txt';

    if(!copy($source, $dest)) {
        echo "Îøèáêà êîïèðîâàíèÿ ôàéëà $source...<br />\n";
    }
?>

Îáðàòèòå âíèìàíèå íà êîíñòðóêöèþ "<br />\n" â êîíöå ñòðîêè ñ îøèáêîé. Ýòîò ïðîñòîé ïðè¸ì ïîçâîëÿåò ïîëó÷àòü ÷èòàåìûé âèä âûâîäèìîãî òåêñòà íåçàâèñèìî îò òîãî êóäà òåêñò âûâîäèòñÿ - â êîíñîëü îòëàä÷èêà èëè â áðàóçåð. Î÷åíü óäîáíî íà ýòàïå îòëàäêè ñêðèïòà.

Áîëåå ñëîæíûé ïðîöåññ - ïåðåìåùåíèå ôàéëà. Äëÿ âûïîëíåíèÿ ïåðåìåùåíèÿ ñëóæèò ôóíêöèÿ rename(). Êàê è ïðåäûäóùàÿ ôóíêöèÿ, rename() ïðèíèìàåò âñåãî 2 àãðóìåíòà - ñòàðîå è íîâîå èìÿ ôàéëà. Åñëè ïóòè ñòàðîãî è íîâîãî ôàéëîâ îäèíàêîâûå - ôàéë ïðîñòî ïåðåèìåíóåòñÿ, à åñëè ðàçíûå - áóäåò ïåðåìåùåí íî ïîâîìó ïóòè è ïåðåèìåíîâàí.

Ïðèìåð ïåðåìåíîâàíèÿ è ïåðåìåùåíèÿ ôàéëà:

<?php

    $number = 123;

    $source = 'readme.txt';
    $dest = "./backups/readme_$number.txt";

    if(!rename($source, $dest)) {
        echo "Îøèáêà ïåðåìåùåíèÿ ôàéëà $source...<br />\n";
    }
?>

 ýòîì ïðèìåðå èñõîäíûé ôàéë readme.txt ïåðåìåùàåòñÿ â ïîäêàòàëîã backups è ïåðåèìåíîâûâàåòñÿ â readme_123.txt.

Óäàëèòü ñóùåñòâóþùèé ôàéë ìîæíî ñ ïîìîùüþ ôóíêöèè unlink(). Ôàéëîâàÿ ñèñòåìà Unix ïîçâîëÿåò ñîçäàâàòü æåñòêèå ññûëêè íà ñóùåñòâóþèå ôàéëû. Ññûëêà ïîõîæà íà ÿðëûêè Windows, íî â Unix íåëüçÿ óäàëèòü èñõîäíûé ôàéë, ïîêà íà íåãî åñòü æåñòêèå ññûëêè. Ôóíêöèÿ unlink() óäàëÿåò âàøó ññûëêó íà ôàéë, à åñëè ññûëîê áîëüøå íåò - óäàëÿåò åãî.

<?php

    $file = "./backups/readme_123.txt";

    if(!unlink($file)) {
        echo "Îøèáêà óäàëåíèÿ ôàéëà $file...<br />\n";
    }
?>

Äëÿ óäàëåíèÿ êàòàëîãîâ ñëóæèò äðóãàÿ ôóíêöèÿ - rmdir(). Îíà ïðèíèìàåò åäèíñòâåííûé ïàðàìåòð - èìÿ êàòàëîãà, êîòîðûé íóæíî óäàëèòü. Óäàëÿåìûé êàòàëîã äîëæåí áûòü ïóñò, èíà÷å îïåðàöèÿ çàâåðøèòñÿ ñ îøèáêîé. Åñëè êàòàëîã óñïåøíî óäàë¸í - ôóíêöèÿ âåðí¸ò TRUE, â ïðîòèâíîì ñëó÷àå - FALSE.

<?php

    $directory = "./backups";

    if(!rmdir($directory)) {
        echo "Îøèáêà óäàëåíèÿ êàòàëîãà $directory...<br />\n";
    }
?>

Îòäåëüíîé ôóíêöèè äëÿ ñîçäàíèÿ ôàéëîâ â PHP íåò. Âñå ôóíêöèè, ïîçâîëÿþùèå ñîçäàòü ôàéë, âûïîëíÿþò è ðÿä äðóãèõ îïåðàöèé, íî îá ýòîì ìû ïîãîâîðèì â ñëåäóþùåì óðîêå.

Äëÿ ñîçäàíèÿ êàòàëîãà â PHP ïðèìåíÿåòñÿ ôóíêöèÿ mkdir(). Ôóíêöèÿ ïîëó÷àåò 1 ïàðàìåòð - èìÿ ñîçäàâàåìîãî êàòàëîãà. Åñëè êàòàëîã óñïåøíî ñîçäàí - ôóíêöèÿ âåðí¸ò TRUE, à ïðè îøèáêå - FALSE.

<?php

    $directory = "./backups";

    if(!mkdir($directory)) {
        echo "Îøèáêà ñîçäàíèÿ êàòàëîãà $directory...<br />\n";
    }
?>

Äîïîëíèòåëüíûå ôóíêöèè

 PHP åñòü ðÿä ôóíêöèé, ñóùåñòâåííî ïîìîãàþùèõ â ðàáîòå. Ñïèñîê ôóíêöèé ñ êðàòêèì îïèñàíèåì ïðèâåä¸í â òàáëèöå.

Ôóíêöèÿ Îïèñàíèå
string basename ( $path [, $ext] ) Èçâëåêàåò èç ïîëíîãî ïóòè $path òîëüêî èìÿ ôàéëà. Åñëè óêàçàíî ðàñøèðåíèå $ext - îíî îáðåçàåòñÿ.
<?php
    $full_path = "/full/path/to/myfile.txt";
    echo basename($full_path);
    // âûâîäèò "myfile.txt"
    echo basename($full_path, '.ext');
    // âûâîäèò "myfile"
?>
string dirname ( $path ) Èçâëåêàåò èç ïîëíîãî ïóòè $path òîëüêî ïóòü ê ôàéëó (áåç èìåíè è ðàñøèðåíèÿ)
<?php
    $full_path = "/full/path/to/myfile.txt";
    echo dirname($full_path);
    // âûâîäèò "/full/path/to"
?>
bool file_exists ( $filename ) Ïðîâåðÿåò, ñóùåñòâóåò ëè ôàéë èëè êàòàëîã $filename. Ôóíêöèÿ âîçâðàùàåò TRUE, êîãäà ôàéë èëè êàòàëîã ñóùåñòâóåò è äîñòóïåí.
<?php
    $filename = "/full/path/to/myfile.txt";
    if(file_exists($filename))
        echo 'Ôàéë ñóùåñòâóåò';
    else
        echo 'Ôàéë íå ñóùåñòâóåò';
?>
int fileatime ( $filename ) Âîçâðàùàåò äàòó è âðåìÿ ïîñëåäíåãî îáðàùåíèÿ ê ôàéëó
int filectime ( $filename ) Âîçâðàùàåò äàòó è âðåìÿ ïîñëåäíåãî èçìåíåíèÿ ôàéëà
int filesize ( $filename ) Âîçâðàùàåò ðàçìåð ôàéëà â áàéòàõ
string filetype ( $filename ) Âîçâðàùàåò òèï ôàéëà. Ìîæåò âîçâðàùàòü ñäåëóþùèå çíà÷åíèÿ: fifo, char, dir, block, link, file, unknown.
bool is_dir ( $filename ) Ïðîâåðÿåò, ÿâëÿåòñÿ ëè $filename êàòàëîãîì
bool is_file ( $filename ) Ïðîâåðÿåò, ÿâëÿåòñÿ ëè $filename ôàéëîì
bool is_uploaded_file ( $filename ) Ïðîâåðÿåò, ÿâëÿåòñÿ ëè $filename ôàéëîì, çàãðóæåííûì íà ñåðâåð ÷åðåç âåá-ôîðìó.
 
<?php
    $filename = "/full/path/to/myfile.txt";

if (file_exists($filename)) {
    echo "Ïîñëåäíåå îáðàùåíèå: " .
            date("F d Y H:i:s.", fileatime($filename));
    echo "Ïîñëåäíåå èçìåíåíèå: " .
            date("F d Y H:i:s.", filectime($filename));
    echo 'Ðàçìåð: ' . filesize($filename) . ' áàéò';
    echo 'Òèï îáúåêòà: ' . filetype($filename);

}
?>
mixed pathinfo ( $path [, $options] ) Âîçâðàùàåò ñòðîêó èëè ìàññèâ ñòðîê, ñîäåðæàùèé ÷àñòè ïóòè $path (èìÿ êàòàëîãà, èìÿ ôàéëà, ðàñøèðåíèå)
<?php
    $filename = "/full/path/to/myfile.txt";
    $parts = pathinfo($filename);

    echo $parts['dirname'], "\n";
    echo $parts['basename'], "\n";
    echo $parts['extension'], "\n";
    echo $parts['filename'], "\n";

    // ïîëó÷èì íà âûõîäå
    //  /full/path/to
    //  myfile.txt
    //  txt
    //  myfile
?>
string realpath ( $path ) Ïðåîáðàçóåò îòíîñèòåëüíûé ïóòü ê ôàéëó â ðåàëüíûé ïîëíûé ïóòü íà ñåðâåðå. Âñå ñèìâîëè÷åñêèå ññûëêè òàê æå ïðåîáðàçóþòñÿ â ðåàëüíûå èìåíà êàòàëîãîâ è ôàéëîâ.
<?php
    echo realpath('.') . "./myfile.txt";
    // ïîëó÷èì
    // /full/path/to/myfile.txt
?>
string tempnam ( $dir, $prefix ) Ñîçäà¸ò â êàòàëîãå $dir âðåìåííûé ôàéë ñî ñëó÷àéíûì èìåíåì, íà÷èíàþùèìñÿ ñ $prefix. Åñëè ïàðàìåòðû íå çàäàíû - áóäåò ñîçäàí âðåìåííûé ôàéë â ãëîáàëüíîì âðåìåííîì êàòàëîãå ñ ïîëíîñòüþ ñëó÷àéíûì èìåíåì. Ñîçäàííûé ôàéë ñîõðàíÿåòñÿ ïîñëå çàâåðøåíèÿ ðàáîòû ñêðèïòà è çàêðûòèÿ ôàéëà.
<?php
    $temp_name = tempnam ($dir, $prefix);
    echo $temp_name;
    unlink($temp_name);
?>
resource tmpfile ( void ) Ñîçäà¸ò â ñèñòåìíîì âðåìåííîì êàòàëîãå âðåìåííûé ôàéë ñî ñëó÷àéíûì èìåíåì. Ñîçäàííûé ôàéë óäàëÿåòñÿ íåìåäëåííî ïîñëå çàêðûòèÿ.
<?php
    $temp_file = tmpfile();
    fwrite($temp, "=ïèøåì â ôàéë...=");
    fseek($temp, 0);
    echo fread($temp, 1024);
    // âûâîäèòñÿ
    // =ïèøåì â ôàéë...=
    fclose($temp); // çàêðûâàåì è óäàëÿåì ôàéë
?>
Ôóíêöèè ðàáîòû ñ äàííûìè âíóòðè ôàéëà ìû ðàññìîòðèì â ñëåäóþùåì óðîêå.

 òàáëèöå ïðèâåäåíû íå âñå ôóíêöèè, èñïîëüçóåìûå ïðè ðàáîòå ñ ôàéëàìè. Ïîëíûé ñïèñîê âû ñìîæåòå íàéòè â äîêóìåíòàöèè íà îôèöèàëüíîì ñàéòå.

Ïîèñê ôàéëîâ è êàòàëîãîâ

Äëÿ ïîèñêà ôàéëîâ â êàòàëîãàõ ñåðâåðà èñïîëüçóåòñÿ íåñêîëüêî ôóíêöèé: glob(), fnmatch() è ôóíêöèè ðàáîòû ñ êàòàëîãàìè (opendir(), readdir(), rewinddir(), closedir()).

Ôóíêöèÿ opendir() îòêðûâàåò óêàçàííûé êàòàëîã è óñòàíàâëèâàåò âíóòðåííèé óêàçàòåëü íà ïåðâûé ôàéë. Ôóíêöèÿ âîçâðàùàåò òàê íàçûâàåìûé "handle" (÷èòàåòñÿ "õýíäë") èëè "óêàçàòåëü". Ýòîò óêàçàòåëü ïåðåäà¸òñÿ âñåì ïîñëåäóþùèì ôóíêöèÿì ïðè ðàáîòå ñ äàííûì êàòàëîãîì.

Ôóíêöèÿ readdir() âîçâðàùàåò èìÿ òåêóùåãî ôàéëà â êàòàëîãå è ïåðåìåùàåò âíóòðåííèé óêàçàòåëü íà ñëåäóþùèé ôàéë. Åñëè ïîñëåäíèé ôàéë óæå áûë ïðî÷èòàí - ôóíêöèÿ âåðí¸ò FALSE. Ôóíêöèÿ rewinddir() ñáðàñûâàåò âíóòðåííèé óêàçàòåëü íà ïåðâûé ôàéë â êàòàëîãå. Ôóíêöèÿ closedir() çàêðûâàåò ðàíåå îòêðûòûé êàòàëîã è îñâîáîæäàåò âñåè èñïîëüçóåìûå ðåñóðñû.

Ôóíêöèÿ fnmatch($pattern, $filename) ïðîâåðÿåò, ñîîòâåòñòâóåò ëè èìÿ ôàéëà $filename ìàñêå $pattern.

Ïðèìåð ïîèñêà ôàéëà ïî øàáëîíó:

<?php
    $dir = "./backups/";
    // ïðîâåðÿåì, ÷òî $dir - êàòàëîã
    if (is_dir($dir)) {
        // îòêðûâàåì êàòàëîã
        if ($dh = opendir($dir)) {
            // ÷èòàåì è âûâîäèì âñå ýëåìåíòû
            // îò ïåðâîãî äî ïîñëåäíåãî
            while (($file = readdir($dh)) !== false) {
                if(fnmatch('myfile_*.txt', $file))
                    echo 'Ðåçåðâíàÿ êîïèÿ: ';

                echo "$file : " .
                     filetype($dir . $file) . "<br />\n";

            }
            // çàêðûâàåì êàòàëîã
            closedir($dh);
        }
    }
?>

Ôóíêöèÿ glob( $pattern ) âîçâðàùàåò ìàññèâ ôàéëîâ è êàòàëîãîâ, ñîîòâåòñòâóþùèõ ìàñêå $pattern. Åñëè ïðîèçîøëà îøèáêà èëè íè÷åãî íå íàéäåíî - ôóíêöèÿ âåðí¸ò FALSE.

Ïðèìåð:

<?php
    foreach (glob("./backups/*.txt") as $filename) {
        echo "$filename : " . filesize($filename) . " áàéò\n";
    }
?>

Ðàññìîòðåííûõ â ýòîì óðîêå ôóíêöèé äîñòàòî÷íî äëÿ ðåøåíèÿ áîëüøèíñòâà ïðàêòè÷åñêèõ çàäà÷. Íåîáõîäèìîñòü èñïîëüçîâàíèÿ ñðåäñòâ óïðàâëåíèÿ ôàéëàìè âîçíèêàåò ïðàêòè÷åñêè â êàæäîì ñðåäíåì è êðóïíîì ïðîåêòå. ×àùå âñåãî óïîìÿíóòûå ôóíêöèè èñïîëüçóþòñÿ äëÿ ðàáîòû ñ ôàéëîâûìè àðõèâàìè, ôîòî- è âèäåîàëüáîìàìè, à òàê æå ïðè çàãðóçêå ïîëüçîâàòåëÿìè ôàéëîâ íà ñåðâåð.



 íà÷àëî ñòðàíèöû



 íà÷àëî ñòðàíèöû