Notice: Undefined variable: this in /home/dimarini/public_html/libraries/src/Application/CMSApplication.php on line 441

Манипулиране на файлове в PHP


Функцията fopen() се използва за отваряне на файлове в PHP. Като първи параметър в тази функция се задава името на файла, който трябва да се отвори. Вторият параметър определя в какъв режим да се отвори:

    <html>
<body>

<?php
$file=fopen("welcome.txt","r");
?>

</body>
</html>

Файлът може да се отвори в един от следните режими:

  • r - Read only (само четене). Отварянето започва вот началото на файла.
  • r+ - Read/Write (четене/запис). Отварянето започва вот началото на файла.
  • w - Read only (само четене). Отваря и изчиства съдържанието на файла или създава нов файл ако такъв не съществува.
  • w+ - Read/Write (четене и запис). Отваря и изчиства съдържанието на файла или създава нов файл ако такъв не съществува.
  • a - Append (разширяване). Отваря файла и записва в края или създава нов файл ако такъв не съществува.
  • a+ - Read/Append (четене/разширяване. Запазва съдържанието на файла като записва в края му.
  • x - Write only (само запис). Създава нов файл. Връща false и грешка ако такъв файл вече съществува.< /li>
  • x+ - Read/Write (четене/запис). Създава нов файл. Връща false и грешка ако такъв файл вече съществува.

Ако функцията fopen() не може да отвори определен файл тя връща 0 (false). Изпълнението на кода в долният пример генерира съобщение "Файла не се отваря" ако функцията не може да отвори файла "welcome.txt", а ако такъв файл няма освен това ще генепипа и съответното съобщение за грешка:

    <html>
<body>

<?php
$file=fopen("welcome.txt","r") or exit("Файла не се отваря");
?>

</body>
</html>

Функцията fclose() се използва за затваряне на отворени файлове в PHP.

    <?php
$file = fopen("test.txt","r");

//код за изпълнение

fclose($file);
?>

Функцията feof() проверява дали е достигнат края на файла. Тази функция може да се използва при цикъл с данни, за които дължината не е известна. Не може да се чете от файлове отворени в режими w, a и x.

    if (feof($file)) echo "Край на файла"; 

Функцията fgets() се използва за прочитане на отделен ред от даден файл. При повикване на тази функция файловия пойнтър се придвижва към следващия ред. В следващият пример е паказано прочитането на файл ред по ред докато се достигне края на файла:

    <?php
$file = fopen("welcome.txt", "r") or exit("Файла не се отваря!");
//Изкарва ред от файла докато се достигне края
while(!feof($file))
{
echo fgets($file). "<br />";
}
fclose($file);
?>

Функцията fgetc() се използва за прочитане на единичен символ от даден файл. При повикване на тази функция файловия пойнтър се придвижва към следващия символ докато се достигне края на файла. В следващият пример е показано прочитането на файл символ по символ докато се достигне края на файла:

    <?php
$file=fopen("welcome.txt","r") or exit("Файла не се отваря!");
while (!feof($file))
{
echo fgetc($file);
}
fclose($file);
?>

Качване на PHP файл

Качването на файлове от потребител с използването на форма може да е доста полезно. Да погледнем следната HTML форма за качване на файлове:

    <html&gl;
<body&gl;

<form action="upload_file.php" method="post" enctype="multipart/form-data"&gl;
<label for="file"&gl;Filename:</label&gl;
<input type="file" name="file" id="file" /&gl;
<br /&gl;
<input type="submit" name="submit" value="Submit" /&gl;
</form&gl;

</body&gl;
</html&gl;

Атрибутът enctype на тага <form>; определя какъв тип съдържание да се използва при изпращането на формата. Стойността "multipart/form-data" се използва, когато формата изисква съдържнието на файла за качване да е в двоичен код. Атрибутът type="file" на тага <input> определя, че входа трябва да се обработва като файл (file). Създаване на скрипт за качване Файла "upload_file.php" съдържа код за качване на файлове:

    <?php
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
}
?&gl;

С използване на глобалния PHP масив $_FILES могат да се качват файлове от клиентския компютър на външен сървър. Първият параметър е входното име за формата, а вторият индекс може да бъде едно от следните "name", "type", "size", "tmp_name" или "error". Подобно на следдното:

  • $_FILES["file"]["name"] - the name of the uploaded file
  • $_FILES["file"]["type"] - the type of the uploaded file
  • $_FILES["file"]["size"] - the size in bytes of the uploaded file
  • $_FILES["file"]["tmp_name"] - the name of the temporary copy of the file stored on the server
  • $_FILES["file"]["error"] - the error code resulting from the file upload

Това е един много лесен начин за качване на файлове.

Ограничения при качване

В кода по-долу са добавени някои ограничения за качване на файлове. Потребителят може да качва само файлове с разширения .gif или .jpeg с максимален размер от 20 kB. За да може IE да разпознае jpg файлове разширението трябва да е pjpeg, а за FireFox - jpeg:

    <?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
}
}
else
{
echo "Invalid file";
}
?&gl;

Съхраняване на качен файл

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

    <?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";

if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}
}
else
{
echo "Invalid file";
}
?>
Ръководството е съставено от Никола Меранзов
0888 414 809
Този имейл адрес е защитен от спам ботове. Трябва да имате пусната JavaScript поддръжка, за да го видите.
http://dimarini.net