Зміст
Жорсткі і символічні посилання
Опис поняття жорсткого чи символічного посилання необхідний лише для розуміння опису незначної кількості функцій, які стосуються цих понять.
Посилання на файл у Linux — це покажчик на файл, аналог ярлика ОС Windows. Звертаючись за таким посиланням, ви звернетеся до цього файлу незалежно від того, де розташоване посилання. Посилання в Linux бувають двох типів: символічні і жорсткі.
Символічна посилання (symbolic link) — це спеціальний файл, який є посиланням на інший файл (у тому числі й теку, їх називають цільовим файлом та цільовою текою). Символічні посилання також називають м'якими посиланнями (soft links) або сім-посиланнями (sym-link).
Схематично відношення між символічним посиланням, файлом і даними файлу можна показати таким чином:
Cимволічне посилання не містить у собі всередині копії самого файлу, на який воно вказує. Але символічне посилання має власні права доступу, бо є невеликим файлом, який містить шлях до цільового файлу. Можна створити кілька символічних посилань на один файл з різними назвами.
Зв'язок між символічною посиланням і файлом, на який воно вказує, є «м'яким»:
якщо видалити символічне посилання, то файл, на який воно вказує, не буде видалено;
якщо видалити файл, на який вказує посилання, то саме посилання залишиться незмінним, вказуючи на вже відсутній. Аналогічно, якщо перейменувати або перемістити цільовий файл, то посилання не буде оновлено.
При створенні символічних посилань можна вказувати відносний шлях до цільового файлу. В цьому відносний шлях тлумачать як шлях відносно теки, в якому створено це посилання.
Символічне посилання можна створити з використанням засобів менеджера файлів, вибравши Створити посилання у контектсному меню відповідного файлу.
У Linux кожен файл має унікальний ідентифікатор — індексний дескриптор (inode). Це число, яке однозначно ідентифікує файл у файловій системі. Індексні дескриптори файлів зберігають у спеціальній таблиці. Кожний логічний чи фізичний диск має власну таблицю дескрипторів. Саме номер індексу є справжньою назвою файлу в системі. Його можна побачити, застосувавши вказівку ls з ключем -i.
Жорстке посилання (hard link) виглядає у файловій структурі як ще один файл. При створенні жорсткого посилання у теці, у якій розташовано цільовий файл, назва посилання має відрізнятися від назви файлу. Жорстке посилання на файл має перебувати у тій самій файловій системі, де розташовано й інші жорсткі посилання на цей файл.
Жорстке посилання і файл, для якого його створено, мають однакові inode. Тому жорстке посилання має ті самі права доступу, власника і час останньої модифікації, що й цільовий файл. Розрізняються лише назви файлів. Фактично жорстке посилання — це ще одна назва для файлу.
На відміну від символічного (м'якого) посилання жорстке посилання не можe вказувати на теку, відсутній файл чи файл іншого диску.
Файл в операційній системі однозначно визначає лише номер його дескриптора, а назва файлу є лише дороговказом-посиланням на нього. Можна створити багато таких посилань, які будуть вказувати на один об'єкт. Інакше кажучи, файл в ОС Linux може мати кілька імен.
Видалення жорсткого посилання на файл не призводить до видаленння самого файлу з системи при наявності у інших жорстких посилань на цей файл. Всі жорсткі посилання рівні між собою, незалежно від часу створення, місцезнаходження у структурі тек тощо.
Файл буде доступний системі поки існуватиме хоча б одне жорстке посилання на нього. Інакше (у разі видалення всіх жорстких посилань) файл стане недоступним (його буде видалено з системи).
Жорсткі посилання виникли раніше, ніж символічні. Зараз у повсякденній роботі їх використовують рідше.
Вбудовані сталі (тип int)
FILE_USE_INCLUDE_PATH,
FILE_NO_DEFAULT_CONTEXT,
FILE_APPEND (додавання даних до наявного файлу),
FILE_IGNORE_NEW_LINES (вирізаюння кінців рядків EOL),
FILE_SKIP_EMPTY_LINES (пропуск порожніх рядків),
FILE_BINARY (бінарний режим, доступна лише для подальшої сумісності),
FILE_TEXT (текстовий режим, доступна лише для подальшої сумісності),
FNM_NOESCAPE (відключення екранування зворотних слешів),
FNM_PATHNAME (слеші в рядках збігаються лише зі слешами в зазначеному шаблоні),
FNM_PERIOD (провідна точка в рядку повинна збігатися з точкою в зазначеному шаблоні),
FNM_CASEFOLD (збіг без урахування регістру, частина розширення GNU),
GLOB_BRACE,
GLOB_ONLYDIR,
GLOB_MARK,
GLOB_NOSORT,
GLOB_NOCHECK,
GLOB_NOESCAPE,
GLOB_AVAILABLE_FLAGS,
INI_SCANNER_NORMAL (повернення до нормального режиму сканування INI),
INI_SCANNER_RAW (режим необробленого сканування INI),
INI_SCANNER_TYPED (режим типизованого сканування INI),
LOCK_SH,
LOCK_EX,
LOCK_UN,
LOCK_NB,
PATHINFO_DIRNAME,
PATHINFO_BASENAME,
PATHINFO_EXTENSION,
PATHINFO_FILENAME,
SEEK_SET,
SEEK_CUR,
SEEK_END.
Вбудовані функції
Якщо не вказано інше, вбудована функція повертає true у випадку успішного завершення або false у разі виникнення помилки. Більшість функцій недоступні для роботи з віддаленим файлом, бо файл має бути доступним через файлову систему сервера.
Тип integer у PHP є цілим числом зі знаком. Багато платформ використовують 32-х бітні цілі числа. Тому деякі функції файлових систем можуть повертати несподівані результати для файлів розміром більше 2 Гб.
Серед аргументів деяких функцій вказано необов'язковий параметр $context — ресурс контексту, створений за допомогою функції stream_context_create. Якщо немає потреби у використанні особливого контексту, можна пропустити цей параметр, передавши в нього значення null. Підтримка контексту була додана в PHP 5.0.0. Подані далі приклади не ілюструють роботу з контекстами, які описано серед потоків.
basename ($p, $s) — повертає останню складову назви шляху $p з відкиданням закінчення $s. Як усталено, $s = "".
Опрацьовує рядок $p без врахування реальної файлової системи або складових шляху типу "..". Враховує налаштування локалі, тому для коректного опрацювання шляху з багатобайтовими символами потрібно встановити відповідну локаль за допомогою функції setlocale. Якщо $p містить символи, неприпустимі для поточної локалі, поведінка basename не визначена.
На платформі Windows як роздільник назв тек використовують обидва слеші — прямий / і зворотний \. В інших операційних системах роздільником є лише прямий слеш /.
Див. приклад коду.
<?php echo "1) ".basename( "/home/user/input.txt", ".txt")."<br>"; echo "2) ".basename( "/home/user/input.txt")."<br>"; echo "3) ".basename( "/home/user")."<br>"; echo "4) ".basename( "/home")."<br>"; echo "5) ".basename( ".")."<br>"; echo "6) ".basename( "/"); ?>
з таким виведенням
1) input 2) input.txt 3) user 4) home 5) . 6)
chgrp($f, $g) — змінює групу файлу $f (рядок) на $g (рядок назви або номер групи). Лише суперкористувач може довільно змінювати групу файлу. Інші користувачі можуть змінювати групу файлу лише на ті групи, членами яких вони є. При ОС Windows функція завершується помилкою при застосуванні до звичайного файлу. Див. приклад коду!!!
<?php $f = 'input.txt'; $format = "Cтаном на %s ідентифікатор групи файлу %s є таким: %d <br>"; printf ($format, date ('r'), $f, filegroup($f)); chgrp ($f, 8); printf ($format, date ('r'), $f, filegroup($f)); clearstatcache (); //скидаємо кеш filegroup () printf ($format, date ('r'), $f, filegroup($f));?>
chmod($f, $p) — змінює режим доступу файлу $f на режим $p. Значення параметра $p не переводиться автоматично у вісімкову систему числення. Рядки вигляду "g + w" не буде опрацьовано належним чином.
<?php chmod("input.txt",755); // хибний десятковий запис chmod("input.txt","u + rwx, go + rx");// хибний рядок chmod("input.txt",0755); // правильний вісімковий запис ?>
Значення параметра $p складається з 3 вісімкових чисел, що визначають рівень доступу для власника файлу, для групи, в яку входить власник, і для інших користувачів. Число, що визначає рівень користувача, обчислюють як суму значень, що визначають права користувача:
1 — є доступ на виконання;
2 — є доступ на запис;
4 — є доступ на читання.
Докладніше про систему прав у системах Unix можна дізнатися за допомогою вказівак 'man 1 chmod' і 'man 2 chmod'.
<?php // Доступ на запис і читання для власника, немає доступу для інших chmod ("input.txt", 0600); // Доступ на запис і читання для власника, доступ на читання для інших chmod ("input.txt", 0644); // Повний доступ для власника, доступ на читання і виконання для інших chmod ("input.txt", 0755); // Повний доступ для власника, доступ на читання і виконання для групи власника chmod ("input.txt", 0750); ?>
Поточним користувачем є користувач, від імені якого виконують код PHP. Можливо, що це буде не той користувач, під ім'ям якого отримано доступ до оболонки вказівок або облікового запису FTP. Для більшості систем режим доступу до файлу може змінити лише його власник.
chown($f, $user) — для файлу з назвою $f змінює власника на $user (число або рядок). Лише суперкористувач може змінювати власника файлу — див. приклад.
<?php $file_name= "foo.php"; $path = "/home/sites/php.net/public_html/sandbox/".$file_name; $user_name = "root"; chown($path, $user_name); $stat = stat($path); print_r(posix_getpwuid($stat['uid'])); ?>
з виведенням такого вигляду (з точністю до пробілів і переходів на новий рядок).
Array ( [Name] => root [Passwd] => x [Uid] => 0 [Gid] => 0 [Gecos] => root [Dir] => /root [Shell] => /bin/bash )
При ОС Windows функція завершується помилкою при застосуванні до звичайного файлу.
clearstatcache ($clear, $f) — очищує кеш (проміжний буфер зі швидкісним доступом) стану файлу $f. Булевий параметр $clear (як усталено значення false) вказує, очищати кеш realpath чи ні. Рядковий параметр $f має як усталено значення "". Якщо він має інше значення, то задає назву єдиного файлу, стосовно якого потрібно очистити кеш.
Для забезпечення вищої продуктивності при роботі з файлами, PHP кешує результати виконання таких (описаних нижче) функцій: file_exists, fileatime, filectime, filegroup, fileinode, filemtime, fileowner, fileperms, filesize, filetype, is_dir, is_executable, is_file, is_link, is_readable, is_writable, lstat, stat. Інколи може знадобитися очищення цього кеша. Наприклад, коли скрипт кілька разів перевіряє стан одного і того самого файлу, який може бути змінений або видалений під час виконання скрипта. PHP не кешує інформацію про відсутні файли. Наприклад, функція file_exists на відсутньому файлі повертає false до тих пір, поки не буде створено цей файл. Після створення такого файлу вона повертатиме true, навіть після видалення файлу. А функція unlink очистить даний кеш автоматично.
copy ($f, $g, $context) — копіює файл $f у файл $g. Якщо шлях $g є URL, то операція може завершитися помилкою, якщо обгортка URL не підтримує перезаписування наявних файлів. Якщо цільовий файл вже існує, то його буде перезаписано. Див. приклад.
<?php $f = 'input.txt'; $newf = 'output.txt'; if (!copy($f, $newf)) echo "Не вдалося скопіювати $f"; else echo "Файл $f скопійовано у $newf"; ?>
dirname ($p, $l) — повертає назву батьківської теки із шляху $p на $l рівнів догори. Як усталено $l = 1. Функція dirname опрацьовує виключно рядок $p і не враховує реальну файлову систему або складові шляху типу "..". Якщо параметр $p не містить слешів, буде повернуто точку ('.'), що позначає поточну директорію. В іншому випадку буде повернуто $p без останньої складової.
При ОС Windows dirname використовує поточну встановлену кодову сторінку. Для того, щоб бачити правильну назву теки з мультибайтних символів, необхідно встановити відповідну кодову сторінку. Якщо $p містить символи, неприпустимі для поточної кодової сторінки, поведінка dirname не визначена.
При інших ОС dirname передбачає, що $p закодовано в кодуванні, сумісному з ASCII. В іншому випадку поведінку функції не визначено.
Див. приклад
<?php echo dirname ("/etc/passwd")."<br>"; echo dirname ("/etc/")."<br>"; echo dirname (".")."<br>"; echo dirname ("/usr/local/lib", 2); ?>
з таким виведенням.
/etc / . /usr
disk_free_space ($d) — повертає розмір вільного простору у теці з назвою $d або у файловій системі — у байтах у вигляді числа з рухомою точкою. Якщо замість назви теки буде передано назву файлу, то поведінка даної функції непередбачувана і може різнитися при різних операційних системах і версіях PHP. Див. приклад.
<?php echo disk_free_space("/"); // при ОС Linux echo disk_free_space ("C:");// при ОС Windows ?>
disk_total_space ($d) — повертає загальний розмір (у байтах у вигляді числа з рухомою точкою) файлової системи або розділу диска — див. приклад.
<?php echo disk_total_space("/"); // при ОС Linux echo disk_total_space ("C:");// при ОС Windows ?>
fclose($f) — закриває файл, відкритий раніше за допомогою функції fopen — див. приклад.
<?php $a = fopen('input.txt','r'); fclose ($a); ?>
feof($f) — перевіряє, чи досягнуто кінець файлу Sf. Повертає true, якщо досягнуто кінець файлу або трапилася помилка (в тому числі тайм-аут сокета), інакше повертає false.
fflush($f) — скидає буфер виведення у файл $f — див. приклад.
<?php $f = fopen ('output.txt', 'w'); fwrite ($f,'!!!!!!'); rewind ($f); fwrite ($f, '###'); fflush ($f); sleep(10); // затримка на 10 секунд для перевірки результату fclose($f); ?>з таким вмістом файлу під час дії затримки:
fgetc($f) — повертає символ (1 байт), зчитаний з файлу або false при досягненні кінця файлу. Ця функція може повертати як логічне значення false, так і значення не булевого типу, яке зводиться до false. Тому використовують оператор === для перевірки значення, повернутого цією функцією — див. приклад.
<?php $f = fopen ('input.txt', 'r'); while (false !== ($c = fgetc($f))) echo "$c<br>"; ?>
fgetcsv ($f, $l, $s, $enclosure, $escape) — зчитує рядок з файлу $f, проводить аналіз рядка на наявність записів у форматі CSV і повертає знайдені поля як елементи масиву. Враховує налаштування локалі. Наприклад, якщо LANG встановлено в en_US.UTF-8, то файли в однобайтового кодуванні будуть неправильно опрацьовані цією функцією.
Цілий параметр $l має перевищувати довжину рядка поля (в символах), знайденого в CSV-файлі, включаючи завершальний символ кінця рядка. Інакше рядок буде розбито на частини завдовжки в $l символів, якщо лише місце розриву не буде всередині обмежувачів полів. Відсутність цього параметра призведе до того, що довжина рядка буде не обмежена. Це може позначитися на швидкості виконання.
Необов'язковий параметр $s задає роздільник поля — один символ. Як усталено має значення коми ',' .
Необов'язковий параметр $enclosure задає обмежувач поля — один символ. Як усталено має значення '"'.
Необов'язковий параметр $escape задає символ екранування (щонайменше один символ). Як усталено має значення '\\'. Порожній рядок ("") відключає механізм екранування.
Примітка. Зазвичай символ $enclosure екранують всередині поля шляхом його подвоєння. Символ $escape виступає в якості альтернативи. Тому при усталенх значеннях цих параметрів "" і \" мають однакове значення. Cимвол $escape не має особливого сенсу крім екранування символу $enclosure.
Функція fgetcsv повертає індексований масив з прочитаного полями. При порожньому рядку CSV-файлу буде повернуто масив, що містить єдиний елемент null. Ппомилки в даному випадку не виникне. Функція повертає null, якщо передано хибний параметр $f або false при інших помилках. У тому числі при досягненні кінця файлу.
Примітка. Якщо у вас виникають проблеми з розпізнаванням PHP-решт рядків при читанні або створенні файлів на Macintosh-сумісному комп'ютері, включення опції auto_detect_line_endings може допомогти вирішити проблему.
Див. приклад зчитування й виведення на екран вмісту CSV-файлу.
<?php $row = 1; // лічильник рядків if (($f = fopen("input.txt","r")) !== false) { while (($data = fgetcsv ($f, 1000, ",")) !== false) { $n = count($data); // кількість полів echo "<br>$n полів у рядку $row:"; for ($j=0; $j<$n; $j++) echo " |".$data[$j]; $row++; } fclose ($f); }?>
fgets($f, $l) — повертає рядок, зчитаний з файлу $f. Зчитування закінчується при досягненні ($l - 1) байт, при зустрічі нового рядка або кінця файлу (залежно від того, що настане раніше). Якщо довжину не вказано, читання з потоку триватиме до тих пір, поки не досягне кінця рядка. У разі виникнення помилки повертає (напрклад, якщо даних для зчитування більше немає), то повертає false. Див. приклад порядкового читання файлу.
<?php $f = fopen("input.txt", "r"); if ($f) { while (($s = fgets($f, 7)) !== false) echo "$s<br>"; if (!feof ($f)) echo "Помилка роботи fgets"; fclose ($f); } ?>
При опрацюванні файлу з кодуванням UTF-8 і таким вмістом
ватра лемки
маємо таке виведення
ват ра лем ки
Примітка. Якщо у вас виникають проблеми з розпізнаванням PHP-решт рядків при читанні або створенні файлів на Macintosh-сумісному комп'ютері, включення опції auto_detect_line_endings може допомогти вирішити проблему.
file_exists($f) — повертає true, якщо файл (у тому числі тека) $f існує, інакше повертає false. У разі невдалого завершення роботи буде породжено помилку рівня E_WARNING. Див. приклад.
<?php $f = '/home/user/input.txt'; if (file_exists ($f)) echo "Файл $f існує"; else echo "Файл $f не існує"; ?>
file_get_contents ($f, $use_include_path, $context, $offset, $maxlen) — повертає вміст файлу $f одним рядком. У разі невдачі повертає false. Має такі параметри:
$f — рядок, у якому записано шлях до файлу. При використанні URI, що містить спеціальні символи (наприклад, пробіл), потрібно закодувати URI за допомогою функції urlencode;
$use_include_path — булева змінна, що має значення false як усталено. Інакше (при значенні true) пошук файлу буде здійснено серед тек, перелічених у сталій include_path;
$offset — кількість байтів зсуву, з якого почнеться читання. Від'ємне значення зсуву буде відраховано з кінця потоку;
$maxlen — кількість байтів — максимальний розмір зчитаних даних. Як усталено читання здійснюється поки не буде досягнутий кінець файлу. Цей параметр застосовується і до потоку з фільтрами.
Функція може повертати як логічне значення false, так і значення не типу boolean, яке зводиться до false. Для перевірки значення, що повертається цією функцією, використовують оператор ===.
Породжує помилку рівня E_WARNING у випадках, якщо не вдасться знайти $f, $maxlength менше нуля або пошук за зсувом $offset у потоці завершено невдало.
Див. приклади.
<?php $j = 1; $f = 'http://www.kievoi.ippo.kubg.edu.ua/kievoi/articles.html'; switch ($j) { case 1: echo file_get_contents($f); break; // Код сторінки сайту case 2: echo file_get_contents('input.txt',true); break; case 3: echo file_get_contents('input.txt',FILE_USE_INCLUDE_PATH); break; case 4: echo file_get_contents('input.txt', false, NULL, 4, 8); break; // Виведення 8 байт, починаючи з 5-го case 5: $a = array ('Http' => array( 'Method' => "GET", 'Header' => "Accept-language: en \r \n". "Cookie: foo = bar \r \n")); $b = stream_context_create ($a);// Створення потоку // Використання файлу за допомогою встановлених вище HTTP-заголовків echo file_get_contents($f, false, $b); break; } ?>
file_put_contents ($f, $d, $flags, $context) — записує дані $d (рядок або ресурс потоку) у файл $f. Функція ідентична послідовним успішним викликам функцій fopen, fwrite і fclose. Якщо filename не існує, файл буде створено. Інакше наявний файл буде перезаписано за винятком випадку, коли зазначено прапор FILE_APPEND. У цьому випадку буде дописано у файл.
Якщо $d є ресурсом потоку, буфер цього потоку буде скопійовано у вказаний файл. Це схоже на використання функції stream_copy_to_stream. Також можна передати одновимірний масив $a параметр $d. Це буде еквівалентно виклику
file_put_contents ($f, implode('', $a)).
Значенням параметра $flags може бути довільна комбінація таких прапорів, об'єднаних бінарним оператором "або" (|):
FILE_USE_INCLUDE_PATH — пошук $f у під'єднаних теках, перелічених в include_path;
FILE_APPEND — при наявності файлу $f дані буде дописано в кінець файлу;
LOCK_EX — отримати ексклюзивне блокування файлу на час запису. Інакше кажучи, між викликами fopen і fwrite відбудеться виклик функції flock. Це не одне й те саме, що виклик fopen з прапором "x".
Функція повертає кількість записаних байтів у файл, або false у разі помилки. Функція може повертати як логічне значення false, так і значення не типу boolean, яке зводиться до false. Використовуйте оператор === для перевірки значення, що повертається цією функцією.
Див. приклад.
<?php $f = 'output.txt'; $a = file_get_contents ($f); $a .= "Дописування без використання прапору\n"; file_put_contents($f, $a); $b = "Дописування з використанням прапорів\n"; file_put_contents($f, $b, FILE_APPEND | LOCK_EX); ?>
file ($f, $flags, $context) — повертає масив рядків, зчитаних з фалу $f з урахуванням прапорів flags, об'єднаних бінарним оператором "або" (|):
FILE_USE_INCLUDE_PATH — пошук файлу в include_path;
FILE_IGNORE_NEW_LINES — пропускати ознаку кінця рядка в кінці кожного елемента масиву;
FILE_SKIP_EMPTY_LINES — пропускати порожні рядки.
context — ресурс контексту, створений функцією stream_context_create.
У разі помилки file повертає false. Викликає помилку рівня E_WARNING, якщо файл не існує.
Примітки
При використанні SSL, Microsoft IIS порушує протокол, закриваючи з'єднання без відправки індикатора close_notify. PHP повідомить про це як "SSL: Fatal Protocol Error" у той момент, коли буде досягнуто кінець даних. Щоб обійти це, потрібно встановити error_reporting на рівень, що виключає E_WARNING. PHP вміє визначати, що на стороні сервера знаходиться проблемний IIS при відкритті потоку за допомогою обгортки https:// і не виводить попередження. Якщо ви використовуєте fsockopen для створення сокета ssl://, ви самі відповідаєте за визначення і пригнічення цього попередження.
При проблемах з розпізнаванням PHP-решт рядків при читанні або створенні файлів на Macintosh-сумісному комп'ютері, включення опції auto_detect_line_endings може допомогти вирішити проблему.
Див. приклад.
<?php $lines = file('http://www.kievoi.ippo.kubg.edu.ua/kievoi/articles.html'); // Bиведення рядків html-коду разом з номерами. for ($j=0; $j<count($lines); $j++) echo "<b>Рядок № $j: </b>" .htmlspecialchars($lines[$j])."<br>"; echo "<br><br>"; // Bиведення рядків текстового файлу $lines = file('input.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); for ($j=0; $j<count($lines); $j++) echo "<i>Рядок № $j: </i>".$lines[$j]."<br>"; ?>
fileatime ($f) — повертає час останнього доступу до файлу $f у вигляді часової мітки Unix. Або false у разі виникнення помилки. Див. приклад
<?php $f = 'input.txt'; echo date( "F d Y H:i:s", fileatime($f)); ?>з виведенням такого вигляду:
May 17 2021 10:02:18
filectime ($f) — повертає час зміни індексного дескриптора (inode) файлу $f у вигляді часової мітки Unix. Або false у разі виникнення помилки. Див. приклад
<?php $f = 'input.txt'; echo date( "F d Y H:i:s", filectime($f)); ?>з виведенням такого вигляду:
May 17 2021 10:01:55
У разі невдалого завершення роботи буде породжено помилку рівня E_WARNING.
На більшості платформ Unix файл вважають зміненим, якщо змінені дані його індексного дескриптора, що включає інформацію про права на файл, про його власника, групи та інші метадані, що містяться в індексному дескрипторі. Врахуйте, що обробка часу може відрізнятися в різних файлових системах.
filegroup ($f) — повертає ідентифікатор групи файлу $f у вигляді числа або false у разі помилки. В останньому випадку буде породжено помилку рівня E_WARNING.
Для отримання назви групи у вигляді рядка використовують функцію posix_getgrgid — див. приклад
<?php $f = 'input.txt'; echo filegroup($f)." "; print_r (posix_getgrgid(filegroup($f))); $f = 'output.txt'; echo "<br>".filegroup($f)." "; print_r (posix_getgrgid(filegroup($f))); ?>з таким виведенням:
1001 Array ( [name] => user [passwd] => x [members] => Array ( ) [gid] => 1001 ) 1 Array ( [name] => daemon [passwd] => x [members] => Array ( ) [gid] => 1 )
у випадку, коли файл input.txt створив користувач user, а файл output.txt було створено у процесі виконання коду PHP.
fileinode ($f) — повертає індексний дескриптор файлу $f або false у разі виникнення помилки. Див. приклад.
<?php echo fileinode ('input.txt'); ?>
filemtime($f) — повертає час останньої зміни файлу $f у вигляді часової мітки Unix. Або false у разі виникнення помилки. У разі невдалого завершення роботи генерується помилка рівня E_WARNING. Врахуйте, що опрацювання часу може відрізнятися в різних файлових системах. Див. приклад
<?php $f = 'input.txt'; echo date( "F d Y H:i:s", filemtime($f)); ?>з виведенням такого вигляду:
May 17 2021 10:01:55
fileowner($f) — повертає числовий ідентифікатор власника файлу $f або false у разі виникнення помилки. В останньому випадку буде породжено помилку рівня E_WARNING. Для отримання імені власника у вигляді рядка використовують функцію posix_getpwuid — див. приклад.!!!
<?php echo fileowner('input.txt')."<br>"; print_r (posix_getpwuid(fileowner('input.txt'))); ?>
з виведенням такого вигляду (з точністю до пробілів і переходів до наступного рядка):
1001 Array ( [name] => user [passwd] => x [uid] => 1001 [gid] => 1001 [gecos] => user,,,, [dir] => /home/user [shell] => /bin/bash )
fileperms($f) — повертає інформацію про права доступу на файл $f у числовому вигляді. Повертає false у разі виникнення помилки. В останньому випадку буде породжено помилку рівня E_WARNING.
Молодші біти повернутого значення такі самі, як і біти прав доступу для використання у функції chmod. На більшості платформ, це значення буде також включати дані про тип файлу $f. Які в точності біти встановлено може залежати від платформи.
Див. приклад.
<?php echo fileperms('input.txt')." -> " .substr(sprintf('%o',fileperms( 'input.txt')),-4)."<br>"; echo fileperms('output.txt')." -> " .substr(sprintf('%o',fileperms('output.txt')),-4)."<br>"; echo fileperms('/tmp')." -> " .substr(sprintf('%o',fileperms('/tmp')), -4)."<br>"; echo fileperms('/home/user')." -> " .substr(sprintf('%o',fileperms('/home/user')), -4)."<br>"; ?>
з таким можливим виконання:
33204 -> 0664 33188 -> 0644 17407 -> 1777 16877 -> 0755
Див. приклад з відображення повних прав доступу.
<?php echo "<tt>"; for ($j = 0; $j<2; $j++) { switch ($j) { case 0: $p = fileperms ('output.txt'); break; case 1: $p = fileperms ('/tmp'); break; } switch ($p & 0xF000) { case 0xC000: $i = 's'; break; // сокет case 0xA000: $i = 'l'; break; // символічна посилання case 0x8000: $i = 'r'; break; // звичайний case 0x6000: $i = 'b'; break; // файл блочного пристрою case 0x4000: $i = 'd'; break; // тека case 0x2000: $i = 'c'; break; // файл символьного пристрою case 0x1000: $i = 'p'; break; // FIFO канал default: $i = 'u'; // невідомий } // Власник $i .= (($p & 0x0100)? 'r': '-'); $i .= (($p & 0x0080)? 'w': '-'); $i .= (($p & 0x0040)? (($p & 0x0800)? 's': 'x'): (($p & 0x0800)? 's': '-')); // Група $i .= (($p & 0x0020)? 'r': '-'); $i .= (($p & 0x0010)? 'w': '-'); $i .= (($p & 0x0008)? (($p & 0x0400)? 's': 'x'): (($p & 0x0400)? 's': '-')); // Інші $i .= (($p & 0x0004)? 'r': '-'); $i .= (($p & 0x0002)? 'w': '-'); $i .= (($p & 0x0001)? (($p & 0x0200)? 't': 'x'): (($p & 0x0200)? 't': '-')); echo $i."<br>"; } echo "</tt>"; ?>
з таким результатом виконання:
rrw-r--r-- drwxrwxrwt
filesize ($f) — повертає розмір файлу $f у байтах або false в разі виникнення помилки. В останньому випадку породжує помилку рівня E_WARNING. Див. приклад.
<?php $f = 'input.txt'; echo 'Розмір файлу '.$f.' складає '.filesize ($f).' байтів.'; ?>
filetype ($f) — повертає тип файлу $f. Можливі значення: fifo, char, dir, block, link, file, socket і unknown. Повертає false у разі помилки. Викличе помилку рівня E_NOTICE, якщо системний виклик stat завершиться помилкою або тип файлу невідомий. У разі невдалого завершення роботи буде породжено помилку рівня E_WARNING. Див. приклад.
<?php echo filetype('/etc')."<br>"; // dir echo filetype('/home/user/input.txt'); // file ?>
flock ($f, $o, & $w) — здійснює модель зчитування / запису файлу $f згідно з таким значенням параметра операції $o:
Також можна додати сталу LOCK_NB як бітову маску до довільної з перелічених вище операцій, якщо flock не має блокуватися під час спроби блокування.
Функція повертає true у випадку успішного завершення або false у разі виникнення помилки.
Див. приклад.
<?php $f = fopen ("output.txt", "r+"); if (flock ($f, LOCK_EX)) // ексклюзивне блокування { ftruncate($f, 0); // очищення файлу fwrite($f, "Запис чого-небудь у файл \n"); fflush($f); // очищаємо буфера виведення flock ($f, LOCK_UN); // зняття блокування } else echo "Не вдалося блокування!"; fclose ($f); // зняття блокування // Включаємо параметр LOCK_NB в операції LOCK_EX if (!flock($f, LOCK_EX | LOCK_NB)) { echo 'Не вдалося отримати блокування'; exit (-1); } fclose ($f); ?>
fnmatch ($p, $f, $flags) — перевіряє узгодженість рядка (назви файлу) $f з шаблоном $p з урахуванням $flags — довільної комбінації прапорів, об'єднаних за допомогою бінарного оператора "або" (|):
При узгодженості повертає true, інакше повертає false — див. приклад.
<?php. if (fnmatch("*сі[реньк]ий","сірий")) echo "1 - згідно з шаблоном"; else echo "1 - суперечить шаблону"; echo "<br?>"; if (fnmatch("*жов[теннь]ий","жовтеннький")) echo "2 - згідно з шаблоном"; else echo "2 - суперечить шаблону"; ?>з таким виведенням.
1 - згідно з шаблоном 2 - суперечить шаблону
fopen ($f, $mode, $use_include_path, $context) — повертає покажчик на ресурс $f (файл або URL) або false у разі виникнення помилки. В останньому випадку буде породжено помилку рівня E_WARNING.
Якщо $f передано у формі "scheme:// ...", його вважають URL. У цьому випадку PHP проведе пошук обробника протоколу (обгортку) для цієї схеми серед таких:
Якщо жодну обгортку не закріплено за протоколом, PHP видасть зауваження, щоб допомогти відстежити потенційну проблему у скрипті, і продовжить виконання.
Якщо $f вказує на локальний файл, тоді PHP робить спроба відкрити потік до цього файлу. Файл має бути доступним PHP. Якщо включено open_basedir, то накладаються подальші обмеження.
Якщо PHP встановив, що $f вказує на зареєстрований протокол і цей протокол зареєстрований як мережевий URL, PHP виконує перевірку стану директиви allow_url_fopen. Якщо її вимкнено, PHP видасть попередження і виклик fopen закінчиться невдачею.
Деякі протоколи (обгортки) підтримують контекст і/або опції php.ini. В описі використаного протоколу подано список опцій, які можна встановити. Наприклад, значення php.ini user_agent використовує обгортка http.
На платформі Windows необхідно екранувати всі зворотні слеші у шляху до файлу або використовувати прямі слеші.
Параметр $mode вказує тип доступу:
Windows пропонує прапор 't', який автоматично переведе \n у \r\n під час роботи з файлом. І навпаки — можна використовувати 'b', щоб примусово включити бінарний режим, в якому дані не буде перетворено. Щоб використовувати ці режими, потрібно вказати 'b' або 't' останньою літерою параметра mode. Як усталено встановлено прапор 'b'.
При використанні прапору 't' під час роботи з бінарними файлами можна зіткнутися з проблемами: пошкоджені файли зображень і проблеми з символами \r \n.
$use_include_path — необов'язковий параметр, якому надають значення '1' або true для пошуку файлу у теках, перелічених у include_path.
Див. приклад.
<?php $f = fopen("input.txt", "r"); $f = fopen("/home/user/output.txt","wb"); $f = fopen("http://www.kievoit.ippo.kubg.edu.ua/kievoit/index.html", "r"); ?>
При використанні SSL, Microsoft IIS порушує протокол, закриваючи з'єднання без відправки індикатора close_notify. PHP повідомить про це як "SSL: Fatal Protocol Error" в той момент, коли досягнуто кінця даних. Щоб обійти це, потрібно встановити error_reporting на рівень, що виключає E_WARNING. PHP вміє визначати, що на стороні сервера знаходиться проблемний IIS при відкритті потоку за допомогою обгортки https:// і не виводить попередження.
fpassthru($f) — виводить з відкритого файлу $f непрочитані дані і повертає кількість виведених таким чином байтів — див. приклад
<?php $f = fopen ('input.txt','rb'); echo fgetc($f).fgetc($f)." + "; echo fpassthru($f); ?>
з такою дією при ОС Linux з кодуванням файлу UTF-8 (як усталено).
input.txt | Виведений код | Коментар щодо виведення після знаку + |
---|---|---|
abc df |
ab + c df 5 | 5 байтів для виведення 3 символів ASCII коду і 2 ознак кінця рядка |
абв d9 |
а + бв d9 8 | 8 байтів для виведення 2 символів кирилиці (по 2 байти на кожний), 1 літери латиниці, 1 цифри і 2 ознак кінця рядка: 2·2 + 1 + 1 + 2·1 = 8 |
При використанні fpassthru з бінарним файлом при ОС Windows потрібно переконатися у тому, що файл відкрито у бінарному режимі за допомогою додавання b до режиму відкриття файлу, використаному у fopen. Тому, щоб забезпечити можливість переносу коду на інші платформи, рекомендують використовувати прапор b при роботі з бінарними файлами, навіть якщо поточна операційна система цього не вимагає.
fputcsv ($f, $a, $d, $e, $e_char) — створює рядок у форматі CSV з елементів масиву $a, використовуючи:
$d — символ роздільника полів зі значенням ',' як усталено;
$e — символ обмежувача полів зі значення '"' як усталено;
$e_char — необов'язковий параметр екранування символа зі значенням '\\' як усталено. Порожній рядок відключає пропріетарний механізм екранування.
Якщо символ $e міститься у полі (елементі масиву $a), його буде екрановано шляхом подвоєння, якщо йому не передує $e_char.
Повертає довжину записаного рядка або false у разі виникнення помилки — див. приклад.
<?php $b = array (array('aaa', 'bbb', 'ccc', 'dddd'), array('123', '456', '789'), array(' "aaa"', ' "bbb"') ); $f = fopen('output.csv', 'w'); foreach ($b as $a) fputcsv ($f, $a); fclose ($f); ?>
з таким виведенням у файл output.csv.
aaa,bbb,ccc,dddd 123,456,789 " ""aaa"""," ""bbb"""
При проблемах з розпізнаванням PHP-решт рядків при читанні або створенні файлів на Macintosh-сумісному комп'ютері, включення опції auto_detect_line_endings може допомогти вирішити проблему.
fputs — псевдоним fwrite.
fread ($f, $l) — зчитує до $l байт з файлу $f. Повертає прочитаний рядок або false у разі виникнення помилки. Читання зупиняється щойно справдиться одна з таких умов:
— див. приклад.
<?php // При ОС, що розрізняє бінарні і текстові файли // (наприклад, при ОС Windows), файл потрібно // відкрити з використанням прапора 'b' // у параметрі mode функції fopen $f = fopen ("input.txt", "r"); echo fread ($f, 9); fclose ($f); ?>
При читанні чогось відмінного від локальних файлів, наприклад потоків, що повертаються при читанні віддалених файлів, читання зупиниться після того, як пакет стане доступним. Це означає необхідність збирання даних до купи шматочками, як показано нижче.
<?php $f = fopen ("http://www.kievoi.ippo.kubg.edu.ua/kievoi/articles.html", "rb"); $c = stream_get_contents ($f); fclose ($f); echo $c; ?> <?php $f = fopen ("http://www.kievoi.ippo.kubg.edu.ua/kievoi/articles.html", "rb"); if (FALSE === $f) exit ("Неможливо відкрити потік за url адресою"); $с = ''; while (!feof ($f)) $c .= fread($f, 8192); fclose ($f); echo $c; ?>
fscanf ($f, $format, & ... $vars) — повертає зчитаний рядок з файлу $f, протлумачений відповідно до формату $format. Будь-символ пробілу в рядку формату еквівалентний будь-якому символу пробілу у вхідному потоці. Це означає, що навіть табуляція \t в рядку формату може бути порівняна одному символу пробілу у вхідному потоці даних.
$format — pядок формату, що складається з нуля або більшої кількості вказівок: звичайні символи (за винятком %), які просто виводяться без зміни і специфікатор перетворення, кожен з яких вимагає передачі свого параметра. Специфікатори перетворення мають наступний формат:
%[argnum$][flags][width][.precision]specifier
argnum — ціле число, за яким слідує знак долара $, щоб вказати, який числовий аргумент обробляти при перетворенні;
flags:
- — вирівнювання за лівим краєм у межах заданої ширини поля. Як усталено вирівнювання буде здійснено за правим краєм;
+ — друкування плюсу + у невід'ємних числах. Як усталено знак буде надруковано лише перед від'ємними числами;
(space) — доповнює результат пробілами. Це поведінка як усталено;
0 — доповнює числа нулями ліворучіва. Зі специфікатором s також може доповнювати нулями праворуч;
'(сhar) — доповнює результат символом (char);
width — ціле число — мінімальна кількість символів, яку буде надруковано;
precision — крапка . з наступним цілим числом, що працює по різному для різних специфікаторів:
для специфікаторів e, E, f і F: задає кількість цифр після десяткової коми (за замовчуванням 6);
для специфікаторів g і G: задає максимальне значення друкованих значущих цифр;
для специфікатор s: задає обмеження максимальної кількості символів в рядку, які будуть виведені.
Якщо вказано точку без подальшого значення точності, то вважають, що точність 0. Спроба використовувати специфікатор позиції зі значенням більшим ніж PHP_INT_MAX, призведе до попередження.
specifier:
% — символ відсотка, аргументи не потрібні;
b — аргумент тлумачать як ціле число і друкують у бінарному поданні;
c — аргумент тлумачать як ціле число і друкують як символ з таблиці ASCII з відповідним кодом. Специфікатор c ігнорує значення ширини (width);
d — аргумент тлумачать як ціле число і друкують як ціле число зі знаком;
e — аргумент тлумачать як число в науковій нотації (наприклад, 1.2e + 2). Специфікатор точності задає кількість цифр після десяткової коми;
E — аналого специфікатора e, але використовує великі символи (наприклад 1.2E + 2);
f — аргумент тлумачать як число з рухомою точкою з урахуванням локалі;
F — аргумент тлумачать як число з рухомою точкою без урахування локалі;
g — загальний формат. Нехай значення P таке:
Позначимо через X показник степеня при поданні числа зі стилем E. Якщо P > X ≥ -4, перетворення буде у стилі f і точність буде P – (X + 1). Інакше перетворення буде в стилі "e" і точність буде P – 1;
G — аналог g, але використовує E і f;
h — аналог g, але використовує F;
H — аналог g, але використовує E і F;
o — аргумент тлумачать як ціле число і друкують у вісімковому поданні;
s — аргумент тлумачать і друкують як рядок;
u — аргумент тлумачать як ціле число і друкують як беззнаковое ціле число;
x — аргумент тлумачать як ціле число і друкують в 16-ковому поданні з літерами у нижньому регістрі;
X — аналог x з літерами у верхньому регістрі.
Спроба використати специфікатор із зазначенням ширини для рядка у багатобайтовому кодуванні може призвести до несподіваних результатів.
Змінні буде приведено до відповідного для специфікатор типу:
vars — необов'язкові привласнювані значення.
Якщо у функцію передано лише два аргументи, опрацьовані значення буде повернуто у вигляді масиву. В іншому випадку, якщо було передано необов'язкові аргументи, функція поверне кількість наданих значень. Необов'язкові аргументи потрібно передати за посиланням.
Якщо у format очікують більше підрядків, ніж є у string, буде повернуто null. У разі виникнення інших помилок буде повернуто false.
Див. приклад
<?php $f = fopen ("input.txt", "r"); while ($i = fscanf ($f, "%s\t%s\t%s\n")) { list ($name, $profession, $town) = $i; echo "$town: $name - $profession
"; } fclose ($f); ?>
для опрацювання такого файлу input.txt
Христина агроном Берегове Микола капітан Одеса Семен інженер Харків Оксана лікар Сумиз таким виглядом сторінки
Берегове: Христина - агроном Одеса: Микола - капітан Харків: Семен - інженер Суми: Оксана - лікар
fseek ($f, $o, $w) — встановлює зміщення у файлі $f. У разі успіху повертає 0, інакше повертає -1. Нове зміщення від початку файлу у байтах отримують з урахуванням значення параметра $w, який може набувати таких значень:
Дозволено вказувати зміщення за межами файлу, якщо дані потім будуть записані з цієї позиції. Читання будь-якої незаписаної області між кінцем файлу і зазначеною позицією поверне нульові байти. Деякі потоки можуть не підтримувати цю поведінку, особливо якщо у них є основне сховище фіксованого розміру.
Див. приклад.
<?php $f = fopen ('input.txt', 'r'); echo fgets($f)."<br>"; fseek($f, 4); echo fgets($f, 9); ?>
Якщо файл відкрито в режимі дописування (a або a+), будь-які дані буде записано в кінець файлу, незалежно від позиції файлу, а результат виклику fseek буде не визначений. Не всі потоки підтримують зміщення покажчика. Для потоків, що не підтримують цю операцію, зміщення вперед здійснюється читанням і відкиданням даних, інші форми зміщення закінчаться помилкою.
fstat ($f) — повертає масив зі статистичною інформацією про відкритий файл $f.Формат масиву докладно описаний на сторінці опису функції stat. Повертає false в разі виникнення помилки. Див. приклад
<?php $f = fopen("input.txt", "r"); print_r (fstat($f)); fclose ($f); ?>
з виведенням коду такого вигляду.
<?php Array ( [0] => 2055 [1] => 1221059 [2] => 33204 [3] => 1 [4] => 1001 [5] => 1001 [6] => 0 [7] => 160 [8] => 1621347523 [9] => 1621347429 [10] => 1621347429 [11] => 4096 [12] => 8 [dev] => 2055 [ino] => 1221059 [mode] => 33204 [nlink] => 1 [uid] => 1001 [gid] => 1001 [rdev] => 0 [size] => 160 [atime] => 1621347523 [mtime] => 1621347429 [ctime] => 1621347429 [blksize] => 4096 [blocks] => 8 ) ?>
ftell ($f) — повертає поточну позицію покажчика читання / запису файлу у вигляді цілого числа. При виникненні помилки повертає false. Див. приклад.
<?php $f = fopen("input.txt", "r"); $d = fgets ($f,10); echo ftell ($f); // 9 fclose ($f); ?>
ftruncate ($f, $s) — зменшує файл до довжини $s байтів. Якщо $s більше поточного розміру файлу, то файл буде доповнений нульовими (порожніми) байтами. Повертає true у випадку успішного завершення або false у разі виникнення помилки. Файловий покажчик $f не змінюється — див. приклад,
<?php $s = 'output.txt'; $f = fopen ($s,'w'); fwrite($f,'1234567890'); ftruncate ($f, 6); fclose($f); echo file_get_contents ($s); ?>що виводить перші 6 цифр: 123456.
fwrite ($f, $s, $l) — запис у файл $f рядка $s. Якщо передано необов'язковий параметр $l, запис зупиниться після того, як $l байтів будe записано або буде досягнуто кінець рядка $s — залежно від того, що відбудеться раніше. Якщо вказано аргумент $l, то директивою magic_quotes_runtime буде знехтувано а рядок $s не буде очищено від слешів.
У системах, що розрізняють двійкові і текстові файли (наприклад, Windows), файл має бути відкрито з прапором 'b' в кінці аргумента $mode функції fopen.
Якщо потік $f було відкрито функцією fopen у режимі дописування, то виклики fwrite будуть атомарними (за винятком випадку перевищення розміру $s розміру блоку файлової системи на деяких платформах, і поки файл зберігають у локальній файловій системі). Тобто немає необхідності блокувати ресурс за допомогою flock перед викликом fwrite, і всі дані буде записане без переривань.
При повторному записі дані буде додано в кінець файлу — див. приклад.!!!
<?php $s = 'output.txt'; if (is_writable($s)) { if (!$f = fopen ($s, 'a')) { echo "Файл не відкрито"; exit; } if (fwrite($f,"Дописати це у файл.\n") === FALSE) { echo "Запис у файл не зроблено"; exit; } echo "Запис зроблено"; fclose ($f); } else echo "Файл недоступний для запису"; ?>
glob ($p, $flags) — знаходить файли, що відповідають шаблону, у записі якого використано такі спеціальні символи:
* — відповідає довільній кількості символів;GLOB_BRACE — розкриває {a, b, c} для збігу з 'a', 'b' або 'c'. Не спрацьовує при деких не GNU-системах, наприклад, Solaris;
GLOB_ERR — зупинка при помилках читання. Наприклад, теки без права читання. Як усталено помилками нехтують;
GLOB_MARK — додає слеш (зворотний слеш в Windows) до кожної повернутої теки;
GLOB_NOCHECK — повертає шаблон пошуку, якщо з його допомогою не було знайдено жодного файлу;
GLOB_NOESCAPE — зворотні слеші не екранують метасимволи;
GLOB_NOSORT — повертає файли у тому вигляді, як їх розташовано у теці (без упорядкування. сортування). Якщо цей прапор не вказано, назви буде упорядковано за алфавітом;
GLOB_ONLYDIR — повертає лише назви тек, що відповідають шаблону.
Повертає масив назв файлів / директорій або false у разі помилки. При деяких системах неможливо відрізнити відсутність збігу і помилку. Див. приклад.
<?php foreach (glob ("*.txt") as $f) echo $f."<br>"; ?>
is_dir ($s) — повертає true, якщо рядок $s є шляхом до теки. Якщо $s є відносним шляхом, його буде перевірено щодо поточної теки. Якщо $s є символічним або жорстким посиланням, то посилання буде розкрито й перевірено. При включеному open_basedir можуть застосовуватися подальші обмеження. У разі невдалого завершення роботи генерується помилка рівня E_WARNING. Див. приклад
<?php var_dump (is_dir('input.txt')); var_dump (is_dir ('/home/user')); var_dump (is_dir( '..')); ?>
з таким виведенням коду.
bool(false) bool(true) bool(true)
is_executable ($s) — повертає true, якщо файл з назвою $s існує і є виконуваним, інакше false. У разі невдалого завершення роботи буде породжено помилку рівня E_WARNING. Див. приклад.
<?php $s = '/home/user/name.sh'; if (is_executable ($s)) echo $s.' є виконуваним '; else echo $s. ' не є виконуваним '; ?>
is_file ($s) — повертає true, якщо рядок $s є шляхом до звичайного файлу, не теки. Інакше повертає false. Див. приклад.
<?php var_dump (is_file ('input.txt'))"; var_dump (is_file ('/usr/bin/'))"; ?>
з таким виведенням коду:
bool (true) bool (false)
is_link ($s) — повертає true, якщо файл $s існує і є символічною посиланням, інакше повертає false. У разі невдалого завершення роботи буде породжено помилку рівня E_WARNING. Див. приклад.
<?php $s = 'uploads'; if (is_link ($s)) echo (readlink ($s)); else symlink ('uploads.php', $s); ?>
is_readable ($s) — повертає true, якщо файл або тека $s існує і доступний (-а) для читання, інакше повертає false. У разі невдалого завершення роботи буде породжено помилку рівня E_WARNING.
PHP звертається до файлів від імені користувача, від якого запущено веб-сервер. Результати цієї функції кешуються — див. опис clearstatcache. Функція може повертати true для тек. Щоб відрізнити файл від теки можна скористатися функцією is_dir.
Див. приклад.
<?php if (is_readable ('input.txt')) echo 'Файл доступний для читання'; else echo 'Файл не доступний для читання'; ?>
is_writable ($s) — повертає true, якщо файл (тека) з назвою $s існує і доступний (-а) для запису. PHP звертається до файлу від імені того користувача, від якого запущено веб-сервер. Див. приклад.
<?php if (is_writable ('input.txt')) echo 'Файл доступний для запису'; else echo 'Файл недоступний для запису'; ?>
lchgrp ($f, $g) — змінює на $g (число або рядок) групу, якій належить символічна посилання $f. Для ОС Windows цю функцію не реалізовано. Лише суперкористувач може змінювати групу символічного посилання довільним чином. Інші користувачі можуть змінювати групу символічного посилання на будь-яку, в якій користувач є членом. Див. приклад.!!!
<?php $t = 'index.php'; $l = 'index.html'; symlink($t, $l); lchgrp ($l, 8); ?>
lchown ($f, $user) — змінює власника символічного посилання $f на $user, заданого назвою або номером. Лише суперкористувач може змінювати власника символічного посилання. Повертає true у випадку успішного завершення або false у разі виникнення помилки. Для Windows-платформ цю функцію не реалізовано. Див. приклад.
<?php $t = 'index.php'; $l = 'index.html'; symlink($t, $l); lchown ($l, 8); ?>
link ($t, $l) — cтворює жорстке посилання з назвою $l на ресурс $t. Повертає true у випадку успішного завершення або false у разі виникнення помилки. Функція завершується з помилкою і видає E_WARNING, якщо link вже існує або якщо target не існує. При ОС Windows для даної функції необхідно, щоб PHP був запущений в привілейованому режимі або з відключеним UAC. Див. приклад.
<?php $t = 'input.txt'; // Наявний файл $l = 'link'; // Файл, який прив'язують до першого link ($t, $l); ?>
linkinfo ($l) — в разі успішного виконання повертає невід'ємне ціле число — дані про посилання $l — поле st_dev структури stat з Unix C, яку повертає системний виклик lstat. Повертає -1 у разі, якщо посилання не було знайдено, або false у разі виникнення помилки open.base_dir. Див. приклад.
<?php echo linkinfo ('link'); ?>
lstat ($f) — повертає масив даних про файл або символічне посилання $f так само, як функція stat, за винятком того, що якщо $f є символічним посиланням, повертають статус символічного посилання, а не того файлу, на який воно вказує.
Формат результатів
Числовий | Асоціативний | Опис |
---|---|---|
0 | dev | номер пристрою3 |
1 | ino | номер inode4 |
2 | mode | режим захисту inode |
3 | nlink | кількість посилань |
4 | uid | userid власника1 |
5 | gid | groupid власника1 |
6 | rdev | тип пристрою, якщо пристрій inode |
7 | size | розмір у байтах |
8 | atime | час останнього доступу (мітка Unix) |
9 | mtime | час останньої модифікації (мітка Unix) |
10 | ctime | час останньої зміни inode (мітка Unix) |
11 | blksize | розмір блоку введення-виведення файлової системи2 |
12 | blocks | кількість використовуваних 512-байтних блоків2 |
Примітки до опису
У Windows це завжди буде 0.
Доступний тільки на системах, що підтримують тип st_blksize — інші системи (наприклад, Windows) повернуть -1.
У Windows, починаючи з PHP 7.4.0, це серійний номер тому, що містить файл, — 64-розрядний ціле число без знака. Це може призвести до переповнення у 32-розрядних системах. Раніше це було числове подання літери диска (наприклад, 2 для C: для stat і 0 для lstat).
У Windows, починаючи з PHP 7.4.0, ідентифікатор, пов'язаний з файлом, — 64-розрядне ціле число без знака. Це може переповниться у 32-розрядних системах. Раніше значення було 0.
Значення mode містить дані, які використовують декілька функції. Перші три цифри справа 8-кового запису повертаються функцією chmod. Наступною цифрою PHP нехтує. Наступні дві цифри вказують тип файлу — див. наступний перелік mode у 8-ковому вигляді — значення:
0140000 — сокет (програмний інтерфейс для забезпечення обміну даними між процесами);
0120000 — символічне (м'яке) посилання (Symbolic link) — файл, що містить шлях до файлу, який буде відкрито при звертанні до цього посилання (файлу);
0100000 — звичайний файл;
0060000 — блоковий пристрій, який зберігає інформацію у вигляді блоків фіксованого розміру, кожен з яких має адресу;
0040000 — тека;
0020000 — символьне пристрій, що передає або приймає потік символів, без жодної блокової структури;
0010000 — fifo спеціальний файл типу черги (first-in first-out). Схожий на канал (pipe), за тим винятком, що він доступний як частина файлової системи. Він може бути відкритий декількома процесами для читання або запису. Коли процеси обмінюються даними через FIFO, ядро передає дані безпосередньо, без проміжного збереження їх у файлі на диску. Таким чином, спеціальний файл FIFO не посилається на будь-які дані в файлової системі, а є просто посиланням, щоб процеси могли мати доступ до каналу, користуючись назвою файлу.
Наприклад, для звичайного файлу може бути 0100644, а для теки — 0040755.
При невдалому виконанні буде породжено помилку рівня E_WARNING. Повертає false в разі виникнення помилки.
Див. приклад
<?php symlink ('load.php','load'); print_r(lstat ('load')); ?>
з виведенням коду такого вигляду.
Array ( [0] => 2055 [1] => 1220944 [2] => 33204 [3] => 1 [4] => 1001 [5] => 1001 [6] => 0 [7] => 9 [8] => 1621497385 [9] => 1621497385 [10] => 1621497385 [11] => 4096 [12] => 8 [dev] => 2055 [ino] => 1220944 [mode] => 33204 [nlink] => 1 [uid] => 1001 [gid] => 1001 [rdev] => 0 [size] => 9 [atime] => 1621497385 [mtime] => 1621497385 [ctime] => 1621497385 [blksize] => 4096 [blocks] => 8 )
mkdir ($s, $mode, $r, $context) — створює теку з назвою $s з режимом доступу $mode.
Як усталено $mode набуває значення 0777, що означає найширші права. Про режими доступу див. опис функції chmod. Аргумент mode необхідно подати у вигляді 8-кового числа (першою цифрою має бути 0). На аргумент $mode також впливає поточне значення $umask, яке можна змінити за допомогою umask. ОС Windows нехтує значенням $mode.
Булева змінна $r задає дозвіл на створення вкладених тек, заданих в $s (значення як усталено false). Підтримку контексту $context було додано в PHP 5.0.0.
Повертає true у випадку успішного завершення або false у разі виникнення помилки. Видає помилку рівня E_WARNING, якщо тека вже існує або якщо відповідні права доступу блокують створення теки.
Див. приклад.
<?php $s = 'newdir'; if (mkdir($s, 0700)) echo "Теку $s створено. "; else echo "Теку $s не створено. "; $s = '/home/newdir'; echo "<br?>"; if (mkdir($s, 0777, true)) echo "Теку $s створено. "; else echo "Теку $s не створено. "; ?>
move_uploaded_file ($from, $to) — перевіряє, чи файл $from завантажено на сервер (передано згідно з протоколом HTTP POST):
якщо файл $f завантажено, його буде переміщено у місце, вказане в аргументі $to. У разі успішного виконання функція повертає true;
якщо результуючий файл вже існує, він буде перезаписаний;
якщо файл $from завантажено, але його не можливо перемістити з яких-небудь причин, жодних дій не буде вчинено, а буде повернуто false. Крім того, буде відображено попередження;
якщо $from не є завантаженим файлом, жодної дії не буде вчмнено, а повернуто false.
Функція move_uploaded_file враховує open_basedir, накладаючи обмеження лише на параметр $to. Функція гарантує безпеку, працюючи лише з тими файлами, які було завантажено через PHP.
Див. приклад файлу upload.php,
<?php if ($_FILES['user_file']['error'] == UPLOAD_ERR_OK ) { $name = basename($_FILES['user_file']['name'] ); move_uploaded_file($_FILES['user_file']['tmp_name'], $_SERVER['DOCUMENT_ROOT']."/work/".$name ); } ?>
у якому послідовність символів "/work/" можна замінити довільною послідовністю символів, узгодженою з наявною структурою файлової системи. Цей код можна викликати зі сторінки HTML з таким кодом тіла:
<form enctype = "multipart/form-data" action = "upload.php" method = "POST"> <input type="file" name="user_file"> <input type="submit" value="Завантажити"> </form>
При використанні XAMPP і ОС Linux Mint/Ubuntu використані в upload.php змінні набувають таких значень:
$_SERVER['DOCUMENT_ROOT'] = '/opt/lampp/htdocs'; $_FILES['user_file']['tmp_name'] = '/opt/lampp/temp/php*';
Тут зірочкою * позначено випадкову послідовність символів, яку породжує PHP. У цьому випадку файл буде скопійовано у теку /opt/lampp/htdocs/work з тією самою назвою, що й у першоджерелі, з якого зроблено завантаження на сайт. Для успішного переміщення ця тека має бути доступною для запису.
parse_ini_file ($f, $sections, $mode) — завантажує ini-файл $f і повертає його налаштування у вигляді асоціативного масиву. У разі помилки повертає false.
Параметр $sections має значення false як усталено. Встановивши значення true, отримаємо багатовимірний масив, який містить і назви налаштувань, і назви розділів.
Параметр $mode може набувати таких значень: INI_SCANNER_NORMAL (як усталено) або INI_SCANNER_RAW. В останньому випадку значення опцій не буде опрацьовано.
З версії PHP 5.6.1 також можна задати INI_SCANNER_TYPED. В цьому режимі типи boolean, null і integer будуть, по можливості, зберігатися. Рядкові значення "true", "on" і "yes" будуть перетворені у true, а "false", "off", "no" і "none" у false, "null" буде перетворено в null. Крім цього, всі рядки із записами чисел будуть, по можливості, перетворені до цілих чисел.
Див. приклад,
define ('sename', 'Наливайко'); define ( 'name', 'Северин'); print_r (parse_ini_file ("s.ini")); // без розділів print_r (parse_ini_file ("s.ini", true));// з розділами
що для такого вмісту s.ini
[Розділ_1] Name = name Sename = sename [Розділ_2] region = 'Тернопільська' district = 'Гусятинський' [Розділ_3] towns[]= 'Гримайлів' towns[]= 'Хоростків' towns[]= 'Копичинці'
здійснює таке виведення коду з точністю до кількох порожніх рядків.
Array ( [Name] => Северин [Sename] => Наливайко [region] => Тернопільська [district] => Гусятинський [towns] => Array ( [0] => Гримайлів [1] => Хоростків [2] => Копичинці ) ) Array ( [Розділ_1] => Array ( [Name] => Северин [Sename] => Наливайко ) [Розділ_2] => Array ( [region] => Тернопільська [district] => Гусятинський ) [Розділ_3] => Array ( [towns] => Array ( [0] => Гримайлів [1] => Хоростків [2] => Копичинці ) ) )
Деякі символи мають особливе значення в ini-файлах.
2 | 3 ; | побітове "АБО" 6 & 5 ; & побітове "І" 3 ^ 6 ; ^ побітове XOR ~ 1 ; ~ побітового заперечення (8|7)&(6|5); {|} групування \ ; \ екранування значення
Примітка.
Функція не має ніякого відношення до файлу php.ini. До моменту виконання скрипта його вже опрацьовано. Цю функцію використовують для завантаження налаштувань власного застосунку.
Якщо значення в ini-файлі містить інші символи, крім літер і цифр, його потрібно розташувати у подвійних лапках (").
Зарезервовані слова не можна використовувати як ключі в ini-файлах. Такими словами є: null, yes, no, true, false, on, off, none. Значення null, off, no і false перетворюються в "", а значення on, yes і true в "1", але лише якщо не використано режим INI_SCANNER_TYPED. Символи? {} | & ~! () ^ " не мають міститися у ключах і мати якийсь особливий сенс у значеннях.
Записами без знака рівності нехтують. Наприклад, "foo" ігнорують, тоді як "bar =" буде опрацьовано з наданням порожнього значення.
ini-файли зазвичай опрацьовують веб-серверами як простий текст і за запитом передаються браузерам. Це означає, що з метою безпеки потрібно або зберігати свої ini-файли поза кореневою текою, або переналаштувати веб-сервер, щоб їх не опрацьовувати. Інакше буде створено загрозу безпеці.
parse_ini_string ($s, $sections, $mode) — повертає налаштування з рядка $s (вмісту рядка ini-файлу) у вигляді асоціативного масиву аналогічно тому, як це робить parse_ini_file. У разі помилки, повертає false.
Параметр $sections має значення false як усталено. Встановивши значення true, отримаємо багатовимірний масив, який містить і назви налаштувань, і назви розділів.
Параметр $mode може набувати таких значень:
З версії PHP 5.6.1 також можна задати INI_SCANNER_TYPED. В цьому режимі типи boolean, null і integer будуть, по можливості, зберігатися. Рядкові значення "true", "on" і "yes" будуть перетворені у true, а "false", "off", "no" і "none" у false, "null" буде перетворено в null. Крім цього, всі рядки із записами чисел будуть, по можливості, перетворені до цілих чисел.
Зарезервовані слова не можна використовувати як ключі в ini-файлах. Такими словами є: null, yes, no, true, false, on, off, none. Значення null, off, no і false перетворюються в "", а значення on, yes і true в "1", але лише якщо не використано режим INI_SCANNER_TYPED. Символи? {} | & ~! () ^ " не мають міститися у ключах і мати якийсь особливий сенс у значеннях.
pathinfo ($p, $flags) — повертає дані про шлях до файлу $p у вигляді асоціативного масиву або рядка залежно від значення параметра $flags (детальніше — див. опис вбудованих змінних).
Pathinfo враховує налаштування локалі, тому для коректного опрацювання шляху з багатобайтових символів потрібно встановити відповідну локаль за допомогою функції setlocale.
flags як усталено має значення PATHINFO_ALL — повернути всі доступні елементи у вигляді асоціативного масиву. Інші значення:
задають, який з елементів шляху буде повернуто рядком:
якщо шлях містить більше одного розширення, то PATHINFO_EXTENSION повертає лише останній і PATHINFO_FILENAME видаляє лише останнє розширення;
якщо шлях не містить розширення, то не буде повернуто елемент extension;
якщо базова назва (basename) шляху починається з точки, то всі наступні символи тлумачать як розширення файлу (extension), а назва файлу (filename) буде порожньою;
Див. приклад застосування без вказання прапорів
<?php print_r(pathinfo('/home/user/input.new.txt')); ?>
з таким виведенням коду.
Array ( [dirname] => /home/user [basename] => input.new.txt [extension] => txt [filename] => input.new )
Див. приклад застосування при відcутності розширення.
<?php $p = pathinfo ('/home/user/a.'); print_r ($p); var_dump ($p['etension']); $p = pathinfo('/home/user/a'); print_r ($p); var_dump ($p['etension']); ?>
з таким виведенням коду.
Array ( [dirname] => /home/user [basename] => a. [extension] => [filename] => a ) NULL Array ( [dirname] => /home/user [basename] => a [filename] => a ) NULL
Див. приклад застосування для файлу, назва якого починається з крапки.
<?php $p = pathinfo('/home/user/.a'); print_r (pathinfo('/home/user/.a')); var_dump ($p['filename']); ?>
з таким виведенням коду.
Array ( [dirname] => /home/user [basename] => .a [extension] => a [filename] => ) string(0) ""
pclose ($f) — закриває файловий покажчик на потік, відкритий за допомогою popen. Повертає статус виходу завершуваного процесу. У разі помилки повертається -1. Якщо PHP зібраний з опцією --enable-sigchild, значення функції не визначено. Для Unix pclose реалізовано за допомогою системного виклику waitpid(3). Для отримання реального коду виходу натомість використовують функцію pcntl_wexitstatus. Див. приклад.
<?php $f = popen ('/bin/ls','r'); pclose ($f); ?>
popen($c, $mode) — відкриває потік до процесу, який виконують за допомогою вказівки, заданої рядком $c з режимом $mode: або 'r' для читання, або 'w' для запису. Повертає файловий покажчик, ідентичний тому, що повертається функцією fopen, за винятком того, що він односторонній (може бути використаний лише для читання або запису). Якщо потрібна двостороння передача (в обидві сторони одночасно), використовють proc_open.
Повернутий покажчик можна використати з fgets, fgetss і fwrite. Якщо в якості режиму вказано 'r', файловий покажчик аналогічний потоку виведення (STDOUT) команди, якщо ж вказано 'w', то файловий покажчик аналогічний потоку введення (STDIN) команди. У разі виникнення помилки повертає false.
У Windows для popen як усталено використовують текстовий режим, тобто будь-які символи \n, записані в канал або прочитані з нього, будуть перетворені в \r\n. Якщо це небажано, можна примусово використовувати двійковий режим, встановивши для $mode значення 'rb' і 'wb' відповідно.
Див. приклад.
<?php $f = popen ('/home/user/input.txt','r'); pclose ($f); ?>
Якщо вказівку для виконання неможливо знайти, буде повернуто коректний ресурс. Це може виглядати дивно, але має сенс, бо це дає можливість отримати доступ до будь-якого повідомлення про помилку, яке поверне оболонка — див. приклад
<?php $f = popen ('/not/existing/file', 'r'); echo "$f"."\n".gettype($f)."\n >>>"; $r = fread($f, 2096); echo $r; pclose ($f); echo "<<<"; ?>з таким виведенням коду.
Resource id #2 resource >>><<<
readfile ($f, $use_include_path, $context) — читає файл $f і записує зчитане у буфер виведення. Можна використовувати URL в якості назви файлу, якщо була включена опція fopen wrappers.
Повертає кількість прочитаних з файлу байт в разі успішного виконання, або false у разі виникнення помилки. У разі невдалого завершення роботи буде породжено помилку рівня E_WARNING.
$use_include_path має значення false як усталено. Якщо потрібно здійснити пошук файлу в include_path, потрібно надати параметру $use_include_path значення true.
Див. приклади для виведення текстового файлу
<?php readfile ('input.txt'); ?>
і завантаження графічного файлу.
<?php $f = 'example.jpeg'; if (file_exists($f)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename='.basename($f)); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: '.filesize($f)); readfile($f); exit; } ?>
Результатом виконання останнього коду буде поява відповідного вікна діалогу для завантаження файлу.
Функція readfile сама по собі не призводить до проблем з пам'яттю, навіть для великих файлів. При виникненні помилки перевищення пам'яті потрібно переконатися, що буферизація виводу відключена за допомогою ob_get_level.
readlink ($p) — повертає назву файлу, на який вказує символьне посилання $p, або false у разі помилки. Функція завершується помилкою, якщо path не є символічною посиланням, крім Windows, де буде повернений нормалізований шлях. Див. приклад
<?php $t = 'input.txt'; $l = 'in'; symlink ($t, $l); echo readlink ($l); ?>з виведенням назви файлу
input.txt
realpath_cache_get — повертає асоціативний масив записів з кеша realpath: ключі — записи realpath, значення — масиви даних, що містять булеве значення, чи є об'єкт текою, повний шлях до нього, час життя кеша. Див. приклад
<?php var_dump(realpath_cache_get()); ?>
з виведенням коду такого вигляду:
array(2) { ["/test"] => array(4) { ["key"] => int(123456789) ["is_dir"] => bool(true) ["realpath"] => string(5) "/test" ["expires"] => int(1260318939) } ["/test/test.php"] => array(4) { ["key"] => int(987654321) ["is_dir"] => bool(false) ["realpath"] => string(12) "/root/test.php" ["expires"] => int(1260318939) } }
realpath_cache_size () — повертає об'єм пам'яті, використаний кешем realpath. Див. приклад
<?php var_dump(realpath_cache_size()); ?>
з виведенням коду такого вигляду:
int(412)
realpath ($p) — розкриває всі символічні посилання, переходи типу /./, /../ і зайві символи / у шляху $p і повертає канонізований абсолютний шлях до файлу або повертає false при невдачі. Наприклад, якщо файл не існує. Скрипт повинен мати права запуску у всіх теках у перевіренох ієрархії, інакше realpath поверне false. У Windows переходи і символічні посилання на каталоги розширюються лише на один рівень. Див. приклад
<?php chdir ('/home/user/'); // Зміна поточної теки на /home/user/ echo realpath ('../../../etc/passwd')."<br>"; echo realpath ('/tmp/')."<br>"; ?>
з таким виведенням.
/etc/passwd /tmp
Див. приклад застосування при ОС Windows зі зміною стилю Unix на стиль Windows
<?php echo realpath('/windows/system32')."<br>"; echo realpath('C:\Program Files\\')."<br>"; ?>
з виведенням такого вигляду.
C:\WINDOWS\System32 C:\Program Files
rename ($old, $new, $context) — змінює назву файлу (у тому числі теки) з $old на $new, переміщаючи файл (файли) між теками при необхідності. При наявності $new буде проведено перезапис. При зміні назви на назву наявної теки буде виведено попередження. Обгортка, використана в $old, має збігатися з обгорткою, використаною в $new. Повертає true у випадку успішного завершення або false у разі виникнення помилки.
Див. приклад
<?php rename("input.txt", "input/01.txt"); ?>
rewind ($f) — встановлює вказівник файлового покажчика $f на початок файлового потоку. Повертає true у випадку успішного завершення або false у разі виникнення помилки. Якщо файл відкрито в режимі дописування ('a' або 'a+'), дані буде дописано в кінець файлу, незалежно від розташування вказівника. Див. приклад
<?php $f = fopen('output.txt', 'r+'); fwrite ($f, 'Жахливо довге речення.'); rewind ($f); fwrite ($f,'Занадто'); rewind ($f); echo fread($f, filesize('output.txt')); fclose ($f); ?>
з таким виведенням.
Занадто довге речення
rmdir($d, $context) — видаляє теку з назвою $d. Тека має бути порожньою, а користувач, що використовує PHP, повинен мати необхідні для цього права. При невдалому виконанні буде порождено помилку рівня E_WARNING. $context — контекст, підтримку якого додана в PHP 5.0.0. Повертає true у випадку успішного завершення або false у разі виникнення помилки. Див. приклад.
<?php if (rmdir('temp')) echo 'Теку temp видалено.'; else echo 'Теку temp не видалено.'; ?>
set_file_buffer — псевдонім stream_set_write_buffer.
stat($f) — повертає масив даних про файл або символічне посилання $f так само, як функція lstat, за винятком того, що якщо $f є символічним посиланням, повертають статус файлу, а не символічного посилання, на який воно вказує.
Формат результатів
Числовий | Асоціативний | Опис |
---|---|---|
0 | dev | номер пристрою3 |
1 | ino | номер inode4 |
2 | mode | режим захисту inode |
3 | nlink | кількість посилань |
4 | uid | userid власника1 |
5 | gid | groupid власника1 |
6 | rdev | тип пристрою, якщо пристрій inode |
7 | size | розмір у байтах |
8 | atime | час останнього доступу (мітка Unix) |
9 | mtime | час останньої модифікації (мітка Unix) |
10 | ctime | час останньої зміни inode (мітка Unix) |
11 | blksize | розмір блоку введення-виведення файлової системи2 |
12 | blocks | кількість використовуваних 512-байтних блоків2 |
Примітки до опису
У Windows це завжди буде 0.
Доступний тільки на системах, що підтримують тип st_blksize — інші системи (наприклад, Windows) повернуть -1.
У Windows, починаючи з PHP 7.4.0, це серійний номер тому, що містить файл, — 64-розрядний ціле число без знака. Це може призвести до переповнення у 32-розрядних системах. Раніше це було числове подання літери диска (наприклад, 2 для C: для stat і 0 для lstat).
У Windows, починаючи з PHP 7.4.0, ідентифікатор, пов'язаний з файлом, — 64-розрядне ціле число без знака. Це може переповниться у 32-розрядних системах. Раніше значення було 0.
Значення mode містить дані, які використовують декілька функції. Перші три цифри справа 8-кового запису повертаються функцією chmod. Наступною цифрою PHP нехтує. Наступні дві цифри вказують тип файлу — див. наступний перелік mode у 8-ковому вигляді — значення:
0140000 — сокет (програмний інтерфейс для забезпечення обміну даними між процесами);
0120000 — символічне (м'яке) посилання (Symbolic link) — файл, що містить шлях до файлу, який буде відкрито при звертанні до цього посилання (файлу);
0100000 — звичайний файл;
0060000 — блоковий пристрій, який зберігає інформацію у вигляді блоків фіксованого розміру, кожен з яких має адресу;
0040000 — тека;
0020000 — символьне пристрій, що передає або приймає потік символів, без жодної блокової структури;
0010000 — fifo спеціальний файл типу черги (first-in first-out). Схожий на канал (pipe), за тим винятком, що він доступний як частина файлової системи. Він може бути відкритий декількома процесами для читання або запису. Коли процеси обмінюються даними через FIFO, ядро передає дані безпосередньо, без проміжного збереження їх у файлі на диску. Таким чином, спеціальний файл FIFO не посилається на будь-які дані в файлової системі, а є просто посиланням, щоб процеси могли мати доступ до каналу, користуючись назвою файлу.
Наприклад, для звичайного файлу може бути 0100644, а для теки — 0040755.
При невдалому виконанні буде породжено помилку рівня E_WARNING. Повертає false в разі виникнення помилки.
Див. приклад
<?php print_r(stat ('input.txt')); ?>
з виведенням коду такого вигляду
<?php Array ( [0] => 2055 [1] => 1220933 [2] => 33206 [3] => 1 [4] => 1001 [5] => 1001 [6] => 0 [7] => 41 [8] => 1621956170 [9] => 1621956170 [10] => 1621957439 [11] => 4096 [12] => 8 [dev] => 2055 [ino] => 1220933 [mode] => 33206 [nlink] => 1 [uid] => 1001 [gid] => 1001 [rdev] => 0 [size] => 41 [atime] => 1621956170 [mtime] => 1621956170 [ctime] => 1621957439 [blksize] => 4096 [blocks] => 8 )
stream_set_write_buffer ($f, $b) — встановлює буферизацию запису у потік $f. $b — число байт для буферизації. Якщо $b дорівнює 0, то буферизації не буде, тобто всі операції запису з використанням функції fwrite будуть завершені перед тим, як іншим процесам буде дозволено записувати у потік виведення. Повертає 0 в разі успіху або інше значення, якщо запит не можна виконати. Див. приклад.
<?php $f = fopen ('output.txt',"w"); if (stream_set_write_buffer ($f, 0) != 0) echo "Не вдалося ліквідувати буферизацію!"; fwrite ($f, "Рядок тексту для запису у файл"); fclose ($f); ?>
symlink ($t, $l) — створює символічне посилання з назвою $l на наявний файл з назвою $t. Повертає true у випадку успішного завершення або false у разі виникнення помилки. Функція завершується з помилкою і видає E_WARNING, якщо $l вже існує. У Windows функція не працює і видає E_WARNING, якщо $t не існує. Див. приклад
<?php $t = 'input.txt'; $l = 'in'; symlink ($t, $l); echo readlink ($l); ?>з виведенням назви файлу
input.txt
tempnam ($d, $p) — cтворює у теці $d файл з унікальною назвою і префіксом $p з правами 0600. Якщо така тека не існує або недоступна для запису, створює файл у тимчасовій теції системи. Якщо PHP не може створити файл у теці $d, він повертається до теки як усталено операційної системи. При NTFS це також відбувається в разі, якщо тека $d містить більше 65534 файлів. Функція використовує лише перші 63 символи префікса, при ОС Windows — лише перші 3 символи. Повертає назву створеного тимчасового файлу (разом зі шляхом) або false у разі невдачі. Див. приклад.
<?php $tmpfname = tempnam("/tmp","new"); echo $tmpfname; $f = fopen($tmpfname, "w"); fwrite($f, "Запис у тимчасовий файл"); fclose($f); unlink ($tmpfname); ?>
tmpfile — створює тимчасовий файл з унікальною назвою, відкриває його в режимі читання і запису (w+) і повертає файловий покажчик, аналогічний тому, який повертає функція fopen для нових файлів, або false у разі виникнення помилки. Цей файл буде автоматично видалено після закриття. Наприклад, після виклику функції fclose або якщо не залишилося жодного посилання на покажчик файлу, що повертає tmpfile. Або при завершенні роботи скрипта. Якщо скрипт несподівано завершиться, тимчасовий файл не може бути видаленим. Див. приклад
<?php $f = tmpfile(); fwrite($f, "Запис у тимчасовий файл"); fseek ($f, 0); echo fread($f, 1024); fclose($f); // видалення файлу ?>з таким виведенням
Запис у тимчасовий файл
touch ($f, $t, $at) — встановлює для файлу $f час доступу $t (ціле число ду секундах) і час модифікації $at (у секундах). Якщо файл не існує, його буде створено. Якщо параметр $at не вказано, йому буде надано значення параметра $t. Якщо жоден з цих параметрів не вказано, буде використано поточний системний час. Опрацювання часу може відрізнятися у різних файлових системах. Повертає true у випадку успішного завершення або false у разі виникнення помилки. Див. приклад.
<?php if (touch ('input.txt')) echo 'Час модифікації файлу input.txt змінено на поточний'; else echo 'Не вдалося змінити час модифікації файлу input.txt'; echo "<br>"; $t = time() - 3600; // Час за годину до поточного if (!touch ('input.txt',$t)) echo 'Час модифікації файлу input.txt змінено'; else echo 'Не вдалося змінити час модифікації файлу input.txt'; ?>
umask ($mask) — встановлює нове ціле значення $mask PHP umask. Якщо PHP використовують в якості серверного модуля, umask буде відновлено після закінчення кожного запиту. Виклик umask без аргумента поверне поточне значення umask, інакше буде повернуто попереднє значення umask. Див. приклад.
<?php $old = umask(0); echo $old; chmod ( "input.txt", 0755); umask ($old); if ($old != umask()) die ('При відновленні umask трапилася помилка'); ?>
Краще уникати використання цієї функції у багатопоточних веб-серверах. Краще змінити права файлу за допомогою функції chmod після його створення. Використання umask може привести до несподіваного поведінки скриптів, що працюють одночасно, і самого веб-сервера, бо вони все будуть використовувати одну і ту саму umask.
unlink ($f, $context) — видаляє файл $f. Повертає true у випадку успішного завершення або false у разі виникнення помилки. При невдалому виконанні буде роджено помилку рівня E_WARNING. Див. приклад.
<?php $f = fopen ('input.html', 'a'); fwrite ($f, '<h1>Вітаю, шановне товариство!</h1>'); fclose ($f); unlink ('input.html'); ?>
Опис функцій запозичено зі сторінки php.net/manual/ru/ref.filesystem.php.