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

Скачать на Телефон 04.08.2019
Скачать на Телефон

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

Общие замечания

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

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

Существенное обстоятельство

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

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

Прочитать и изменить самого себя

Может ли программа себя изменить, то есть может ли скрипт совершенствоваться? По сей день этот вопрос интересует многих. Но гораздо практичнее звучит задача: PHP чтение PHP файла. Не всегда разработчик может решить ту или иную задачу, написав конкретный код. Иногда необходимо изменить его, когда на сайт зашел посетитель и сформулировал не предусмотренный на этапе разработки вопрос.

Как и во всех остальных случаях, прежде всего файл нужно открыть. При этом не важно, существует этот файл или нет. Если известно, что файл существует (функция file_exists() дает положительный ответ), используется функция fopen() с доступом ‘r’, ‘r+’, ‘a’, ‘a+’. Если файла еще нет, то с доступом ‘a’, ‘a+’, ‘w’, ‘w+’. Результатом открытия файла будет его дескриптор. Закрывается файл функцией fclose().

Удобно использовать PHP чтение файла в массив, когда нет необходимости его обрабатывать в момент чтения.

if (file_exists($fName)) {

$aLines = file($fName)

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

Когда входной файл слишком велик, а нужно найти совсем чуть-чуть информации, или по иным соображениям, можно использовать PHP чтение файла построчно. PHP предоставляет возможность делать это функциями fgets() и fgetc().

$fvs = fopen($fName, "r")

while ((false !== ($cLine = fgets($fvs, 2000)))) {

$cLines .= "
" . $i . "). " . $cLine

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

Сохранение результатов

Полученная и обновленная информация записывается в файл функцией fputs() построчно или функцией file_put_contents() целиком.

$fName = $_SERVER["DOCUMENT_ROOT"] . "/tmp/scData.php"

$fvs = fopen($fName, "a")

flock($fvs, LOCK_EX)

$cLine = "1 line". chr(10)

fputs($fvs, $cLine)

$cLine = "2 line" . chr(10)

fputs($fvs, $cLine)

flock($fvs, LOCK_UN)

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

$file = " scData.php "

$cContents = file_get_contents($file)

// добавление записи

$cContents .= "новая запись\n"

// запись файла обратно

file_put_contents($file, $cContents)

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

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

Характерная черта PHP, MySQl, JavaScript, а особенно браузеров: тихо пускать на самотек некоторые ошибки. «Не распозналось, не сделалось …» - не слишком хорошая практика переднего края информационных технологий, но это учит разработчиков не ошибаться и писать чистый, качественный код, что тоже неплохо.

PHP и работа с реальными документами

PHP чтение PHP файла, безусловно, представляет практический интерес, но это сфера программирования. Пользователя и посетителя сайтов интересует информация прикладного характера, которую он привык видеть в виде таблиц и документов, в частности, в форматах *.xlsx и *.docx файлов. Это файлы в формате MS Excel и MS Word.

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

Для работ с такими файлами разработаны библиотеки PHPExcel и PHPWord. Однако содержимое файлов *.xlsx и *.docx представлено в стандарте OOXML, то есть реальный доступный пониманию документ представлен zip архивом. Zip архив - это множество файлов, включая картинки, объекты, формулы, вставки из других программ. Текстовые файлы здесь представлены описаниями в виде тегов. Прочитать такой файл мало, нужно его разобрать, чтобы получить содержимое и структуру для использования и изменения.

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

Excel-таблицы

include_once ‘PhpOffice/PhpExcel/IOFactory.php’

function scGetExcelFile($xls){

$objPHPExcel = PHPExcel_IOFactory::load($xls)

$objPHPExcel->setActiveSheetIndex(0)

//этот массив содержит массивы строк

$aSheet = $objPHPExcel->getActiveSheet()

$array = array()

//обработка

foreach($aSheet->getRowIterator() as $row){

$cellIterator = $row->getCellIterator()

foreach($cellIterator as $cell){

array_push($item, iconv("utf-8", "cp1251", $cell->getCalculatedValue()))

array_push($array, $item)

Чтение и обработка Excel-файлов значительно сложнее обработки документов Word. Лучший вариант, если необходимо реализовать серьезный проект для чтения и обработки прикладной информации, - сначала освоить библиотеку PHPWord. Это даст хороший опыт и быстрое вхождение в специфику вопроса.

Документы Word

Всего две строки:

$oWord = new \PhpOffice\PhpWord\PhpWord()

$oDocx = $this->oWord->loadTemplate($cFileName)

Теперь документ $cFileName доступен для обработки. Далее открывается архив, выбирается и анализируется его содержимое, которое можно отобразить на сайте, изменить и записать обратно.

$zipClass = new ZipArchive()

$zipClass->open($this->tempFileName)

// читаем все содержимое документа

for ($i=0; $i<$zipClass->numFiles; $i++) {

$cNameIn = $zipClass->getNameIndex($i)

$cNameInExt = substr($cNameIn, -4)

if (($cNameInExt == ".xml") || ($cNameInExt == "rels")) {

// файлы с расширениями ".xml" и ".xml.rels" сохраняются в таблице документа

// каждая xml-строка записывается с уникальным номером по порядку

$cBodyIn = $zipClass->getFromName($cNameIn)

$cBodyInLen = strlen($cBodyIn)

// все остальные файлы записываются в папку документа в том виде, как есть

$cNameOnly = substr($cNameIn, strrpos($cNameIn, "/") + 1)

$zipClass->getFromName($cNameIn, $cWorkPath); // содержимое в виде файла

Возможности, которые открываются при помощи PHP Excel и PHP Word, позволяют манипулировать реальными документами, делать их содержимое актуальным в каждый момент времени. В современном динамичном мире это становится очень важным. Центр тяжести уже давно перешел из локального использования компьютерной техники в виртуальное интернет-пространство. Потому создание таблиц и документов в локальных продуктах от Microsoft менее эффективно, чем работа с такими документами в автоматическом и полуавтоматическом режиме на сайте, который доступен не только создателю таблицы или документа, но и его потребителям.

Текстовые файлы, другая жизнь

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

Коль есть такая данность, как клиент и сервер (на первом властвует JavaScript, на втором - PHP), то даже механизмы cookie и sessions не справляются с необходимостью передачи информации между скриптами, страницами, теми или иными процессами.

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

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

Если подумать над тем, что текстовый файл - это содержание и структура от разработчика, PHP файл - это синтаксис интерпретатора плюс логика разработчика, а «теговые» описания html, css, xml - это более смысловые элементы, но регламентированные статичными стандартами. Можно прийти к мысли о том, что вероятно файлам уже пора приобрести новое содержание, и оно само должно определять их качество и логику применения. Именно потому, что программирование еще не готово к следующему этапу своего развития, файлы ныне остаются просто файлами, которые создает разработчик и определяет их использование.

Самое интересное и перспективное, когда PHP чтение PHP файла происходит самостоятельно, когда в этом возникает необходимость. А простое PHP чтение строки из файла приводит к созданию объекта, хотя бы в том состоянии, в котором он был сохранен. Это не совсем привычные идеи, но ведь в современном мире все так быстро меняется.

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

Последовательность работы с файлами в PHP такая:

  1. Открыть файл.
  2. Выполнить необходимые действия.
  3. Закрыть файл.

Как видите, последовательность работы с файлами напоминает работу с файлами через обычный проводник. Только здесь вся работа выполняется автоматически самим PHP-скриптом .

Начнём с первого пункта - открытие файла. Файл открывается с помощью функции fopen() . Первый параметр - это путь к файлу, а второй параметр - модификатор . Давайте сразу разберём возможные модификаторы:

  1. a - открывает файл только для записи, причём указатель помещается в конец файла.
  2. a+ a , но также файл открывается ещё и для чтения.
  3. r - открывает файл только для чтения, а указатель устанавливается в начало файла.
  4. r+ - то же самое, что и модификатор r , но также файл открывается ещё и для записи.
  5. w - открывает файл только для записи, указатель устанавливает в начало файла и стирает всё содержимое файла.
  6. w+ - то же самое, что и модификатор w , только файл открывается также и для чтения.

Также различают два режима работы с файлами: бинарный (обозначается b ) и текстовый (обозначается t ). Если Вы работаете с обычным текстовым файлом, то выбирайте текстовый режим, а если, например, с изображением, то бинарный.

Это все основные модификаторы, которых Вам вполне хватит. Теперь давайте узнаем, как закрыть файл. Закрывается файл с помощью функции fclose() .

Теперь перейдём к чтению файла с помощью функции fread() . И давайте, наконец-то, приведу пример:

$contents = "";
while (!feof($handle))
$contents .= fread($handle, 4096);
fclose($handle);
?>

В данном примере мы сначала открываем файл для чтения в текстовом режиме (модификатор rt ). Функция fopen() возвращает так называемый дескриптор , с помощью которого можно общаться с файлом, и записываем его в переменную handle . Затем мы в цикле while() до тех пор, пока не достигнут конец файл, считываем содержимое каждый раз по 4096 символов, которые записываем в переменную contents . После завершения процесса считывания - закрываем файл, вновь с помощью дескриптора файла.

Теперь перейдём к записи с помощью функции fwrite() :

$handle = fopen("files/a.txt", "at");
$string = "This is text";
fwrite($handle, $string);
fclose($handle);
?>

После запуска этого скрипта, в файле a.txt добавится строка "This is text ".

Особо внимательные читатели обратили внимание на указатели, о которых я писал чуть выше. Указатель - это текущая позиция воображаемого "курсора" в файле. Именно с него и начинается работа с файлом. Изменить положение указателя можно с помощью функции fseek() :

$handle = fopen("files/a.txt", "rt");
echo $contents."
";
fseek($handle, 0, SEEK_SET);
$contents = fread($handle, 3);
echo $contents."
";
?>

Таким образом, мы сначала считываем 3 символа (в результате, текущее положение указателя сдвигается на 3 позиции). Затем мы устанавливаем указатель на начало файла. И вновь считываем 3 символа. Как Вы и догадались, мы два раза считали одно и тоже. То есть первый раз 3 символа, потом вернулись назад, и вновь считали 3 символа. Также если у функции fseek() заменить SEEK_SET на SEEK_CUR , то тогда второй параметр будет не устанавливать позицию указателя, а сдвигать относительно текущего местоположения. Советую даже попрактиковаться с указателями, потому что для понимания это не так просто. Также рекомендую попытаться записать что-нибудь в файл при позиции указателя, например, в самом начале файла. И обязательно объясните полученный результат.

И, напоследок, хочется привести ещё пару функций, которые позволяют работать с файлами на самом простом уровне: file_put_contens() и file_get_contents() . Функция file_put_contents() записывает в файл, а функция file_get_contents() считывает содержимое из файла. Эти функции очень просты в применении, но возможностей там уже меньше (хотя, как правило, они и не нужны):

file_put_contents("files/a.txt", "This is text 2");
echo file_get_contents("files/a.txt");
?>

В данном скрипте мы сначала записали строку "This is text 2 " в файл, а потом считываем полученное содержимое и выводим его. Как видите, трудно придумать более простой способ чтения из файла и запись в файл .

Вот и все основные моменты работы с файлами в PHP .

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

Чтобы создать файл на php в исполняемом скрипте надо всего лишь указать несколько функций:

Рассмотрим сразу пример:

$text = "Какой-то тут текст для записи в файл";
$fp = fopen("file.txt", "w");
fwrite($fp, $text);
fclose($fp);
?>

Тут вы должны знать :

fopen() - функция открывает файл чтения или для записи и уточнениями;

Это уточнения (параметр mode функции fopen) очень важно:

  • "r " - открыть файл в php ТОЛЬКО для чтения . Курсор помещается в начало.
  • "r+ " - открыть файл в php для чтения и для записи . Курсор помещается в начало. !!! - при этих двух режимах r и r+ файлы уже должны быть созданы(иначе вылезет ошибка Warning: fopen(file.txt) : failed to open stream: No such file or directory in ... ), а мы лишь читаем или у нас есть возможность дописывать.
  • "w " - открывается файл ТОЛЬКО для записи. Файл урезается до нулевой длины - то есть затирается. Записывается, что нужно и Курсор ставится в начало.
  • "w+ " - открывается файл для записи И ЧТЕНИЯ! Остальное то же самое что и в режиме "w". !!! - при этих двух режимах - если файл не был создан - ПРЕДПРИМЕТСЯ ПОПЫТКА ЕГО СОЗДАТЬ!
  • "a " - открыть файл ТОЛЬКО для записи. В отличие от "w" этот параметр не затирает содержимое файла, а ставит курсор в конец строки и добавляет в конец содержимое, которое мы хотели добавить.
  • "a+ " - открыть файл для записи и чтения.

fwrite ($fp, $text) - функция записи в файл на php - то есть то что находится в переменной $text записывается в файл, который находится в переменной $fp;

fclose ($fp) - функция закрытия файла, который мы записали в переменную $fp;

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

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

while(!feof($fp)){
$mytext = fgets($fp, 99);
echo $mytext."
";
}

здесь выполняется условие - "пока не достигнут конец файла то делай то то" while(!feof($fp))

1. Функция fgets ($fp, 99) - позволяет разделить все содержимое на участки в 99 байт и далее, чтобы это отчетливее увидеть мы помещаем тег

Эта функция string fgets (resource handle [, int length]) по умолчанию принимает в параметр length 1024 байта(1 килобайт), если не указать так и будет. Этот параметр необязателен с PHP 4.2.0 (В случае ошибки возвращает FALSE)

Доп функции для открытия, записи и создания файла

Функция - int readfile (string filename [, bool use_include_path [, resource context]]) - считываем файл как единое целое.

Читает файл и записывает содержимое в буфер вывода. И возвращает количество выведенных байт. В случае ошибки вернет, если не использована собачка - @readfile.

Что-то подобное получится:

В конце слова тег стоят
.

б. Функция - array file (string filename [, int use_include_path [, resource context]]), делает то же самое, что и функция readfile, за одним исключением она добавляет содержимое файла в массив:

Таким образом можно считывать любые странички в интернете: $lines = file("http://сайт/"); и перебрать массив через функцию foreach;

3а. Функция string file_get_contents (string filename [, bool use_include_path [, resource context [, int offset [, int maxlen]]]]) - позволяет получить содержимое в виде одной строки.

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

Важно!!! - в этом случае функция заменяет сразу 3: fopen(), fread() и fclose() и таким образом избавляет от мароки.

3б. Функция int file_put_contents (string filename, mixed data [, int flags [, resource context]]) - идентична последовательному вызову функций fopen(), fwrite() и fclose() - возвращает количество записанных байт.

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

Работа с файлами разделяется на 3 этапа:

  1. Открытие файла.
  2. Манипуляции с данными.
  3. Закрытие файла.

I . Открытие файла

Для того чтобы открыть файл в среде PHP используется функция fopen() . Обязательными параметрами этой функции является имя файла и режим файла.

$fp = fopen("counter.txt", "r");

Согласно документации PHP выделяют следующие виды режимов файлов:

  1. r – открытие файла только для чтения.
  2. r+ - открытие файла одновременно на чтение и запись.
  3. w – создание нового пустого файла. Если на момент вызова уже существует такой файл, то он уничтожается.
  4. w+ - аналогичен r+, только если на момент вызова фай такой существует, его содержимое удаляется.
  5. a – открывает существующий файл в режиме записи, при этом указатель сдвигается на последний байт файла (на конец файла).
  6. a+ - открывает файл в режиме чтения и записи при этом указатель сдвигается на последний байт файла (на конец файла). Содержимое файла не удаляется.

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

Для демонстрации рассмотрим следующий сценарий:

//Открывает файл в разных режимах
$fp = fopen("counter.txt", "r"); // Бинарный режим
$fp = fopen("counter.txt", "rt"); // Текстовый режим
$fp = fopen("http://www.yandex.ru", "r");// Открывает HTTP соединение на чтение
$fp = fopen("ftp://user:[email protected]", "w"); //Открываем FTP соединение с указанием логина и пароля
?>

II . Манипуляции с данными файла

Записывать данные в файл при помощи PHP можно при помощи функции fwrite() . Это функция принимает 2 обязательных параметра и 1 необязательный. В качестве обязательных параметров выступает дескриптор файла и режим файла:

$fp = fopen("counter.txt", "a"); // Открываем файл в режиме записи
$mytext = "Это строку необходимо нам записать\r\n"; // Исходная строка
$test = fwrite($fp, $mytext); // Запись в файл
if ($test) echo "Данные в файл успешно занесены.";
else echo "Ошибка при записи в файл.";
fclose($fp); //Закрытие файла
?>

Для построчного считывания файла используют функцию fgets() . Функция принимает 2 обязательных параметра:


if ($fp)
{
while (!feof($fp))
{
$mytext = fgets($fp, 999);
echo $mytext."
";
}
}

fclose($fp);
?>

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

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

echoreadfile("counter.txt");
?>

Также можно использовать функцию fpassthru() которая принимает 1 обязательный параметр. Перед использованием этой функции необходимо открыть файл в режиме чтения. По окончанию считывания файла функция автоматически закрывает файл(при этом дескриптор файла становиться недействительным).

$fp = fopen("counter.txt", "r"); // Открываем файл в режиме чтения
if ($fp) echo fpassthru($fp);
elseecho "Ошибка при открытии файла";
?>

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

Примечание: Не следует применять функцию file() к двоичным файлам (binary-safe), т.к. она не является безопасной в плане считывания двоичных файлов, если при этом, где-то встретиться символ конца файла (EOF), то она не гарантирует вам чтение всего двоичного файла.

$file_array = file("counter.txt"); // Считывание файла в массив $file_array
// Работа с данными массива
?>

Примечание: Работа с массивами подробно описывается , авторы: Мухаметшин Д.Ф., Симдянов И.В.

В конце статьи, вы найдете хороший «сборник рецептов» по массивам, который дает решение многих проблем, с которыми ежедневно встречается веб-программист.

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

$fp = fopen("counter.txt", "r"); // Открываем файл в режиме чтения
if ($fp)
{
while(!feof($fp))
{
$char = fgetc($fp);
if ($char == "с") $i = $i + 1;// Находим символ «с»
}
echo "Количество букв "c" в файле: ". $i;
}
else echo "Ошибка при открытии файла";
?>

III . Закрытие файла

Закрытие файла происходить с помощью функции fclose() , которая принимает 1 обязательный параметр.

$fp = fopen("counter.txt", "r");
if ($fp)
{
echo "Файл открыт";
fclose($fp); // Закрытие файла
}
?>

Сборник рецептов

1) Нам необходимо проверить существует ли тот или иной файл. Для этого мы воспользуемся функцией file_exists() .

myfile("counter.txt"); // Используем функцию myfile, передав в качестве аргумента имя файла

function myfile($name) //Создаем функцию для проверки существования файла
{
if (file_exists($name)) echo "Файл существует";

}
?>

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

2) Определяем размер файла с помощью функции filesize ()

myfile("counter.txt");

function myfile($name) //Создаем функцию для проверки существования файла и определения размера файла
{
if (file_exists($name)) echo "Размер файла: ".filesize($name)." байт";
else echo "Файл не существует";
}
?>

3) Создание временного файла с помощью функции tmpfile ()

$myfile = tmpfile();
fwrite($myfile, "Эта строка записывается во временный файл."); // Записываем во временный файл
fseek($myfile, 0); // Устанавливаем указатель файла
echo fread($myfile, 1024); // выводим содержимое файла
?>

4) Вам необходимо определить количество строк в файле. Для этого используем функцию count ()

$fp = file("counter.txt");
echo "Количество строк в файле: ".count($fp);
?>

5) Нам необходимо использовать механизм блокировки файла

$fp = fopen("counter.txt", "a");
flock($fp, LOCK_EX); // Блокирование файла для записи
fwrite($fp, "Строка для записи");
flock($fp, LOCK_UN); // Снятие блокировки
fclose($fp);
?>

6) Нам необходимо удалить определенную строку из файла

$num_stroka = 5; //Удалим 5 строку из файла
$file = file("counter.txt"); // Считываем весь файл в массив

for($i = 0; $i < sizeof($file); $i++)
if($i == $num_stroka) unset($file[$i]);

$fp = fopen("counter.txt", "w");
fputs($fp, implode("", $file));
fclose($fp);
?>

7) Определение типа файла. Используем функцию

А сейчас будет достаточно большой, но не сложный урок о работе с файлами в php. Для начала, для чего нужны файлы? Ведь можно все хранить в базе данных MySQL или PostgreSQL или любой другой. Но иногда бывают такие задачи, когда использование БД, со всеми обработками и заботой о безопасности соединения, не целесообразно. Например нужно сделать обычный счетчик, а до этого в проекте у нас БД не использовалась. Так что нам, ради одного малюсенького счетчика заводить базу данных и хранить в ней всего пару строк? тут гораздо проще воспользоваться файлами. К тому же, иногда на хостинге вообще нет поддержки баз данных, тогда файлы вообще остаются единственным выходом.

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

Создаем файл

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

Сама функция fopen принимает два параметра, оба они обязательны. Во-первых, мы должны указать имя файла, который хотим открыть. Во-вторых, передать параметр, который объясняет функции, что мы планируем делать с этим файлом (например, чтение из файла, запись и так далее).

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

$ourFileName = "testFile.txt"; $ourFileHandle = fopen($ourFileName, "w") or die("can"t open file"); fclose($ourFileHandle);

Первая строчка $ourFileName = testFile.txt создает , в которой мы будем хранить имя файла.
Вторая строчка $ourFileHandle = fopen($ourFileName, ‘w’) or die(«can’t open file») соответственно создает или открывает уже существующий файл на запись. Или же возвращает сообщение, что не может открыть файл.
Третья строчка fclose($ourFileHandle) закрывает файл. На самом деле все просто.

Параметры открытия файла в php

  • Первый параметр ‘r’ (read) — открывает файл только на чтение, записывать в него будет нельзя.
  • Второй параметр ‘w’ (write) — открывает для записи. При этом всегда запись будет идти с начала файла. Если там уже есть какая то информация — то она будет перезаписана.
  • Третий параметр ‘a’ (append) — открывает файл на запись, но при этом будет дописывать в конец файла, в отличие от w.

Расширенные параметры:

  • Параметр ‘r+’ — открывает и на чтение и на запись. Указатель будет в начале файла.
  • Параметр ‘w+’ — открывает и на чтение и на запись, НО удаляет всю информацию, которая была в файле!!!
  • араметр ‘a+’ — открывает на чтение и запись, но указатель будет в конце файла.

Естественно, что функции можно передать только один из этих параметров, а не несколько. Их нужно подставлять вместо ‘X’:

Fopen($ourFileName, "X")

Запись в файл

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

$myFile = "testFile.txt"; $fh = fopen($myFile, "w") or die("can"t open file"); $stringData = "Первая строчка\n"; fwrite($fh, $stringData); $stringData = "Вторая строчка\n"; fwrite($fh, $stringData); fclose($fh);

Создали файл testFile.txt, указатель на него хранится в переменной $fn. Записали в него строчку «Первая строчка» (в конце применили символ конца строки \n), а затем и «Вторая строчка». После чего закрыли файл.

ВНИМАНИЕ! Никогда не забывайте закрывать ваши файлы! Иначе в случае аварийного завершения выполнения скрипта — данные в файлах не сохранятся! Всегда после работы используйте fclose!!!

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

Записать записали, теперь давайте прочитаем! Это тоже не так сложно. Используем функцию fread. На вход ей подаем указатель на файл и количество байт, которое хотим прочитать. Например, один символ равен одному байту (зависит от кодировки), мы хотим прочитать 5 символов: $theData = fread($fh, 5).
Но если нужно получить всю информацию, которая есть в файле, то тут нам понадобится функция filesize, которая возвращает количество байт в файле, следовательно, если результат функции filesize передать в fread, то мы получим полностью всю информацию из файла:

$myFile = "testFile.txt"; $fh = fopen($myFile, "r"); $theData = fread($fh, filesize($myFile)); fclose($fh); echo $theData;

Надеюсь понятно объяснил.
Иногда же полезно читать файл построчно, а не по количеству байт. Для этого вместо fread нужно просто использовать fgets:

$myFile = "testFile.txt"; $fh = fopen($myFile, "r"); $theData = fgets($fh); fclose($fh); echo $theData;

В результате получим первую строчку из файла testFile.txt. Соответственно, чтобы пройтись по всем строчкам нужно использовать :

\n"; ?>

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



Рекомендуем почитать

Наверх