Записване на данните във файл
За да прочетем информация от даден файл, първо е необходимо да я запишем в него. Записването на файл на сървъра преминава през четири етапа:
- Проверка дали файлът съществува и дали в него може да се записва информация.
- Отваряне на файла.
- Запис на данните.
- Затваряне на файла.
В РНР, за изпълнение на всяко от тези действия, има вградена функция:
is_writable (), fopen (), fwrite (), fclose ().
Функция is_writable ()
Функцията is_writable () проверява дали файлът съществува и в него може да бъде записвана информация. Синтаксисът на функцията е:
bool is_writable ( string $filename)
$filename- задължителен параметър, съдържащ името на файла (или директорията), който (която) ще проверяваме дали съществува и, дали е записваем (записваема).
Забележка:
Резултатът, който връща функцията is_writable () се кешира. За да изтриете кеша е необходимо да използвате функцията clearstatcache().
Повече информация: http://php.net
Функцията is_writable () проверява дали файлът съществува и в него може да бъде записвана информация. Синтаксисът на функцията е:
bool is_writable ( string $filename)
$filename- задължителен параметър, съдържащ името на файла (или директорията), който (която) ще проверяваме дали съществува и, дали е записваем (записваема).
Забележка:
Резултатът, който връща функцията is_writable () се кешира. За да изтриете кеша е необходимо да използвате функцията clearstatcache().
Повече информация: http://php.net
Функция fopen ()
Функцията fopen () служи за създаване или отваряне на файл или URL. Синтаксисът ѝ е следния:
fopen ( string $filename , string $mode
[, bool $use_include_path [, resource $context ]])
Какво e значението на всеки един от параметрите на функцията?
$filename- задължителен параметър. Съдържа името на файла или URL-а, който ще се отваря.
$mode- задължителен параметър. Определя типа на достъп до файла или потока. Списък за възможните режими при работа ($mode) на функцията fopen() можете да намерите на адрес: http://php.net/
$use_include_path- незадължителен параметър. Изберете стойност 1, ако искате да търсите файла и по пътя, указан в include_path (на php.ini файла).
$context- незадължителен параметър. Този параметър може да промени режима на работа на потока (stream).
Забележка:
Знакът за край на ред е различен в зависимост от операционната система, с която работите. Когато се опитате да пишете във файл, но това е невъзможно, най-вероятно нямате права за писане. При операционни системи, които правят разлика между двоични и текстови файлове (като Windows), файлът трябва да е отворен с флаг "b" при извикването на fopen().
Повече информация: http://php.net
Функцията fopen () служи за създаване или отваряне на файл или URL. Синтаксисът ѝ е следния:
fopen ( string $filename , string $mode
[, bool $use_include_path [, resource $context ]])
Какво e значението на всеки един от параметрите на функцията?
$filename- задължителен параметър. Съдържа името на файла или URL-а, който ще се отваря.
$mode- задължителен параметър. Определя типа на достъп до файла или потока. Списък за възможните режими при работа ($mode) на функцията fopen() можете да намерите на адрес: http://php.net/
$use_include_path- незадължителен параметър. Изберете стойност 1, ако искате да търсите файла и по пътя, указан в include_path (на php.ini файла).
$context- незадължителен параметър. Този параметър може да промени режима на работа на потока (stream).
Забележка:
Знакът за край на ред е различен в зависимост от операционната система, с която работите. Когато се опитате да пишете във файл, но това е невъзможно, най-вероятно нямате права за писане. При операционни системи, които правят разлика между двоични и текстови файлове (като Windows), файлът трябва да е отворен с флаг "b" при извикването на fopen().
Повече информация: http://php.net
Функция fwrite ()
Тази функция се прилага за двоично безопасно записване във файл.
Синтаксисът ѝ е следния:
int fwrite (resource $handle, string $string[, int $length])
$handle- задължителен параметър, определящ кой е файлът, в който ще пишем.
$string- задължителен параметър, съдържащ стринга, който ще се впише във файла.
$length- незадължителен параметър. Определя максималния брой байтове, които могат да бъдат записани. Ако сме задали стойност на този параметър, опцията magic_quotes_runtime в php.ini файла, ще бъде игнорирана, в резултат на което, ако в $string има наклонени черти, те няма да бъдат изрязани.
Повече информация: http://php.net
Тази функция се прилага за двоично безопасно записване във файл.
Синтаксисът ѝ е следния:
int fwrite (resource $handle, string $string[, int $length])
$handle- задължителен параметър, определящ кой е файлът, в който ще пишем.
$string- задължителен параметър, съдържащ стринга, който ще се впише във файла.
$length- незадължителен параметър. Определя максималния брой байтове, които могат да бъдат записани. Ако сме задали стойност на този параметър, опцията magic_quotes_runtime в php.ini файла, ще бъде игнорирана, в резултат на което, ако в $string има наклонени черти, те няма да бъдат изрязани.
Повече информация: http://php.net
Функцията fclose ()
Тази функция служи за затваряне на вече отворен файл. Синтаксисът ѝ е следния:
bool fclose ( resource $handle )
$handle- задължителен параметър. Съдържа името на файла, който искаме да затворим.
Повече информация: http://php.net
Тази функция служи за затваряне на вече отворен файл. Синтаксисът ѝ е следния:
bool fclose ( resource $handle )
$handle- задължителен параметър. Съдържа името на файла, който искаме да затворим.
Повече информация: http://php.net
Запис във външен файл
Какво се случи, когато създадох тестов файл, с който опитах да добавя стринг във файла date.txt?
В екрана на браузъра получих следното съобщение:
Защо нямам достъп до файла? Защото нямам права за писане в съответната директория. Повече за правата на достъп до директория или файл: http://dreamlandpoly.blogspot.com/p/files-2.html
В екрана на браузъра получих следното съобщение:

Защо нямам достъп до файла? Защото нямам права за писане в съответната директория. Повече за правата на достъп до директория или файл: http://dreamlandpoly.blogspot.com/p/files-2.html
Ще създадем форма, която съхранява въведените от потребителя име, фамилия, URL адрес и коментар в отделен файл (date.txt), който се съхранява на сървъра.
Ще ползваме файла form_2.html
(http://dreamlandpoly.blogspot.com/p/regularexpression-4.html#form2)
- Отворете текстовия редактор.
- Създайте нов документ и го наименовайте form_3.html.
- Променете стойността на атрибута action от ред 9 така:
<form action="HandleForm_3.php" method="post" target="_blank">
Съдържанието на файла form_3.html ще бъде:
<!Doctype html> <html> <head> <title>HTML Форма</title> <meta http-equiv="Content-Type" content="text/html"; charset="UTF-8"> </head> <body> <form action="HandleForm_3.php" method="post" target="_blank"> Име: <br/><input type=text name="firstname" /> <br/><br/> Фамилия: <br/><input type=text name="lastname" /> <br/><br/> URL:<br/> <input type=text name="url"/> <br/><br/> Описание: <br/><textarea name="description" ></textarea><br/><br/> <input type=submit name="submit" formenctype="multipart/form-data" value="Напред >>"/> </form> </body> </html>Съхранете файла и го качете на сървъра.
Ще създадем файл HandleForm_3.php, който ще обработва данните, генерирани от form_3.html.
- В текстовия редактор създайте нов документ.
- Дайте му наименование HandleForm_3.php.
- Създаваме функция Write_to_file (), чиято роля ще бъде да провери дали файлът date.txt съществува, да отвори файла, да впише желаната информация и да го затвори.
- В текстовия редактор въвеждаме:
- Първото нещо, което трябва да направи функцията Write_to_file () е да провери дали са подадени име, фамилия, URL и коментар от формата. В текстовия редактор въвеждаме:
<?php function Write_to_file (){ if (isset($_POST['submit'])) { $firstname = $_POST['firstname']; $lastname = $_POST['lastname']; $url = $_POST['url']; $description = $_POST['description'];
За да може работата ни с файлове да е удобна, в началото винаги присвояваме отделни променливи за името на файла и пътя до него (точните координати на файла на сървъра).
$file = '/opt/lampp/htdocs/phpbegin/date.txt';
$handle = fopen($file, 'a+');
С първата променлива $file задаваме името на файла, а с втората го отваряме за запис (ако файлът не съществува, функцията fopen () го създава, в противен случай новите данни се добавят в края му). Добавяме и още две променливи $day и $hour, които ще извеждат дата и час:
$day = date("Y/m/d");
$hour = date("h:i:sa");
Променливата $somecontent държи стринга, който съдържа дата, час и данните, получени от формата:
$somecontent =
"Дата: $day
Час: $hour
Име: $firstname
Фамилия: $lastname
URL: $url
Описание: $description";
Следват условни конструкции if, с които проверяваме дали файлът е записваем:
Създаваме HTML заглавие и извикваме функцията:
$file = '/opt/lampp/htdocs/phpbegin/date.txt';
$handle = fopen($file, 'a+');
С първата променлива $file задаваме името на файла, а с втората го отваряме за запис (ако файлът не съществува, функцията fopen () го създава, в противен случай новите данни се добавят в края му). Добавяме и още две променливи $day и $hour, които ще извеждат дата и час:
$day = date("Y/m/d");
$hour = date("h:i:sa");
Променливата $somecontent държи стринга, който съдържа дата, час и данните, получени от формата:
$somecontent =
"Дата: $day
Час: $hour
Име: $firstname
Фамилия: $lastname
URL: $url
Описание: $description";
Следват условни конструкции if, с които проверяваме дали файлът е записваем:
if (is_writable($file)) { if (!$handle) { echo "Не мога да отворя ($file)"; exit; } if (fwrite($handle, $somecontent) === FALSE) { echo "Не мога да записвам ($file)"; exit; } echo "Данните са записани във файл $file"; fclose($handle); } else { echo "Не може да се пише във файл $file"; } } }//край на функцията Write_to_file ?>Ако файлът се отвори успешно, новите данни ще се добавят към старите.
Създаваме HTML заглавие и извикваме функцията:
<html> <head> <title><Работа с файлове</title> </head> <body> <?php Write_to_file (); ?> </body> </html>Съхранете файла и го качете на сървъра в същата директория, където се намират файловете form_3.html и date.txt.
Крайният файл HandleForm_3.php ще изглежда така:
<?php //Записва данните, получени от form_3.html, //във файл date.txt function Write_to_file (){ if (isset($_POST['submit'])) { $firstname = $_POST['firstname']; $lastname = $_POST['lastname']; $url = $_POST['url']; $description = $_POST['description']; //Посочва пътя до файла, в който ще записваме $file = '/opt/lampp/htdocs/phpbegin/date.txt'; //Отваря файла в режим за добавяне $handle = fopen($file, 'a+'); //Извежда текущата дата $day = date("Y/m/d"); //Извежда час $hour = date("h:i:sa"); //Тази променлива съдържа стринга, //който ще се съхрани във файла date.txt $somecontent = "Дата: $day Час: $hour Име: $firstname Фамилия: $lastname URL: $url Описание: $description"; //Проверява дали файлът е записваем if (is_writable($file)) { if (!$handle) { echo "Не мога да отворя ($file)"; exit; } // Записва $somecontent в отворения файл if (fwrite($handle, $somecontent) === FALSE) { echo "Не мога да записвам ($file)"; exit; } //Файловия указател е в края на файла и там ще //отидат данните записани с fwrite() //Извежда съобщение, че данните са успешно записани echo "Данните са записани във файл <b>$file</b>"; //Затваря файла date.txt fclose($handle); } else { echo "Не може да се пише във файл <b>$file</b>"; } } }//край на функцията Write_to_file ?> <html> <head> <title>Работа с файлове</title> <meta http-equiv="Content-Type" content="text/html"; charset="UTF-8"> </head> <body> <?php Write_to_file (); ?> </body> </html>Тествайте в браузъра.



|
Няма коментари:
Публикуване на коментар