Відкриття файлу

Робота з файлами у PHP дуже нагадує роботу з файлами в Сі. Тобто,
спочатку файл відкривається в потрібному режимі, при цьому повертається деяке ціле
число. Наступним етапом йде власне роботу з самим фалом (читання, запис …)
Останнім етапом є закриття файлу. Деякий програмісти стверджують, що
файл можна не закривати, так як PHP автоматично закриває всі відкриті файли
по завершенню сценарію. Це все правда, але особисто я вам рекомендую закривати
самим фали, сприймайте це як гарний стиль кодінг.

fopen ($filename, $mode, $use_other_path=false)

Отже, ми відкриваємо файл $ filename в режимі $ mode. Особисто я дуже рідко
використовую третій параметр $ use_other_path, він означає, що якщо не вказано
відносний шлях до файлу, його потрібно шукати серед шляхів використовуваних
конструкціями include і require.

Перед вами список значень, які може приймати параметр $ mode:


У кінці будь-якої з рядків r, w, a, r +, w +, a + може знаходитися ще один символ-"b"
або "t". Якщо вказано "b", файл відкриватиметься у режимі бінарного читання / запису.
Якщо "t", встановлюється режим трансляції символу переведення рядка. Про режим "t"
немає ні слова в документації, але повіримо Дмитру Котеровим, який стверджує,
що цей режим працює у всіх системах.

Все це можна продемонструвати на прикладі:

<?

/ * Отримує в параметрах рядок і повертає через пробіл
коди символів, з яких вона складається * /

function makehex($st)
{
for ($ i = 0; $ i <strlen ($ st); $ i + +) $ hex [] = sprintf ("% 2X", ord ($ st [$ i]));
return join (" ",$hex);
}

# Відкриваємо файл різними способами

$f= fopen("test.php","r");
echo makehex(fgets($f,100))."
";
$f= fopen("test.php","rt");
echo makehex (fgets($f,100))."
";

?>


Перший рядок файлу test.php складається всього з двох символів "<?", за ними
повинен слідувати маркер кінця рядка. Скрипт показує, як виглядає цей
маркер, тобто складається він з одного або з двох символів.

Запускаємо скрипт в Unix. Одержуємо дві однакові рядки:

3С 3F 0A
3C 3F 0A

Значить, у цій системі фізичний кінець рядка позначається одним символом-
кодом 0x0A або . Якщо запустити скрипт в Windows, одержимо:

3С 3F 0D 0A
3C 3F 0A

Бінарне і текстове читання дали різні результати.

Не використовуйте зворотний слеш в іменах файлів. Якщо ви працюєте в Windows,
то ці слеш будуть автоматично переведені на нормальні. Якщо ви просто не
можете обійтися без зворотного слеша, не забудьте подвоїти його, так він
сприймається як спецсимволи.

Конструкція or die ().

 ($ F = fopen ("/ homa / user / file.txt", "r")) or die ("error");

Якщо файл не відкрився, то помилка. Все досить просто. Варто зауважити, що or
не можна замінити на "|", тому що останній має більш високий пріоритет.

Безіменні тимчасові файли.


Досить часто нам необхідно занести якусь інформацію у тимчасове
сховище. Не скажу, що для реалізації повсякденних завдань підійде спосіб
створення тимчасових файлів, але … Для цього розумні дядьки-розробники PHP
придумали функцію tmpfile (). Ця функція створює новий файл, доступний для
читання і запису, з унікальним ім'ям. Далі можна буде працювати тільки з
файловим дескриптором, ім'я файлу недоступне. Місце, займане тимчасовим файлом,
звільняється відразу після закриття файлу або завершенні роботи сценарію.

Закриття файлу.


Як я (і не тільки я) говорив, після роботи з файлом його бажано закрити.
Робиться це функцією fclose ($ fp). Ця функція закриває файл, відкритий функцією
fopen () (або аналогічними функціями). Повертає false, якщо закрити файл не
вдалося. Ви ЗАВЖДИ повинні закривати FTP-і HTTP – з'єднання.

Блокові читання / запис.

fread($f, $numberbytes);

Читає з файлу $ f $ numberbytes символів і повертає рядок цих символів.
Якщо $ numberbytes більше ніж чим можна вважати, то повертається те, що вдалося.

fwrite($f, $st);

Запсивает в файл $ f вміст рядка $ st. У деяких клінічних випадках
функції fread () і fwrite () можна використовувати для копіювання файлів.

Построкові читання / запис.

fgets($f, $dlina);

Зчитує з файлу один рядок, заканчівающіюся символом нового рядка . На
перший погляд це дуже корисна функція. котороая дозволяє пройтися по стркам
у файлі. Але на мою скромну думку (що радує, так це те, що в цьому я не
самотній) більш раціонально використовувати функцію file ().

fputs($f, $st);

Аналогічна функції fwrite ().

Читання CSV-фала.


Дуже багато людей використовує таку хитромудру програму, як Microsoft
Excel. Тому мудрі розробники PHP придумали спеціальну функцію для роботи з
одним з видів файлів, в який може зберігати ця програма.

fgetcsv($f, $dlina, $delit=”,”);

Ця функція счтивает один рядок з файлу $ f, і розбиває її по символу
$ Delit. Параметр $ delit обов'язково повинен бути довжиною в один символ. Параметр
$ Dlina задає максимальну довжину рядка. Порожні рядки ігноруються, а
повертаються як список з одного елемента. fgetcsv () працює трохи спритніші,
ніж fgets () і explode (). Приклад:

$ F = fopen ("file.csv", "r") or die ("помилка");
for ($i=0; $data=fgetcsv($f,1000, ";"); $i++)
{
$num= count($data);
if ($num==1 && $data[0]==="") continue;
echo "<h4> Стоку номер $ i ($ num полів): </ h3>";
for ($c=0; $c<$num; $c++)
print "[$c]: $data[$c]
";
}
fclose($f);

Полеженіе покажчика поточної позиції.

feof($f)

Повертає true, якщо досягнуто кінець файлу. Найчастіше ця функція
використовується так:

$f= fopen("my_file.txt","r");
while (!feof($f))
{
$st=fgets($f);

/ / Обробляємо чергову рядок $ st

}
fclose($f);


Я думаю, що не варто зайвий раз наголошувати на тому, що якщо попадеться
великий файл, ця Фунція буде досить довго думати.

fseek($f, $offset, $whence=SEEK_SET)

Встановлює покажчик на байт зі зміщенням $ offset. Параметр $ whence
задає, з якого місця отчітиватся зсув $ offset.


!! У разі успішного завершення функція повертає 0, а в разі провалу -1.
ftell ($ f) Повертає положення покажчика файлу.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*