Відкриття файлу, Функції, PHP, статті

Робота з файлами в 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 “

Стоку номер $ i ($ num полів): “;
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>

*

*