Домой Безопасность Работа с файлами в PHP. Чтение файла, запись в файл. PHP учебник. Удаление файлов, изменение chmod, работа с каталогами. C. Stat - Получает информацию о файле Работаем с файлами на сервере

Работа с файлами в PHP. Чтение файла, запись в файл. PHP учебник. Удаление файлов, изменение chmod, работа с каталогами. C. Stat - Получает информацию о файле Работаем с файлами на сервере

PHP

file_exists("test.txt")//Существует ли файл? filesize("test.txt");//Узнаем размер файла //Возвращается временная метка: fileatime("test.txt");//Дата последнего обращения к файлу //date("d M Y", $atime); filemtime("test.txt");//Дата изменения файла //date("d M Y", $mtime); filectime("test.txt");//Дата создания файла(Windows) //date("d M Y", $ctime);

Файлы: режимы работы

PHP

resource fopen (string filename, string mode) // resource - возвращает указатель на файл в случае успешной работы, или FALSE в случае ошибки
Режим работы Описание
r открыть файл только для чтения;
r+ открыть файл для чтения и записи;
w открыть файл только для записи. Если он существует, то текущее содержимое файла уничтожается. Текущая позиция устанавливается в начало;
w+ открыть файл для чтения и для записи. Если он существует, то текущее содержимое файла уничтожается. Текущая позиция устанавливается в начало;
а открыть файл для записи. Текущая позиция устанавливается в конец файла;
а+ открыть файл для чтения и записи. Текущая позиция устанавливается в конец файла;
b обрабатывать бинарный файл. Этот флаг необходим при работе с бинарными файлами в ОС Windows.

Открытие и закрытие файлов в PHP

PHP

$fi = fopen("test.html", "w+") or die("Ошибка"); //Примеры $fi = fopen("http://www.you/test.html","r"); $fi = fopen("http://ftp.you/test.html", "r"); //Закрываем fclose($fi)

Чтение файлов в PHP

PHP

//Читаем файл fread(int fi, int length) $str = fread($fi, 5); // Читаем первые 5 символов echo $str; // так как курсор передвинулся $str = fread($fi, 12); // Читаем следующие 12 символов echo $str; fgets(int fi[, int length]) // Прочитать строку из файла fgetss(int fi, int length [, string allowable]) // Прочитать строку из файла и отбросить HTML-теги // string allowable - теги, которые необходимо оставить fgetc(int fi) //Считывает символ из файла

Изначально Запись будет происходить в начало файла, путем перезаписывания существующих данных, если они есть. Поэтому, если вам нужно записать что-то в конец файла, нужно установить соответствующий режим чтения , например, a+ .

Манипуляции с курсором в файлах PHP

PHP

int fseek(int fi, int offset [, int whence]) //Установка курсора // int fi - указатель на файл //offset - количество символов, на которые нужно передвинуться. //whence: //SEEK_SET - движение начинается с начала файла; //SEEK_CUR - движение идет от текущей позиции; //SEEK_END - движение идет от конца файла. fseek($fi, -10, SEEK_END); //Читаем последние 10 знаков $s = fread($fi, 10); $pos = ftell($fi); //Узнаем текущую позицию rewind($f)//сброс курсора bool feof($f) //конец файла

Прямая работа с файлами (данными) в PHP

PHP

array file(string filename) // Получаем содержимое файла в виде массива //Еще один вариант прямой работы с данными file_get_contents(string filename) //Чтение (получаем весь файл одной строкой) //Запись в файл (изначально перезаписывается) file_put_contents(string filename, mixed data[,int flag]); //FILE_APPEND // Запись в конец файла: file_put_contents("test.txt", "данные", FILE_APPEND); //Если записать массив, $array = array("I", "live"); file_put_contents("test.txt",$array); //то получим "Ilive"

Управление файлами в php

PHP

copy(string source, string destination); // Копирование файла rename(str oldname, str newname); // Переименование файла unlink(string filename); // Удаление файла

Загрузка файлов на сервер PHP

//Настрoйки PHP.ini file_uploads (on|off) // разрешаем.запрещаем загрузку файлов upload_tmp_dir // временная папка для загружаемых файлов. по умолчания временная папка upload_max_filesize (default = 2 Mb) // макс. размер загружаемого файла post_max_size // общий размер посылаемый формы (должен быть больше upload_max_filesize) //Простая загрузка

HTML

Работаем с файлами на сервере

PHP

//Принимаем данные $tmp = $_FILES["userfile"]["tmp_name"]; $name = $_FILES["userfile"]["name"]; //Перемещаем файл move_uploaded_file($tmp, name); move_uploaded_file($tmp, "upload/".name); // перенаправляем файл в папку upload // относительно текущего файла //Что в массиве $_FILES $_FILES["userfile"]["name"] // имя файла, например, test.html $_FILES["userfile"]["tmp_name"] // временное имя файла (путь) $_FILES["userfile"]["size"] // размер файла $_FILES["userfile"]["type"] // тип файла $_FILES["userfile"]["error"] // 0 - ошибок нет, число - есть 16.5K

На самом деле, чем открыть php файл, не является большой проблемой. Бывает труднее открыть бутылку пива, когда находишься посреди леса. Но так думают лишь заядлые программисты. А для новичков поведаем обо всех возможностях php для работы с файлами:

Файлы php

Файлы с расширением php содержат в себе код написанный, на одноименном языке программирования. В отличие от других языков, php является серверным языком программирования. То есть он выполняется на стороне сервера. Поэтому для отладки его кода на клиентской машине должен быть установлен локальный сервер.

Для работы с файлами php используются специальные приложения – программные редакторы. Наиболее распространенными из них являются:

  • Dreamweaver.
  • PHPEdit.
  • Eclipse PHP Development.
При создании сайтов на основе php может потребоваться многократное использование программного кода. В таких ситуациях удобно подключать уже готовые решения, находящиеся в другом файле. Для этого используется конструкция include . Ее синтаксис:

include имя_файла

Пример подключения:

Подключаемый файл:


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

Конструкция include подключает источник лишь во время выполнения программы. Она поддерживает множественное чтение файла php . При возникновении ошибки будет выведено лишь предупреждающее сообщение, а исполнение кода продолжится со следующей строчки.

Открытие и закрытие файлов

В php все операции с файлами осуществляются в несколько этапов:

  • Открытие файла;
  • Редактирование содержимого;
  • Закрытие файла.

Для открытия файла используется функция fopen() . Ее синтаксис:

int fopen(string filename, string mode [, int use_include_path])

Принимаемые аргументы:

  • string filename – имя файла или абсолютный путь к нему. Если путь к файлу не будет указан, то будет произведен его поиск в текущем каталоге. При отсутствии искомого файла система выведет сообщение об ошибке. Пример:

  • string mode – указывает режим открытия файла. Принимаемые аргументом значения:
  • r – файл открыт только для чтения, файловый указатель устанавливается в начале;
  • r+ – файл открыт для чтения и записи;
  • w – создается новый файл только для записи. Если файл с таким именем уже существует, в нем происходит автоматическое удаление всех данных;
  • w+ — создается новый файл для записи и чтения. При существовании такого файла происходит полная перезапись его данных на новые;
  • a – файл открыт для записи. Указатель устанавливается в конце. То есть запись в файл php начнется не с начала, а с конца;
  • a+ – открытие файла в режиме чтения и записи. Запись начнется с конца;
  • b – режим работы с файлом, содержащим в себе двоичные данные (в двоичной системе исчисления). Этот режим доступен только в операционной системе Windows.

Для закрытия доступа к файлу служит функция fclose () . Синтаксис:

int fclose (int file) , где int file – дескриптор сайта, который нужно закрыть.

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

Пример:

Чтение и запись файлов

Для простого отображения всего содержимого файла идеально подходит функция readfile () . Ее синтаксис:

readfile (string filename) , где string filename – строковое имя фала (не дескриптор ).


Тот же самый файл можно прочитать с помощью функции fpassthru () . Она считывает данные от конечной позиции указателя и до конца файла. Ее синтаксис:

int fpassthru (int file)

Для работы с функцией требуется открытие и закрытие файла. Пример:

Результат аналогичен предыдущему.

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

  • string fgets (int file, int length) – функция считывает строку длиною length . Пример:

  • string fread (int file, int length) – по действию идентична предыдущей.

Для записи текстовых данных в файл существует две идентичные функции:

  • int fputs (int file, string string [, int length ])
  • int fwrite (int file, string string [, int length ])

Функции записывают в файл int file строку string string указанной длины int length (необязательный аргумент ). Пример:

Создание и удаление файлов

Чтобы создать файл php , можно использовать функцию fopen() в режиме доступа «w » или «w+ ». Или функцию touch () . Она устанавливает время изменения файла. При отсутствии элемента с искомым именем он будет создан. Ее синтаксис.

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

file_exists() и is_file().

Функция f ilе_ехists () проверяет, существует ли заданный файл. Если файл существует, функция возвращает TRUE, в противном случае возвращается FALSE. Синтаксис функции file_exists():

bool file_exists(string файл)

Пример проверки существования файла:

if (! file_exists ($filename)) :

print "File $filename does not exist!";

is_file()

Функция is_file() проверяет существование заданного файла и возможность выполнения с ним операций чтения/записи. В сущности, is_file() представляет собой более надежную версию file_exists(), которая проверяет не только факт существования файла, но и то, поддерживает ли он чтение и запись данных:

bool is_file(string файл)

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

$file = "somefile.txt";

if (is_file($file)) :

print "The file $file is valid and exists!";

print "The file $file does not exist or it is not a valid file!";

Убедившись в том, что нужный файл существует и с ним можно выполнять различные операции чтения/записи, можно переходить к следующему шагу -- открытию файла.

Функция filesize() возвращает размер (в байтах) файла с заданным именем или FALSE в случае ошибки. Синтаксис функции filesize():

int filesize(string имя_файла)

Предположим, вы хотите определить размер файла pastry.txt. Для получения нужной информации можно воспользоваться функцией filesize():

$fs = filesize("pastry.txt"); print "Pastry.txt is $fs bytes.";

Выводится следующий результат:

Pastry.txt is 179 bytes.

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

Открытие и закрытие файлов

Прежде чем выполнять операции ввода/вывода с файлом, необходимо открыть его функцией fopen().

Функция fopen() открывает файл (если он существует) и возвращает целое число -- так называемый файловый манипулятор (file handle). Синтаксис функции fopen():

int fopen (string файл, string режим [, int включение_пути])

Открываемый файл может находиться в локальной файловой системе, существовать в виде стандартного потока ввода/вывода или представлять файл в удаленной системе, принимаемой средствами HTTP или FTP.

Параметр файл может задаваться в нескольких формах, перечисленных ниже:

Если параметр содержит имя локального файла, функция fopen() открывает этот файл и возвращает манипулятор.

Если параметр задан в виде php://stdin, php://stdout или php://stderr, открывается соответствующий стандартный поток ввода/вывода.

Если параметр начинается с префикса http://, функция открывает подключение HTTP к серверу и возвращает манипулятор для указанного файла.

Если параметр начинается с префикса ftp://, функция открывает подключение FTP к серверу и возвращает манипулятор для указанного файла. В этом случае следует обратить особое внимание на два обстоятельства: если сервер не поддерживает пассивный режим FTP, вызов fopen() завершается неудачей. Более того, FTP-файлы открываются либо для чтения, либо для записи.

При работе в пассивном режиме сервер ЯР ожидает подключения со стороны клиентов. При работе в активном режиме сервер сам устанавливает соединение с клиентом. По умолчанию обычно используется активный режим.

Параметр режим определяет возможность выполнения чтения и записи в файл. В табл. 7.1 перечислены некоторые значения, определяющие режим открытия файла.

Таблица 7.1. Режимы открытия файла

Режим Описание
Только чтение. Указатель текущей позиции устанавливается в начало файла
r+ Чтение и запись. Указатель текущей позиции устанавливается в начало файла
w Только запись. Указатель текущей позиции устанавливается в начало файла, а все содержимое файла уничтожается. Если файл не существует, функция пытается создать его
w+ Чтение и запись. Указатель текущей позиции устанавливается в начало файла, а все содержимое файла уничтожается. Если файл не существует, функция пытается создать его
a Только запись. Указатель текущей позиции устанавливается в конец файла. Если файл не существует, функция пытается создать его
a+ Чтение и запись. Указатель текущей позиции устанавливается в конец файла. Если файл не существует, функция пытается создать его

Если необязательный третий параметр включение_пути равен 1, то путь к файлу определяется по отношению к каталогу включаемых файлов, указанному в файле php.ini (см. главу 1).

Ниже приведен пример открытия файла функцией fopen(). Вызов die(), используемый в сочетании с fopen(), обеспечивает вывод сообщения об ошибке в том случае, если открыть файл не удастся:

$file = "userdata.txt"; // Некоторый файл

$fh = fopen($file, "a+") or die("File ($file) does not exist!");

Следующий фрагмент открывает подключение к сайту PHP (http://www.php.net):

$site = "http://www.php.net": // Сервер, доступный через HTTP

$sh = fopen($site., "r"); //Связать манипулятор с индексной страницей Php.net

После завершения работы файл всегда следует закрывать функцией fclose().

Функция fclose() закрывает файл с заданным манипулятором. При успешном закрытии возвращается TRUE, при неудаче -- FALSE. Синтаксис функции fclose():

int fclose(int манипулятор)

Функция fclose() успешно закрывает только те файлы, которые были ранее открыты функциями fopen() или fsockopen(). Пример закрытия файла:

$file = "userdata.txt";

if (file_exists($file)) :

$fh = fopen($file, "r");

// Выполнить операции с файлом

print "File Sfile does not exist!";

Запись в файл

С открытыми файлами выполняются две основные операции -- чтение и запись.

Функция is_writeable() позволяет убедиться в том, что файл существует и для него разрешена операция записи. Возможность записи проверяется как для файла, так и для каталога. Синтаксис функции is_writeable():

bool is_writeable (string файл)

Одно важное обстоятельство: скорее всего, PHP будет работать под идентификатором пользователя, используемым web-сервером (как правило, «nobody»). Пример использования is_writeable() приведен в описании функции fwrite().

Функция fwrite() записывает содержимое строковой переменной в файл, заданный файловым манипулятором. Синтаксис функции fwrite():

int fwrite(int манипулятор, string переменная [, int длина])

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

// Информация о трафике на пользовательском сайте

$data = "08:13:00|12:37:12|208.247.106.187|Win98";

$filename = "somefile.txt";

// Если файл существует и в него возможна запись

if (is_writeable($filename)) :

$fh = fopen($filename, "a+");

// Записать содержимое $data в файл

$ success - fwrite($fh, $data);

// Закрыть файл

fclose($fh); else:

print "Could not open Sfilename for writing";

Функция fputs() является псевдонимом fwrite() и может использоваться всюду, где используется fwrite().

Функция fputs() является псевдонимом fwrite() и имеет точно такой же синтаксис. Синтаксис функции fputs():

int fputs(int манипулятор, string переменная [, int длина])

Лично я предпочитаю использовать fputs(). Следует помнить, что это всего лишь вопрос стиля, никак не связанный с какими-либо различиями между двумя функциями.

Чтение из файла

Несомненно, чтение является самой главной операцией, выполняемой с файлами. Ниже описаны некоторые функции, повышающие эффективность чтения из файла. Синтаксис этих функций практически точно копирует синтаксис аналогичных функций записи.

Функция i s_readable() позволяет убедиться в том, что файл существует и для него разрешена операция чтения. Возможность чтения проверяется как для файла, так и для каталога. Синтаксис функции is_readable():

boo! is_readable (string файл]

Скорее всего, PHP будет работать под идентификатором пользователя, используемым web-сервером (как правило, «nobody»), поэтому для того чтобы функция is_readable() возвращала TRUE, чтение из файла должно быть разрешено всем желающим. Следующий пример показывает, как убедиться в том, что файл существует и доступен для чтения:

if (is_readable($filename)) :

// Открыть файл и установить указатель текущей позиции в конец файла

$fh = fopen($filename, "r");

print "$filename is not readable!";

Функция fread() читает из файла, заданного файловым манипулятором, заданное количество байт. Синтаксис функции fwrite():

int fread(int манипулятор, int длина)

Манипулятор должен ссылаться на открытый файл, доступный для чтения (см. описание функции is_readable()). Чтение прекращается после прочтения заданного количества байт или при достижении конца файла. Рассмотрим текстовый файл pastry.txt, приведенный в листинге 7.1. Чтение и вывод этого файла в браузере осуществляется следующим фрагментом:

$fh = fopen("pastry.txt", "r") or die("Can"t open file!");

$file = fread($fh, filesize($fh));

Используя функцию fllesize() для определения размера pastry.txt в байтах, вы гарантируете, что функция fread() прочитает все содержимое файла.

Листинг 7.1. Текстовый файл pastry.txt

Recipe: Pastry Dough

1 1/4 cups all-purpose flour

3/4 stick (6 tablespoons) unsalted butter, chopped

2 tablespoons vegetable shortening 1/4 teaspoon salt

3 tablespoons water

Функция fgetc() возвращает строку, содержащую один символ из файла в текущей позиции указателя, или FALSE при достижении конца файла. Синтаксис функции fgetc():

string fgetc (int манипулятор)

Манипулятор должен ссылаться на открытый файл, доступный для чтения (см. описание функции is_readable() ранее в этой главе). В следующем примере продемонстрированы посимвольное чтение и вывод файла с использованием функции fgetc():

$fh = fopen("pastry.txt", "r"); while (! feof($fh)) :

$char = fgetc($fh):

print $char; endwhile;

Функция fgets() возвращает строку, прочитанную от текущей позиции указателя в файле, определяемом файловым манипулятором. Файловый указатель должен ссылаться на открытый файл, доступный для чтения (см. описание функции is_readable() ранее в этой главе). Синтаксис функции fgets():

string fgets (int манипулятор, int длина)

Чтение прекращается при выполнении одного из следующих условий:

  • из файла прочитано длина -- 1 байт;
  • из файла прочитан символ новой строки (включается в возвращаемую строку);
  • из файла прочитан признак конца файла (EOF).

Если вы хотите организовать построчное чтение файла, передайте во втором параметре значение, заведомо превышающее количество байт в строке. Пример построчного чтения и вывода файла:

$fh = fopen("pastry.txt", "r");

while (! feof($fh));

$line = fgets($fh, 4096);

print $line. "
";

Функция fgetss() полностью аналогична fgets() за одним исключением -- она пытается удалять из прочитанного текста все теги HTML и PHP:

string fgetss (Int манипулятор, int длина [, string разрешенные_теги])

Прежде чем переходить к примерам, ознакомьтесь с содержимым листинга 7.2 -- этот файл используется в листингах 7.3 и 7.4.

Листинг 7.2. Файл science.html

Breaking News - Science

Alien lifeform discovered


August 20. 2000

Early this morning, a strange new form of fungus was found growing in the closet of W. J. Gilmore"s old apartment refrigerator. It is not known if powerful radiation emanating from the tenant"s computer monitor aided in this evolution.

Листинг 7.З. Удаление тегов из файла HTML перед отображением в браузере

$fh = fopen("science.html", "r");

while (! feof($fh)) :

print fgetss($fh, 2048);

Результат приведен ниже. Как видите, из файла science.html были удалены все теги HTML, что привело к потере форматирования:

В некоторых ситуациях из файла удаляются все теги, кроме некоторых -- например, тегов разрыва строк
. Листинг 7.4 показывает, как это делается.

Листинг 7.4. Выборочное удаление тегов из файла HTML

$fh = fopenC"science.html", "r");

$allowable = "
";

while (! feof($fh)) :

print fgetss($fh. 2048, $allowable);

Результат:

Breaking News - Science Alien lifeform discovered August 20. 2000 Early this morning, a strange new form of fungus was found growing in the closet of W. J. Gilmore"s old apartment refrigerator. It is not known if powerful radiation emanating from the tenant"s computer monitor aided in this evolution.

Как видите, функция fgetss() упрощает преобразование файлов, особенно при наличии большого количества файлов HTML, отформатированных сходным образом.

Чтение файла в массив

Функция file() загружает все содержимое файла в индексируемый массив. Каждый элемент массива соответствует одной строке файла. Синтаксис функции filе ():

array file (string файл [, int включение_пути])

Если необязательный третий параметр включение_пути равен 1, то путь к файлу определяется по отношению к каталогу включаемых файлов, указанному в файле php.ini (см. главу 1). В листинге 7.5 функция file() используется для загрузки файла pastry.txt (см. листинг 7.1).

$file_array = file("pastry.txt");

while (list($line_num. $line) = eacht($file_array)):

print "Line $line_num: ", htmlspecialchars($line), "
\n"

Каждая строка массива выводится вместе с номером:

Line 0: Recipe: Pastry Dough

Line 1: 1 1/4 cups all-purpose flour

Line 2: 3/4 stick (6 tablespoons) unsalted butter, chopped

Line 3: 2 tablespoons vegetable shortening

Line 4: 1/4 teaspoon salt

Line 5: 3 tablespoons water

Перенаправление файла в стандартный выходной поток

Функция readfile() читает содержимое файла и направляет его в стандартный вывод (в большинстве случаев -- в браузер). Синтаксис функции readfile():

int readfile (string файл [, int включение_пути])

Функция возвращает количество прочитанных байтов. Файл может находиться в локальной файловой системе, существовать в виде стандартного потока ввода/вывода или представлять файл в удаленной системе, принимаемой средствами HTTP или FTP. Параметр файл задается по тем же правилам, что и в функции fopen().

Предположим, у вас имеется файл latorre.txt, содержимое которого вы хотите вывести в браузере:

Restaurant "La Тоrrе." located in Nettuno, Italy, offers an eclectic blend of style. history, and fine seafood cuisine. Within the walls of the medieval borgo surrounding the city, one can dine while watching the passersby shop in the village boutiques. Comfort coupled with only the freshest seafare make La Torre one of Italy"s finest restaurants.

При выполнении следующего фрагмента все содержимое latorre.txt направляется в стандартный выходной поток:

$restaurant_file = "latorre.txt";

// Направить весь файл в стандартный выходной поток

readfile($restaurant_filе);

Открытие файлового манипулятора процесса

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

int popen (string команда, string режим)

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

// Открыть файл "spices.txt" для записи

$fh = fopen("spices.txt","w");

// Добавить несколько строк текста

fputs($fh, "Parsley, sage, rosemary\n");

fputs($fh, "Paprika, salt, pepper\n");

fputs($fh, "Basil, sage, ginger\n");

// Закрыть манипулятор

// Открыть процесс UNIX grep для поиска слова Basil в файле spices.txt

$fh - popen("grep Basil < spices.txt", "r");

// Вывести результат работы grep

Результат выглядит так:

Basil, sage, ginger

Функция fpassthru() является аналогом функции passthru(), рассматриваемой в разделе «Запуск внешних программ» этой главы.

После выполнения всех операций файл или процесс необходимо закрыть. Функция pclose() закрывает соединение с процессом, заданным манипулятором, по аналогии с тем, как функция fclose() закрывает файл, открытый функцией fopen(). Синтаксис функции pclose():

int pclose (int манипулятор}

В параметре манипулятор передается манипулятор, полученный ранее при успешном вызове рореn().

Открытие соединения через сокет

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

Функция fsockopen() устанавливает сокетное соединение с сервером в Интернете

через протокол TCP или UDP. Синтаксис функции fsockopen():

int fsockopen (string узел, int порт [, int код_ошибки [, string текст_ошибки [, int тайм-аут]]])

Необязательные параметры код_ошибки и текст_ошибки содержат информацию, которая будет выводиться в случае неудачи при подключении к серверу. Оба параметра должны передаваться по ссылке. Третий необязательный параметр, тайм-аут, задает продолжительность ожидания ответа от сервера (в секундах). В листинге 7.6 продемонстрировано применение функции fsockopen() для получения информации о сервере. Однако перед рассмотрением листинга 7.6 необходимо познакомиться еще с одной функцией -- socket_set_blocking().

UDP (User Datagram Protocol) -- коммуникационный протокол, не ориентированный на соединение.

socket_set_blocking()

Функция socket_set_b1ocki ng() позволяет установить контроль над тайм-аутом для операций с сервером:

socket_set_blocking(int манипулятор, boolean режим)

Параметр манипулятор задает открытый ранее сокет, а параметр режим выбирает режим, в который переключается сокет (TRUE для блокирующего режима, FALSE для неблокирующего режима). Пример использования функций fsockopen() и socket_set_blocking() приведен в листинге 7.6.

Листинг 7.6. Использование функции fsockopen() для получения информации о сервере

function getthehost($host.$path) {

// Открыть подключение к узлу

$fp - fsockopen($host, 80, &$errno, &$errstr, 30);

// Перейти в блокирующий режим

socket_set_blocking($fp, 1),

// Отправить заголовки

fputs($fp,"GET $path HTTP/1.1\r\n");

fputs ($fp, "Host: $host\r\n\r\n"); $x = 1;

// Получить заголовки

while($x < 10) :

$headers = fgets ($fp, 4096);

// Закрыть манипулятор

getthehost("www. apress.com", "/");

В результате выполнения листинга 7.6 выводится следующий результат:

НТТР/1.1 200 OK Server: Microsoft-IIS/4.0 Content-location:

2000 20:25:06 GMT ETag: "f0a61666dbff1bf1:34a5" Content-Length: 1311

Функция pfsockopen() представляет собой устойчивую (persistent) версию fsockopen(). Это означает, что соединение не будет автоматически разорвано по завершении сценария, в котором была вызвана функция. Синтаксис функции pfsockopen():

int pfsockopen (string узел, int порт [, int код_ошибки [, string текст _ошибки [, int тайм-аут]]])

В зависимости от конкретных целей вашего приложения может оказаться удобнее использовать pfsockopen() вместо fsockopen().

Запуск внешних программ

Сценарии PHP также могут выполнять программы, находящиеся на сервере. Такая возможность особенно часто используется при администрировании системы через web-браузер, а также для более удобного получения сводной информации о системе.

Функция ехес() запускает заданную программу и возвращает последнюю строку ее выходных данных. Синтаксис функции ехес():

string exec (string команда [, string массив [, int возврат]])

Обратите внимание: функция ехес() только выполняет команду, не выводя результатов ее работы. Все выходные данные команды можно сохранить в необязательном параметре массив. Кроме того, если при заданном параметре массив также задается переменная возврат, последней присваивается код возврата выполненной команды.

Листинг 7.7 показывает, как использовать функцию ехес() для выполнения системной функции UNIX ping.

Листинг 7.7. Проверка связи с сервером с применением функции ехес()

exec("ping -с 5 www.php.net", $ping);

// В Windows - exec("ping -n 5 www.php.net. $ping);

for ($i=0; $i< count($ping);$i++) :

print "
$ping[$i]";

Результат:

PING www.php.net (208.247.106.187): 56 data bytes

64 bytes from 208.247.106.187: icmp_seq=0 ttl=243 time=66.602 ms

64 bytes from 208.247.106.187: icmp_seq=1 ttl=243 time=55.723 ms

64 bytes from 208.247.106.187: icmp_seq=2 ttl=243 time=70.779 ms

64 bytes from 208.247.106.187: icmp_seq=3 ttl=243 time=55.339 ms

64 bytes from 208.247.106.187: icmp_seq=4 ttl=243 time=69.865 ms

Www.php.net ping statistics --

5 packets transmitted. 5 packets received. 0% packet loss

round-trip min/avg/max/stddev - 55.339/63.662/70.779/6.783 ms

Обратные апострофы

Существует и другой способ выполнения системных команд, не требующий вызова функций, -- выполняемая команда заключается в обратные апострофы (` `), а результаты ее работы отображаются в браузере. Пример:

print "

$output
";

Этот фрагмент выводит в браузер содержимое каталога, в котором находится сценарий.

Внутренний параметр ping -с 5 (-п 5 в системе Windows) задает количество опросов сервера.

Если вы хотите просто вернуть неформатированные результаты выполнения команды, воспользуйтесь функцией passthru(), описанной ниже.

Функция passthru() работает почти так же, как ехес(), за одним исключением -- она автоматически выводит результаты выполнения команды. Синтаксис функции passthru():

void passthru(string команда [, int возврат])

Если при вызове passthru() передается необязательный параметр возврат, этой переменной присваивается код возврата выполненной команды.

escapeshellcmd()

Функция escapeshellcmd() экранирует все потенциально опасные символы, которые могут быть введены пользователем (например, на форме HTML), для выполнения команд exec(), passthru(), system() или рореn(). Синтаксис:

string escapeshellcmd (string команда)

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

$user_input = `rm -rf *`; // Удалить родительский каталог и все его подкаталоги

ехес($user_input); // Выполнить $user_input !!!

Если не предпринять никаких мер предосторожности, такая команда приведет к катастрофе. Впрочем, можно воспользоваться функций escapeshellcmd() для экранирования пользовательского ввода:

$user_input = `rm - rf *`; // Удалить родительский каталог и все его подкаталоги

ехес(escapeshellcmd($user_input)); // Экранировать опасные символы

Функция escapeshellcmd() экранирует символ *, предотвращая катастрофические последствия выполнения команды.

Безопасность является одним из важнейших аспектов программирования в среде Web, поэтому я посвятил целую главу этой теме и ее отношению к программированию PHP. За дополнительной информацией обращайтесь к главе 16.

Работа с файловой системой

В PHP существуют функции для просмотра и выполнения различных операций с файлами на сервере. Информация об атрибутах серверных файлов (местонахождение, владелец и привилегии) часто бывает полезной.

Функция basename() выделяет имя файла из переданного полного имени. Синтаксис функции basename():

string basename(string полное_имя)

Выделение базового имени файла из полного имени происходит следующим образом:

$path = "/usr/local/phppower/htdocs/index.php"; $file = basename($path); // $file = "index.php"

Фактически эта функция удаляет из полного имени путь и оставляет только имя файла.

Функция getlastmod() возвращает дату и время последней модификации страницы, из которой вызывается функция. Синтаксис функции getlastmod():

int getlastmod(void)

Возвращаемое значение соответствует формату даты/времени UNIX, и для его форматирования можно воспользоваться функцией date(). Следующий фрагмент выводит дату последней модификации страницы:

echo "Last modified: ".date("H:i:s a". getlastmod());

Функция stat() возвращает индексируемый массив с подробной информацией о файле с заданным именем:

array stat(string имя_файла)

В элементах массива возвращается следующая информация:

0 У стройство

2 Режим защиты индексного узла

3 Количество ссылок

4 Идентификатор пользователя владельца

5 Идентификатор группы владельца

6 Тип устройства индексного узла

7 Размер в байтах

8 Время последнего обращения

9 Время последней модификации

10 Время последнего изменения

11 Размер блока при вводе/выводе в файловой системе

12 Количество выделенных блоков

Таким образом, если вы хотите узнать время последнего обращения к файлу, обратитесь к элементу 8 возвращаемого массива. Рассмотрим пример:

$file - "datafile.txt";

list($dev, $inode, $inodep, $nlink, $uid, $gid, $inodev, $size, $atime, $mtime, $ctime,

$bsize) = stat($file);

print "$file is $size bytes.
";

print "Last access time: $atime
";

print "Last modification time: $mtime
";

Результат:

popen.php is 289 bytes.

Last access time: August 15 2000 12:00:00

Last modification time: August 15 2000 10:07:18

В этом примере я воспользовался конструкцией list () для присваивания имен каждому возвращаемому значению. Конечно, с таким же успехом можно вернуть массив, в цикле перебрать элементы и вывести всю необходимую информацию. Как видите, функция stat () позволяет получить различные полезные сведения о файле.

Отображение и изменение характеристик файлов

У каждого файла в системах семейства UNIX есть три важные характеристики:

  • принадлежность группе;
  • владелец;
  • разрешения (permissions).

Все эти характеристики можно изменить при помощи соответствующих функций PHP. Функции, описанные в этом разделе, не работают в системах семейства Windows.

Если у вас нет опыта работы в операционных системах UNIX, информацию о характеристиках файловой системы UNIX можно получить по адресу http://sunsite.auc.dk/linux-newbie/FAQ2.htm . Темы принадлежности группе, владения и разрешений рассматриваются в разделе 3.2.6.

Функция chgrp() пытается сменить группу, которой принадлежит заданный файл. Синтаксис функции chgrp():

int chgrp (string имя_файла, mixed группа)

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

int filegroup (string имя_файла)

Функция chmod() изменяет разрешения файла с заданным именем. Синтаксис функции chmod():

int chmod (string имя_файла, int разрешения)

Разрешения задаются в восьмеричной системе. Специфика задания параметра функции chmod () продемонстрирована в следующем примере:

chmod("data_file.txt", g+r); // He работает

chmod("data_file.txt", 766); // Не работает

chmod("data_file.txt", 0766); // Работает

Функция fileperms() возвращает разрешения файла с заданным именем или FALSE в случае ошибки. Синтаксис функции fileperms():

int fileperms (string имя_файла)

Функция chown() пытается сменить владельца файла. Право изменения владельца файла предоставляется только привилегированному пользователю. Синтаксис функции chown():

int chown (string имя_файла, mixed пользователь)

Функция fileowner() возвращает идентификатор пользователя для владельца файла с заданным именем. Синтаксис функции fileowner():

int fileowner (string имя_файла)

Копирование и переименование файлов

К числу других полезных системных функций, которые могут выполняться в сценариях PHP, относятся копирование и переименование файлов на сервере. Эти операции выполняются двумя функциями: сору() и rename().

Скопировать файл в сценарии PHP ничуть не сложнее, чем при помощи команды UNIX ср. Задача решается функцией PHP сору(). Синтаксис функции сору():

int copy (string источник, string приемник)

Функция сору() пытается скопировать файл источник в файл приемник; в случае успеха возвращается TRUE, а при неудаче -- FALSE. Если файл приемник не существует, функция сору() создает его. Следующий пример показывает, как создать резервную копию файла при помощи функции сору():

$data_file = "datal.txt";

copy($data_file. $data_file".bak") or die("Could not copy $data_file");

Функция rename() переименовывает файл. В случае успеха возвращается TRUE, a при неудаче -- FALSE. Синтаксис функции rename():

bool rename (string старое_имя, string новое_имя)

Пример переименования файла функцией rename():

$data_file = "datal.txt";

rename($data file, $datafile".old") or die ("Could not rename $data file");

Удаление файлов

Функция unlink() удаляет файл с заданным именем. Синтаксис:

int unlink (string файл)

Если вы работаете с PHP в системе Windows, при использовании этой функции иногда возникают проблемы. В этом случае можно воспользоваться описанной выше функцией system() и удалить файл командой DOS del:

system ("del filename.txt");

Работа с каталогами

Функции PHP позволяют просматривать содержимое каталогов и перемещаться по ним. В листинге 7.8 изображена типичная структура каталогов в системе UNIX.

Листинг 7.8. Типичная структура каталогов

Функция dirname() дополняет basename() -- она извлекает путь из полного имени файла. Синтаксис функции dirname():

string dirname (string путь)

Пример использования dirname() для извлечения пути из полного имени:

$path = "/usr/locla/phppower/htdocs/index.php";

$file = dirname($path); // $file = "usr/local/phppower/htdocs"

Функция dirname() иногда используется в сочетании с переменной $SCRIPT_FILENAME для получения полного пути к сценарию, из которого выполняется команда:

$dir - dirname($SCRIPT_FILENAME);

Функция is_dir() проверяет, является ли файл с заданным именем каталогом:

bool is_dir (string имя_файла)

В следующем примере используется структура каталогов из листинга 7.8:

$ isdir = is_dir("index.html"); // Возвращает FALSE

$isdir = is_dir("book"); // Возвращает TRUE

Функция mkdir() делает то же, что и одноименная команда UNIX, -- она создает новый каталог. Синтаксис функции mkdir():

int mkdir (string путь, int режим)

Параметр путь определяет путь для создания нового каталога. Не забудьте завершить параметр именем нового каталога! Параметр режим определяет разрешения, назначаемые созданному каталогу.

Подобно тому как функция fopen() открывает манипулятор для работы с заданным файлом, функция opendir() открывает манипулятор для работы с каталогом. Синтаксис функции opendir():

int opendir (string путь)

Функция closedir() закрывает манипулятор каталога, переданный в качестве параметра. Синтаксис функции closedir():

void closedir(int манипулятор_каталога)

Функция readdir() возвращает очередной элемент заданного каталога. Синтаксис:

string readdir(int манипулятор_каталога)

С помощью этой функции можно легко вывести список всех файлов и подкаталогов, находящихся в текущем каталоге:

$dh = opendir(" .);

while ($file = readdir($dh)) :

print "$file
"; endwhile;

Функция chdir() работает так же, как команда UNIX cd, -- она осуществляет переход в каталог, заданный параметром. Синтаксис функции chdir():

int chdir (string каталог)

В следующем примере мы переходим в подкаталог book/ и выводим его содержимое:

$newdir = "book";

chdir($newdir) or die("Could not change to directory ($newdir)"); $dh = opendir(" . ");

while ($file = readdir($dh)) ;

print "$file
";

Функция rewlnddir() переводит указатель текущей позиции в начало каталога, открытого функцией opendir(). Синтаксис функции rewinddir():

void rewinddir (int нанипулятор_каталога)

Проект 1: простой счетчик обращений

Сценарий, представленный в этом разделе, подсчитывает количество обращений к странице, в которой он находится. Прежде чем переходить к программному коду в листинге 7.9, просмотрите алгоритм, написанный на псевдокоде:

  1. Присвоить переменной $access имя файла, в котором будет храниться значение счетчика.
  2. Использовать функцию filе() для чтения содержимого $access в массив $visits. Префикс @ перед именем функции подавляет возможные ошибки (например, отсутствие файла с заданным именем).
  3. Присвоить переменной $current_visitors значение первого (и единственного) элемента массива $visits.
  4. Увеличить значение $current_visitors на 1.
  5. Открыть файл $access для записи и установить указатель текущей позиции в начало файла.
  6. Записать значение $current_visitors в файл $access.
  7. Закрыть манипулятор, ссылающийся на файл $access.

Листинг 7.9. Простой счетчик обращений

// Сценарий: простой счетчик обращений

// Назначение: сохранение количества обращений в файле

$access = "hits.txt"; // Имя файла выбирается произвольно

$current_visitors = $visits; // Извлечь первый (и единственный) элемент

++$current_visitors; // Увеличить счетчик обращений

$fh = fopen($access. "w"); // Открыть файл hits.txt и установить

// указатель текущей позиции в начало файла

@fwrite($fh, $current_visitors);// Записать новое значение счетчика

// в файл "hits.txt"

fclose($fh); // Закрыть манипулятор файла "hits.txt"

Проект 2: построение карты сайта

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

  1. Объявить служебные переменные для хранения родительского каталога, имени графического файла с изображением папки, названия страницы и флага серверной ОС (Windows или другая система).
  2. Объявить функцию display_directory(), которая читает содержимое каталога и форматирует его для вывода в браузере.
  3. Построить путь к каталогу объединением имени, передаваемого в переменной $dir1, с $dir.
  4. Открыть каталог и прочитать его содержимое. Отформатировать имена каталога и файлов и вывести их в браузере.
  5. Если текущий файл является каталогом, рекурсивно вызвать функцию display_di rectory() и передать ей имя нового каталога для вывода. Вычислить отступ, используемый при форматировании вывода.

Если файл не является каталогом, он форматируется для отображения в виде гиперссылки (а также вычисляется отступ, используемый при форматировании).

Листинг 7.10. Программа sitemap.php

// Файл: sitemap.php

// Назначение: построение карты сайта

// Каталог, с которого начинается построение карты

$beg_path = "C:\Program FilesVApache Group\Apache\htdocs\phprecipes";

// Файл с графическим изображением папки.

// Путь должен задаваться Относительно* корневого каталога сервера Apache

$folder_location = "C:\My Documents\PHP for Programmers\FINAL CHPS\graphics\folder.gif";

// Текст в заголовке окна $page_name = "PHPRecipes SiteMap";

// В какой системе будет использоваться сценарий - Linux или Windows?

// (0 - Windows; 1 - Linux)

$usingjinux = 0;

// Функция: display_directory

// Назначение: чтение содержимого каталога, определяемого параметром

// $dir1, с последующим форматированием иерархии каталогов и файлов.

// Функция может вызываться рекурсивно.

function display_directory ($dir1, $folder_location, $using_linux, $init_depth) {

// Обновить путь

Sdh = opendir($dir);

while($file = readdir($dh)) :

// Элементы каталогов "." и ".." не выводятся.

if (($file != ".") && ($file != "..")) :

if ($using_linux == 0) :

$depth = explode("\\", $dir): else:

$depth = explode("/", $dir); endif ; $curtent_depth = sizeof($depth);

// Построить путь по правилам используемой операционной системы. if ($using_linux == 0) :

$tab_depth = $current_deptn - $init_depth;

$file = $dir. "\\", $file; else:

$file = $dir. "/",$file; endif;

// Переменная $file содержит каталог? if (is dir($file)) :

// Вычислить отступ

while ($х < ($tab_depth * 2)) :

$х++; endwhile;

print "

".basename($file)."
";

// Увеличить счетчик

// Рекурсивный вызов функции display_directory()

display_directory($file, $folder_location, $using_linux, $init_depth);

// He каталог

// Построить путь по правилам используемой

// операционной системы.

if ($using_linux == 0) :

$tab_depth = ($current_depth - $init_depth) - 2; $x = 0;

// Вычислить отступ

while ($x < (($tab_depth * 2) + 5)) :

print "".basename($file)."
";

print "".basename($file)."
";

endif; // Is_dir(file) endif: // If ! "." or ".."

// Закрыть каталог closedir($dh);

<? print "$page_name"; ?>

// Вычислить начальный отступ

if ($using_linux == 0) :

$depth = explode("\\", $beg_path);

$depth = explode("/", $beg_path);

$init_depth = sizeof($depth);

display_directory ($beg_path, $folder_location, $using_linux, $init_depth);

На рис. 7.1 изображен результат выполнения сценария для каталога с несколькими главами этой книги.

Рис. 7.1. Вывод структуры каталога на сервере с использованием сценария sitemap.php

Итоги

В этой главе были представлены многие средства PHP, предназначенные для работы с файлами. В частности, мы рассмотрели следующие вопросы:

  • проверку существования файлов;
  • открытие и закрытие файлов и потоков ввода/вывода;
  • запись в файл и чтение из него;
  • перенаправление файла в выходной поток;
  • запуск внешних программ;
  • операции с файловой системой.

Материал этой главы подготовил почву для следующей главы, «Строки и регулярные выражения», поскольку при разработке web-приложений обработка строк и операции ввода/вывода очень тесно связаны.

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

Синтаксис:

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 и "липкие" биты.

Любое программное обеспечение, которое вы хотите запустить на вашем веб сервере имеет определенные требования, которым он должен соответствовать. К примеру, для 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 модулей.

Новое на сайте

>

Самое популярное