Php получить информацию о файле. Получение информации о файле. Чтение файлов в PHP

Windows 7
Задача
Необходимо прочитать метаданные файла, например права доступа и имя владельца.

Решение
Вызовите функцию stat(), которая возвращает массив информации о файле:

$info = stat("harpo.php");

Обсуждение
Функция stat() возвращает массив информации о файле и с числовыми, и со строковыми индексами.

Элемент mode возвращенного массива содержит права доступа в виде целого числа по основанию 10. Это сбивает с толку, поскольку права доступа обычно выражаются либо символически (т. е. вывод команды ls -rw-r--r--), либо в виде восьмеричного числа (т. е. 0644). Конвертировать права доступа в более понятный формат позволяет функция base_convert(), преобразующая права доступа в восьмеричное число:

$file_info = stat("/tmp/session.txt");
$permissions = base_convert($file_info["mode"],10,8);

В результате получим восьмеричное число из шести цифр. Например, если команда ls показывает о /tmp/session.txt следующее:

То значение элемента $file_info["mode"] равно 33204, а значение переменной $permissions равно 100664.

Последние три цифры (664) определяют права доступа к файлу: пользователя (чтение и запись), группы (чтение и запись) и всех остальных (чтение). Третья цифра, 0, означает, что для файла не установлен ни бит смены идентификатора пользователя (setuid), ни бит смены идентификатора группы (setgid). Крайнее слева число 10 означает, что это обычный файл (а не сокет, символическая ссылка или другой специальный файл).

Поскольку функция stat() возвращает массив как с числовым, так и со строковым индексами, то в результате выполнения цикла foreach по этому массиву мы получаем две копии каждого значения. И поэтому надо обратиться к циклу for от элемента 0 до элемента 12 возвращенного массива.

Функция fstat() аналогична рассмотренной stat() и принимает дескриптор файла (возвращенный функцией fopen() или popen()) в качестве аргумента. Функцию fstat() можно применять только для локальных файлов и нельзя – к URL, передаваемым функции fopen().
PHP-функция stat() осуществляет дорогостоящий базовый системный вызов stat(2).

Для минимизации накладных расходов PHP кэширует результаты вызова stat(2). Поэтому если вызвать функцию stat() для файла, изменить его права и снова вызвать функцию stat() для этого же файла, то будут получены те же самые результаты. Чтобы заставить PHP перегрузить метаданные файла, вызовите функцию clearstatcache(), которая сбросит информацию буфера PHP. Этот же кэш нужен PHP и для других функций, возвращающих метаданные:

File_exists(), fileatime(), filectime(), filegroup(), fileinode(), filemtime(), fileowner(),
fileperms(), filesize(), filetype(), fstat(), is_dir(), is_executable(), is_file(), is_link(), is_readable(), is_writable() и lstat().

(PHP 3, PHP 4, PHP 5)

stat - Получает информацию о файле

Описание

array stat (string filename)

Собирает статистическую информацию о файле filename. Если filename является символической ссылкой, информация собирается о самом файле, а не ссылке. Функция lstat() индентична функции stat() за исключением того, что в данном случае она вернёт информацию о самой символической ссылке.

В случае ошибки, stat() вернёт FALSE . Также она выдаст предупреждение.

Возвращает массив статистической информации о файле. Массив включает следующие элементы. Индексация начинается с нуля. Также доступ к любому аттрибуту можно получить по ассоциативному ключу, который указан напротив каждого параметра; эта возможность появилась начиная с версии PHP 4.0.6:

Таблица 1. Формат результата работы функций stat() и fstat()

* - доступен только на системах, поддерживающих тип st_blksize, другие системы (например Windows) вернут -1.

Подсказка: Начиная с PHP 5.0.0, эта функция также может быть использована с некоторыми упаковщиками url. Список упаковщиков, поддерживаемых семейством функций stat() , смотрите в

Любое программное обеспечение, которое вы хотите запустить на вашем веб сервере имеет определенные требования, которым он должен соответствовать. К примеру, для WordPress требуется PHP версии 5.2.4 и выше. В зависимости от сервера вы можете изменять некоторые настройки PHP, другие наоборот изменять запрещено, однако, о них всех можно получить информацию в файле phpinfo. В этом руководстве вы узнаете, как создать файл phpinfo и узнать значения и статус PHP модулей. Это также может быть полезно для получения информации о вашем хостинг аккаунте, такой как max_execution_time, memory_limit, post_max_size и другой.

Перед тем, как вы начнете это руководство, вам понадобится следующее:

  • Доступ к контрольной панели вашего хостинга или FTP аккаунту

Вариант 1 - Проверка информации о PHP через панель управления хостинга

В Hostinger, информация о PHP вашего аккаунта может быть найдена в разделе Дополнительно → Информация о PHP . Это является очень удобной функцией, так как вам не надо будет создавать дополнительных файлов на вашем хостинге.

После этого, вы переместитесь на страницу со всей необходимой информацией о вашей версии PHP, модулях и значениях. Для поиска конкретного модуля или функции воспользуйтесь поиском, нажав сочетание клавиш CTRL+F .

Поздравляем! Вы узнали, как получить доступ к информации о вашем php через панель управления Hostinger.

Вариант 2 - Проверка информации о PHP с помощью создания файла phpinfo.php

Не волнуйтесь, если ваша хостинговая платформа не поддерживает функцию показанную в Варианте 1 . Того же результата можно достичь создав специальный файл внутри вашего хостинг аккаунта. Файл также покажет всю информацию о вашем PHP и будет доступен через браузер.

Шаг 2.1 - Создание файла phpinfo

Существует несколько путей для создания файла phpinfo. В этом руководстве мы будем использовать для этого . Однако тот же результат может быть достигнут созданием файла на вашем локальном компьютере и дальнейшей загрузке файла на сервер через .

Войдите в панель управления вашего хостинга и откройте Файловый менеджер . Нажмите кнопку Новый файл для создания нового файла.

В первом поле укажите путь где будет создан новый файл. Далее, в поле Новое имя файла введите phpinfo.php . В большинстве случаев вы можете оставить путь без изменений /public_html . В этом случае файл будет создан в корневом каталоге вашего сайта.

Шаг 2.2 - Редактирование файла

На этом этапе у вас уже имеется пустой файл phpinfo.php в каталоге public_html . Скопируйте следующий код в файл и нажмите иконку Сохранить в левом углу экрана.

Вот и все, вы успешно создали PHP файл, который отобразит все параметры вашего PHP. Как уже упоминалось ранее, тот же результат может быть достигнут с помощью :

  1. Используйте любой текстовый редактор и создайте файл phpinfo.php на вашем компьютере.
  2. Добавьте следующий код в файл:
  1. Загрузите файл используя FTP в ваш каталог public_html .

Шаг 2.3 - Проверка информации о PHP через браузер

Если все было сделано правильно, то теперь вы можете получить доступ к созданному файлу, добавив в конец вашего доменного имени /p hpinfo.php . К примеру, http://вашдомен.ru/phpinfo.php

Вы должны увидеть похожий результат при открытии этой страницы через браузер:

На этой странице вы сможете увидеть все настройки вашего PHP.

Заключение

Закончив данное руководство вы научились, как создать файл phpinfo и проверить информацию о ваших настройках PHP. Данная информация является полезной, если вы хотите узнать настройки вашего хостинга или запустить программное обеспечение, которое требует наличия определенных PHP модулей.

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

Синтаксис:

Array stat(string $filename)

Этот массив всегда содержит следующие элементы с указанными ключами:

0 - устройство;
1 - Номер узла inode;
2 - атрибуты защиты файла;
3 - число синонимов ("жестких" ссылок) файла;
4 - идентификатор uid владельца;
5 - идентификатор gid группы;
6 - тип устройства;
7 - размер файла в байтах;
8 - время последнего доступа в секундах, прошедших с 1 января 1970 года;
9 - время последней модификации содержимого файла;
10 - время последнего изменения атрибутов файла;
11 - размер блока;
12 - число занятых блоков;

Этот массив помещает информацию, которая доступна в системах Unix. Под Windows многие поля могут быть пусты.

Если $filename задает не имя файла, а имя символической ссылки, то всетаки будет возвращена информация о том файле, на который ссылается эта ссылка (а не о ссылке).

fileinode()

Получить номер inode файла (PHP 3, PHP 4, PHP 5)

Описание:

Int fileinode (string filename)

Функция возвращает номер inode файла или FALSE в случае возникновения ошибки.

Замечание

fileowner()

Получить идентификатор владельца файла (PHP 3, PHP 4, PHP 5)

Описание:

Int fileowner (string filename)

Функция возвращает числовой идентификатор владельца указанного файла или FALSE в случае возникновения ошибки. Чтобы получить имя владельца в виде строки, используйте функцию posix_getpwuid().

Замечание : Результаты этой функции кэшируются. Более подробную информацию смотрите в разделе clearstatcache().

Начиная с PHP 5.0.0, эта функция также может быть использована с некоторыми упаковщиками url.

fileperms()

Получить информацию о правах на файл (PHP 3, PHP 4, PHP 5)

Описание:

Int fileperms (string filename)

Функция возвращает информацию о правах на указанный файл или FALSE в случае возникновения ошибки.

Замечание : Результаты этой функции кэшируются. Более подробную информацию смотрите в разделе clearstatcache().

Начиная с PHP 5.0.0, эта функция также может быть использована с некоторыми упаковщиками url. Список упаковщиков, поддерживаемых семейством функций stat(), смотрите в Прил. M.

Вывод прав в восмеричном представлении

echo substr(sprintf("%o", fileperms("/tmp")), -4);
echo substr(sprintf("%o", fileperms("/etc/passwd")), -4);
?>

Это выведет:

1777
0644

Вывод полной информации о правах

$perms = fileperms("/etc/passwd");

if (($perms & 0xC000) == 0xC000) {
// Сокет
$info = "s";
} elseif (($perms & 0xA000) == 0xA000) {
// Символическая ссылка
$info = "l";
} elseif (($perms & 0x8000) == 0x8000) {
// Обычный
$info = "-";
} elseif (($perms & 0x6000) == 0x6000) {
// Специальный блок
$info = "b";
} elseif (($perms & 0x4000) == 0x4000) {
// Директория
$info = "d";
} elseif (($perms & 0x2000) == 0x2000) {
// Специальный символ
$info = "c";
} elseif (($perms & 0x1000) == 0x1000) {
// Поток FIFO
$info = "p";
} else {
// Неизвестный
$info = "u";
}

// Владелец
$info .= (($perms & 0x0100) ? "r" : "-");
$info .= (($perms & 0x0080) ? "w" : "-");
$info .= (($perms & 0x0040) ?
(($perms & 0x0800) ? "s" : "x") :
(($perms & 0x0800) ? "S" : "-"));

// Группа
$info .= (($perms & 0x0020) ? "r" : "-");
$info .= (($perms & 0x0010) ? "w" : "-");
$info .= (($perms & 0x0008) ?
(($perms & 0x0400) ? "s" : "x") :
(($perms & 0x0400) ? "S" : "-"));

// Мир
$info .= (($perms & 0x0004) ? "r" : "-");
$info .= (($perms & 0x0002) ? "w" : "-");
$info .= (($perms & 0x0001) ?
(($perms & 0x0200) ? "t" : "x") :
(($perms & 0x0200) ? "T" : "-"));

echo $info;
?>

Результат:

R--r--r--

fnmatch()

Совпадает ли имя файла с шаблоном (PHP 4 >= 4.3.0, PHP 5)

Описание:

Bool fnmatch (string pattern, string string [, int flags])

fnmatch() проверяет, совпадает ли переданный параметр string с указанным шаблоном подстановок оболочки (shell wildcard) pattern.

Эта функция полезна при рабоде с именами файлов, хотя может быть использована и на обычной строке. Среднестатистический пользователь знаком с подстановками оболочки, как минимум в их простейшей форме из подстановок "?" и "*", так что использование fnmatch() вместо ereg() или preg_match() для поиска в пользовательской части сайта может быть намного удобнее для пользователей, не знакомых с регулярными выражениями.

Проверяет, соответствует ли цвет шаблону подстановок оболочки.

if (fnmatch("*gry", $color)) {
echo "some form of gray ...";
}
?>

На данный момент эта функция недоступна в Windows и других POSIX-несовместимых системах.

Получает информацию о файле используя открытый файловый указатель (PHP 4, PHP 5)

Описание:

Array fstat (resource handle)

Собирает статистическую информацию о открытом файле по файловому указателю handle. Эта функция похожа на stat(), за исключением того, что она работает с открытым файловым указателем, а не именем файла.

Возвращает массив со статистической информацией на файл; формат массива подробно описан на странице описания функции stat().

Пример использования функции fstat()

// открываем файл
$fp = fopen("/etc/passwd", "r");

// собираем статистику
$fstat = fstat($fp);

// закрываем файл
fclose($fp);

// отображаем только ассоциативную часть
print_r(array_slice($fstat, 13));

Результатом выполнения данного примера будет что-то подобное:

Array
=> 771
=> 488704
=> 33188
=> 1
=> 0
=> 0
=> 0
=> 1114
=> 1061067181
=> 1056136526
=> 1056136526
=> 4096
=> 8
)

Замечание : Эта функция не применима для работы с удаленными файлами, поскольку файл должен быть доступен через файловую систему сервера.

is_writable()

Определяет, доступен ли файл для записи (PHP 4, PHP 5)

Описание:

Bool is_writable (string filename)

Возвращает TRUE, если файл filename существует и доступен для записи. Аргумент filename может быть именем директории, что позволяет вам проверять директории на доступность для записи.

Не забывайте, что PHP может обращаться к файлу от имени того пользователя, от которого запущен веб-сервер (обычно "nobody"). Ограничения безопасного режима не принимаются во внимание.

Замечание : Результаты этой функции кэшируются. Более подробную информацию смотрите в разделе clearstatcache().

Начиная с PHP 5.0.0, эта функция также может быть использована с некоторыми упаковщиками url

Получает информацию о файле или символической ссылке (PHP 3 >= 3.0.4, PHP 4, PHP 5)

Описание:

Array lstat (string filename)

Собирает статистику на файл или символическую ссылку с именем filename. Эта функция идентична функции stat(), за исключением того, что если filename является символической ссылкой, возвращается статус символической ссылки, а не того файла, на который она указывает.

Обратитесь к странице руководства функции stat() для получения информации о структуре массива, который возвращает lstat().

Замечание : Результаты этой функции кэшируются. Более подробную информацию смотрите в разделе clearstatcache().

Начиная с PHP 5.0.0, эта функция также может быть использована с некоторыми упаковщиками url.

fileatime

Возвращает время последнего доступа к файлу.

Синтаксис:

Int fileatime(string filename)

Если файл не обнаружен, возвращает false.

Атрибут времени последнего доступа к файлу изменяется каждый раз, когда данные файла читаются. Так как это сильно снижает производительность при интенсивной работе с файлами и каталогами, часто изменение этого атрибута в операционных системах блокируют, и тогда функция бесполезна.

filemtime

Возвращает время последнего изменения файла или false в случае отсутствия файла.

Синтаксис:

Int filemtime(string $filename)

filectime

Возвращает время создания файла.

Синтаксис:

Int filectime(string $filename)

filesize

Возвращает размер файла в байтах или false, если файла не существует.

Синтаксис:

Int filesize(string $filename)

Устанавливает время модификации.

Синтаксис:

Int touch(string $filename [, int $timestamp])

Устанавливает время модификации указанного файла $filename равным $timestamp (в секундах, прошедших с 1 января 1970 года).

Если второй параметр не указан, то подразумевается текущее время. В случае ошибки возвращает false.

Если файл с указанным именем не существует, он создается пустым.

Изменяет режим доступа к файлу или каталогу(PHP3, PHP4, PHP5)

Описание:

Bool chmod (string filename, int mode)

Осуществляет попытку изменения режима доступа файла или каталога, переданного в параметре filename на режим, переданный в параметре mode.

Обратите внимание, что значение параметра mode не переводится автоматически в восьмеричную систему счисления, поэтому строки (такие, как, например, "g+w") не будут работать должным образом. Чтобы удостовериться в том, что режим был установлен верно, предваряйте значение, передаваемое в параметре mode, нулем (0):

chmod("/somedir/somefile", 755); // десятичное, неверный способ
chmod("/somedir/somefile", "u+rwx,go+rx"); // строка, неверный способ
chmod("/somedir/somefile", 0755); // восьмеричное, верный способ
?>

Значение параметра mode состоит из трех восьмеричных чисел, определяющих уровень доступа для владельца файла, для группы, в которую входит владелец, и для других пользователей, соответственно. Число, определяющее уровень пользователя, может быть вычислено путем суммирования значений, определяющих права:

1 - доступ на выполнение,
2 - доступ на запись,
4 - доступ на чтение.

Более подробно о системе прав в системах Unix вы можете узнать с помощью команд "man 1 chmod" and "man 2 chmod".

//Доступ на запись и чтение для владельца, нет доступа для других
chmod("/somedir/somefile", 0600);
// Доступ на запись и чтение для владельца, доступ на чтение для других
chmod("/somedir/somefile", 0644);
// Полный доступ для владельца, доступ на чтение и выполнение для других
chmod("/somedir/somefile", 0755);
// Полный доступ для владельца, доступ на чтение и выполнение для группы владельца
chmod("/somedir/somefile", 0750);
?>

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Замечание: Текущим пользователем является пользователь, от имени которого выполняется PHP. Возможно, что этот пользователь будет отличаться от пользователя, под именем которого вы получаете доступ к командной оболочке или учетной записи FTP.

Замечание: Эта функция не применима для работы с удаленными файлами, поскольку файл должен быть доступен через файловую систему сервера.

Замечание: Когда безопасный режим включён, PHP проверяет имеет ли файл или директория, с которой вы работаете, такой же UID, как и выполняемый скрипт. Кроме того, вы не можете устанавливать SUID, SGID и "липкие" биты.