Php – Работа с файлове



Дата02.02.2018
Размер79.31 Kb.

PHP – Работа с файлове

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

Целта на упражнението е да се усвои технологията на езика за взаимодействие с различните типове файлове, по конкретно създаване, отваряне и затваряне на файлове. След усвояването на тези средства ще бъдат разгледани и други важни задачи свързани с файловете като: read, write, append, truncate и upload files с PHP.

1. Създаване на файлове Функция Create


За създаване и отваряне на файлове се използва една и съща команда - fopen . Когато се обращаме с функция към файл, който не съществува, ние го създавате и същевремено го отваряме за да запишим или добавим данни в него. За да рзботи коректно fopen –функцията изисква да се зададе име на файла и какво планираме да правим с него. В случай, че искаме да създадем файл, трябва да му запишем името и че ще записваме в него, иначе няма да успеем да създадем нов файл.

Пример 1. ourFileName = "testFile.txt";

$ourFileHandle = fopen($ourFileName, 'w') or die("can't open file");

fclose($ourFileHandle);

Файлът "testFile.txt" ще бъде създаден в същата дироктория, в която се намира този PHP код.

Какво означават тези три реда от кода:



  • $ourFileName = "testFile.txt";

Тук задаваме име на нашия файл "testFile.txt" и го съхраняваме в PHP стринговата променлива $ourFileName.

  • $ourFileHandle = fopen($ourFileName, 'w') or die("can't open file");

Тази част от кода съдържа две части:

  1. fopen функцията има два аргумента: името на файл и 'w' – което означава, че ще записваме в него.

  2. fopen функцията връща така нареченото file handle, което ни позволява да манипулираме файла. Съхраняваме file handle в променливата $ourFileHandle.

    • fclose($ourFileHandle);

С този ред затваряме фалът, който отворихме. fclose се обръща към file handle, който трябва да се затвори.

Забележка: Ако при изпълнението на кода записан по-горе се получи грешка, това означва, че нямаме право да записваме на твърдия диск. За да се разреши правото на запис, най-често се използва FTP програма , която да изпълни командата CHMOD.



2. Способи за отваряне на файлове.

Поради много различни технически причини PHP изисква да се спесифицират със съответен символ намеренията ни при отварянето на файла.



  • Read: 'r'

Файлът се отваря само за четене. Указателя на файла се позиционира в началото му.

  • Write: 'w'

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

  • Append: 'a'

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

В PHP чрез file pointer се помни текущата позиция на фала.



    1. Допълнителни способи за отваряне на файлове

В случай, че искаме при отварянето на файла да е разрешено писането и четенето на данни в него трябва да изполваме следния запис:

  • Read/Write: 'r+'

Указтеля на файла се намира в началото.

  • Write/Read: 'w+'

Това е едно и сащо както записа с r+, освен че изтрива всичката информация при отваряне на файла.

  • Append: 'a+'

Това е едно и сащо както записа с r+, освен че указателя на файла се позиционира в края на файла.

Следващият пример представя коректната форма за отваряне на файлове с PHP. Заместваме (X) с една от горните опции ( r, w, a, и др.).

$ourFileName = "testFile.txt";

$fh = fopen($ourFileName, 'X') or die("Can't open file");

fclose($fh);


    1. Затваряне на файлове

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

Функцията fclose затваря файла. Тя изисква да се укаже file handle, който трябва да се затвири. Виж. Примера 1.



5. Запис на данни във файл

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

Пример:2 $myFile = "testFile.txt";

$fh = fopen($myFile, 'w') or die("can't open file");

$stringData = "Иван Иванов\n";

fwrite($fh, $stringData);

$stringData = "Петър Петров\n";

fwrite($fh, $stringData);

fclose($fh);

Променливата $fh съдържа file handle за testFile.txt. „ file handle” знае позицията на текущия указател на файла, който за запис е в началото на файла.

При отварянето на файла testFile.txt наприме с NOTEPAD ще се види следния запис:

Иван Иванов


Петър Петров

Следващия пример демонстрира какво ще се случи, когато се отвори testFile.txt , който съдържа данни за да се записва в него.

Пример 3.$myFile = "testFile.txt";

$fh = fopen($myFile, 'w') or die("can't open file");

$stringData = "Ана Цолова\n";

fwrite($fh, $stringData);

$stringData = "Бойко Василев\n";

fwrite($fh, $stringData);

fclose($fh);

Всички предишни дани във файла ще бъдат изтрити. При отваряне на файла testFile.txt с текстов редактор ще се изпи следната информация:

Ана Цолова


Бойко Василев

    1. Използване на PHP функции за четене на данн от файлове

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

$myFile = "testFile.txt";

$fh = fopen($myFile, 'r');

Функцията fread се използва за прочитане на данните от файла. Тя изисква също „file handle”, с който разполагаме и цяло число, което да укаже на функцията колко данни в байтове трябва да бъдат прочетени. Един символ е равен на един байт.


Пример 4.


$myFile = "testFile.txt";

$fh = fopen($myFile, 'r');

$theData = fread($fh, 5);

fclose($fh);

echo $theData;

Ще се изпише:


Ана Ц

Когато се налага да се прочете цялото съдържание на файла, е необходимо да се вземе размера на файла. Функцията filesize връща дължината на файла в байтове. Тя изисква името на файла, който трябва да се измери.


Пример 5.


$myFile = "testFile.txt";

$fh = fopen($myFile, 'r');

$theData = fread($fh, filesize($myFile));

fclose($fh);

echo $theData;

Резултат от изпълнението на кода:


Ана Цолова Бойко Василев
Забележка: Съдържанието на "testFile.txt" файла се съхранява в стринговата променлива $theData и се изписва на един ред.

Функцията gets позволява да се прочете ред от отворения файл. Това е възможно, в случаите когато даннит във файла са разделени със символ за нов ред. Функцията търси първия срещнат "\n".

Файлът "testFile.txt" от Пример 3. е записан със знак за нов ред, така че можем да изпозваме функцията gets.
Пример 6. $myFile = "testFile.txt";

$fh = fopen($myFile, 'r');

$theData = fgets($fh);

fclose($fh);

echo $theData;
Ще се изпише:

Ани Цолова


8. Изтриване на файлове – функция unlink
С помоща на функцията unlink файловете могат да бъдат унищожавани (изтривани).

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

Пример 7. $myFile = "testFile.txt";

unlink($myFile);

В резултат testFile.txt ще бъде изтрит.

9. Добавяне на данни във файл

В случай, че искаме да домавим данни към вече записани данни във файл е необходимо да го отворим в режим append . Сслдващия пример илюстрира изпозването на този режим.

Пример 8. $myFile = "testFile.txt";

fh = fopen($myFile, 'a') or die("can't open file");

$stringData = " Журналист 1\n";

fwrite($fh, $stringData);

$stringData = "Журналист 2\n";

fwrite($fh, $stringData);

fclose($fh);

Добавянето на данните започва от края на файла. Съдържанието на файла ще бъде:

Ана Цолова
Бойко Василев

Журналист 1

Журналист 2
10. Изтриване на информацията съдържаща се във файл

В т.5 беше казано, че при отваряне на файл с параметър 'w' , всички данни записани в него се изтриват.

Пример 9. $myFile = "testFile.txt";

$fh = fopen($myFile, 'w');

fclose($fh);

Всички предварително записани данни от testFile.txt ще бъдат изтрити.

Тази функция е много полезна, при използване на файлове само за временно съхраняване на данните. Например, можете да създадете он-лайн word processor, който автоматично прави запис всеки 3 секунди. При всяко съхраняване ще се вземат данните от някоя HTML форма и ще се записват върху сървъра. Този файл, нека го назовем tempSave.txt ще изтрива старта и записва новата информация всеки 3 секунди.

11. Зареждане на файлове върху сървъра

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

За да може да може да се зареждат файлове на сървъра, преди всичко е необходимо да се създаде HTML форма от където да се избере файла за зареждане.

Пример 10.





Choose a file to upload:






Следва кратко описание на по-важните части от кода:



  • enctype="multipart/form-data" - Necessary for our to-be-created PHP file to function properly.

  • action="uploader.php" – Името на PHP страницата, която ще създадем. method="POST" – Информира браузера, че се изпраща информация към сървъра по метода POST.

  • input type="hidden" name="MA... – задава разрешения максимален размер на файла в байтове, който може да се качи. Това може да се използва като механизам за сигурност.

  • input name="uploadedfile" – показва как да осъществим достъп до файла от нашия PHP скрипт.

Съхраняваме файла с име upload.html. Отворен в браузера той ще изглежда по следния начин:

Choose a file to upload:

След кликване на бутона за изпращане, данните ще се изпратят към сървъра и той ще ги пренасочи към uploader.php. PHP файлът ще обработи данните изпратени от формата.

След съдаването на HTML формата трябва да се напише PHP скрипта, който да управлява зареждането. PHP файла трябва да всеме ключово решение какво да се прави със заредената информация, да се запази файла или да се изтрие. Файла може да се изтрие по много причини, като например:


  • Файла е твърде голям и не го искате върху сървъра.

  • Очаква се клиента да прикачи снимка, се прикача нещо друго, например изпълним файл (.exe).

  • Появяват се проблеми при зареждането и файла не може да се съхрани.

При изпълнение на uploader.php, прикаченият се разполага върху сървъра в памет за временно съхранение. Ако файла не се премести на друго място, той ще бъде изтрит. За да бъде съхранена иформацията трябва да се използва $_FILES асоциативен масив.

В $_FILES масива PHP съхранява всичката информация за файла.



  • uploadedfile – това е референцията, която сме записали в HTMLформата. Това е необходимо за да се укаже на $_FILES с кой файл ще се свърже.

  • $_FILES['uploadedfile']['name'] - name съдържа оригиналния път до зареждания файл .

  • $_FILES['uploadedfile']['tmp_name'] - tmp_name съдържа пътя до временнот място на файла върху сървъра. Файла трябва да се съхрани на сървъра във временна диектория с врененно име.

Пример 11. // Къде ще бъде разположен файла

$target_path = "uploads/";

/* Add the original filename to our target path.

Result is "uploads/filename.extension" */

$target_path = $target_path . basename( $_FILES['uploadedfile']['name']);

$_FILES['uploadedfile']['tmp_name'];



Забележка: Трябва да създадете нова директория в директорията, където е записан файлът uploader.php, която се казва "uploads", тъй като възнамеряваме там да съхраняваме файловете.

12. Преместване на заредения файл с функцията move_uploaded_file

Функцията move_uploaded_file трябва да знае 1)пътя до временния файл 2) Пътя където трябва да се премести.

Пример 12. $target_path = "uploads/";
$target_path = $target_path . basename( $_FILES['uploadedfile']['name']);
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {

echo "Файлът ". basename( $_FILES['uploadedfile']['name']).

"е записан";

} else{


echo "Файла не бе записан, моля опитайте отново!";

}

Ако зареждането е успешно, ще се изпише текстта "файлът filename е зареден", в противен случай „Файла не бе записан, моля опитайте отново!”



Забележка: Скрипта от пример 11 не се препоръчва да записва в web страница публично достъпна, защото по този начин всеки би могал да записва файлове върху Вашия сървър и неговата сигурност да бъде застрашена.


Поделитесь с Вашими друзьями:


База данных защищена авторским правом ©obuch.info 2019
отнасят до администрацията

    Начална страница