WEB start

Компьютеры. Интернет. Профессиональное обучение. 055-966-10-17

hit 
counter

PHP программирование

Наши преимущества

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


Регистрация на сайте

PHP работа с файлами

Работа с файлами PHP

Включение внешних файлов

В каждый PHP-документ можно включить дополнительный файл с помощью инструкций:

  • include (имя файла);
  • include_once (имя файла) 
  • require (имя файла);
  • require_once (имя файла);

Инструкции include выдают сообщение типа warning, если не находят файл, инструкции require - фатальную ошибку.

Инструкции include_once и require_once не позволяют включать файл дважды (перед включением файла инструкция проверяет, включался ли он ранее.

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

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

Пример:

Файл1

<?php echo ("<br>"); echo ("Php code from file: " . __FILE__); echo ("<br>"); echo ('<br>include ("prog2.php") - PHP code'); echo ("<br>"); include ("prog2.php"); echo ("<br>"); echo ('<br>include ("prog3.php") - TEXT'); echo ("<br>"); include ("prog3.php"); ?>

Файл2

<?php echo ("<br>"); echo ("Php code from file: " . __FILE__); echo ("<br>"); ?>

Файл3

echo ("<br>"); echo ("Php code from file: " . __FILE__); echo ("<br>");


Выполняем PHP программу из первого файла. Она включает содержимое 2-х дополнительных файлов. Причём при включении файла 2 выполняется PHP программа, которая в нём находмися. А при включении файла 3 его содержимое будет вставлено как обычный текст.

Результат в окне браузера:

<br>Php code from file: F:\Lessons\myTutorials\PHP\PHP_18-1Files\prog1.php<br><br>include ("prog2.php") - PHP code<br><br>Php code from file: F:\Lessons\myTutorials\PHP\PHP_18-1Files\prog2.php<br><br><br>include ("prog3.php") - TEXT<br>echo ("<br>"); echo ("Php code from file: " . __FILE__); echo ("<br>");


Файловый ввод-вывод

При работе с файлами нужно выделить несколько этапов:

  • открыть файл
  • прочесть данные из файла
  • обработать данные
  • записать данные в файл
  • закрыть файл.

Открыть файл

Для работы с файлом его нужно открыть. Команда fopen открывает файл (или url ) и возвращает в программу указатель на файл (file handle).

Если открыть файл не удалось, будет сгенерирована ошибка уровня E_WARNING.

fopen использует два аргумента: имя файла и режим его использования (mode).

Список возможных режимов (mode) для fopen()

mode Описание
'r' Открывает файл только для чтения; помещает указатель в начало файла.
'r+' Открывает файл для чтения и записи; помещает указатель в начало файла.
'w' Открывает файл только для записи; помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует - пробует его создать.
'w+' Открывает файл для чтения и записи; помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует - пытается его создать.
'a' Открывает файл только для записи; помещает указатель в конец файла. Если файл не существует - пытается его создать. В данном режиме функция fseek() не применима, записи всегда добавляются.
'a+' Открывает файл для чтения и записи; помещает указатель в конец файла. Если файл не существует - пытается его создать. В данном режиме функция fseek() влияет только на место чтения, записи всегда добавляются.
'x' Создаёт и открывает только для записи; помещает указатель в начало файла. Если файл уже существует, вызов fopen() закончится неудачей, вернёт FALSE и выдаст ошибку уровня E_WARNING. Если файл не существует, попытается его создать. Это эквивалентно указанию флагов O_EXCL|O_CREAT для внутреннего системного вызова open(2).
'x+' Создаёт и открывает для чтения и записи; в остальном имеет то же поведение что и'x'.
'c' Открывает файл только для записи. Если файл не существует, то он создается. Если же файл существует, то он не обрезается (в отличие от 'w'), и вызов к этой функции не вызывает ошибку (также как и в случае с 'x'). Указатель на файл будет установлен на начало файла. Это может быть полезно при желании заблокировать файл (см. flock()) перед изменением, так как использование 'w' может обрезать файл еще до того как была получена блокировка (если вы желаете обрезать файл, можно использовать функцию ftruncate() после запроса на блокировку).
'c+' Открывает файл для чтения и записи; в остальном имеет то же поведение, что и 'c'.
'e' Установить флаг close-on-exec (закрыть при запуске) на открытый файловый дескриптор. Доступно только в PHP скомпилированном на системах поддерживающихз POSIX.1-2008.


fclose(file_handle) - закрывает открытый файл.

flock(file_handle, параматр) - позволяет заблокировать или разблокировать файл (параметр принимает значение LOCK_EX или LOCK_UN).

Проверка на наличие файла

Функция file_exists(filename) проверяет наличие указанного файла или каталога.

Возвращает TRUE, если файл или каталог, указанный параметром filename, существует, иначе возвращает FALSE.

Например:

<?php echo ("Php code from file: " . __FILE__); echo ("<br>"); $myFileName1 = "file1.txt"; $myFileName2 = "file2.txt"; if (file_exists($myFileName1)) { echo ("The file $myFileName1 exists"); $fHandle1 = fopen($myFileName1,"r"); var_dump($fHandle1); } else { echo ("The file $myFileName1 does not exist"); } if (file_exists($myFileName2)) { echo ("The file $myFileName2 exists"); $fHandle2 = fopen($myFileName2,"r"); var_dump($fHandle2); } else { echo ("The file $myFileName2 does not exist"); } ?>

Функция is_readable() определяет существование файла и доступен ли он для чтения.

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

Функция is_writable() определяет существование файла и доступен ли он для записи.

Возвращает TRUE, если файл существует и доступен для записи.

Например, если у file1.txt стоит атрибут READONLY , то результат работы этой программы:

<?php $filename1 = 'file1.txt'; $filename2 = 'file2.txt'; if (is_writable($filename1)) { echo ("<br>Файл <strong>$filename1</strong> доступен для записи"); } else { echo ("<br>Файл <strong>$filename1</strong> недоступен для записи");} if (is_writable($filename2)) { echo ("<br>Файл <strong>$filename2</strong> доступен для записи"); } else { echo ("<br>Файл <strong>$filename2 </strong>недоступен для записи");} ?>

Будет:

Файл file1.txt доступен для записи

Файл file2.txt недоступен для записи

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

функции, которые получают информацию о файле.

Путь к файлу

На разных платформах есть разные способы обработки пути к файлу. Например, системы UNIX и Linux используют слэши  (/) в качестве разделителей в пути к файлу следующим образом:

/www/tmp/test.txt

Windows используют обратные наклонные линии (\) как разделители:

\www\tmp\test.txt

PHP автоматически преобразует обратную косую черту в слэши, поэтому можно безопасно использовать путь к файлу с косой чертой в качестве разделителей.

Получить имя файла из пути

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

$path = '/wwww/include/index.php'; $filename = basename($path); echo $filename;
Получить расширение файла
$fn = './test.txt'; $ext = pathinfo($fn, PATHINFO_EXTENSION); echo $ext; // txt

Функция pathinfo принимает параметры: PATHINFO_DIRNAME | PATHINFO_BASENAME | PATHINFO_EXTENSION | PATHINFO_FILENAME .

Получить размер файла

<?php $filename = 'files/file1.txt'; var_dump (filesize($filename)); var_dump (filesize("test22")); ?>

Для этого примера: первый файл есть на диске, второго нет.

Возвращает размер файла в байтах для первого файла и FALSE (и генерирует ошибку уровня E_WARNING) для вторго файла (такого файла на диске нет) - в случае возникновения ошибки.

Атрибуты времени файла

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

fileatime() возвращает время последнего обращения к файлу

filectime() возвращает  время последнего изменения ( last changed) файлаа

filemtime() возвращает время последнего изменения свойств файла (last modified) файла.

Все вышеприведенные функции возвращают временную метку (timestamp) UNIX, которая представляет собой целочисленное значение, которое указывает число секунд между эпохой UNIX (полночь, январь-01-1970) и заданным временем и датой. Чтобы получить информацию о дате и времени из временной метки UNIX, используется функция getdate ().

Например:

<?php $fn = 'files/file1.txt'; // get last modified time var_dump (filemtime($fn)); // get date var_dump (date('d-M-Y',filemtime($fn))); ?>
Получить информацию о файле

stat() — Возвращает подробную информацию о файле

Результаты функций stat() и fstat()

Числовой Ассоциативный Описание
0 dev номер устройства
1 ino номер inode 
2 mode режим защиты inode
3 nlink количество ссылок
4 uid userid владельца 
5 gid groupid владельца 
6 rdev тип устройства, если устройство inode
7 size размер в байтах
8 atime время последнего доступа (временная метка Unix)
9 mtime время последней модификации (временная метка Unix)
10 ctime время последнего изменения inode (временная метка Unix)
11 blksize размер блока ввода-вывода файловой системы 
12 blocks количество используемых 512-байтных блоков 

Пример:

<?php $fPath = "files/file1.txt"; echo("File name: <h1>$fPath</h1>"); $fh = fopen($fPath,"r"); echo("<h1>fPath( File handle = $fh ) </h1> Argument - File handle"); var_dump (fstat($fh)); echo("<h1>stat( $fPath)</h1> Argument - filename"); var_dump (stat($fPath)); ?>


Файловая система - работа с файлами

Переименование файлов

rename()

<?php // File rename $oldFName = "oldFile.txt"; $newFName = "newFile.txt"; echo ("<h1>Rename $oldFName to $newFName</h1>"); if (file_exists($oldFName)){ echo ("<p>File $oldFName exists </p>"); if(!file_exists($newFName)){ if (rename($oldFName,$newFName)){ echo ("<p>File $oldFName , rename to $newFName --> Success! </p>"); } else{ echo ("<p style='color:red;'>File $oldFName , rename to $newFName --> Error!</p>"); } } else { echo ("<p style='color:red;'>File $newFName exists already </p>"); } } else { echo ("<p style='color:red;'>Original file - $oldFName does not exists</p> "); } ?>

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

copy()

$sourceFName = "srcFile1.txt"; $targetFName1 = "?copy1.txt"; // Incorrect file name $targetFName2 = "copy2.txt"; if (copy($sourceFName,$targetFName1)){ echo ("<br>File $sourceFName copy to $targetFName1 --> Success! "); } else{ echo ("<br><span style='color:red;'>File $sourceFName copy to $targetFName1 --> ERROR</span>"); } if (copy($sourceFName,$targetFName2)){ echo ("<br>File $sourceFName copy to $targetFName2 --> Success! "); } else{ echo ("<br><span style='color:red;'>File $sourceFName copy to $targetFName2 --> ERROR</span>"); }

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

unlink()

<?php // File delete $f1Name = "oldFile.txt"; $f2Name = "newFile.txt"; echo("<h1>Remove files</h1> $f1Name and $f2Name "); if (unlink($f1Name)){ echo ("<p>File $f1Name deleted --> Success! </p>"); } else{ echo ("<p style='color:red;'>File $f1Name not deleted --> Error! </p>"); } if (unlink($f2Name)){ echo ("<p>File $f2Name deleted --> Success! </p>"); } else{ echo ("<p style='color:red;'>File $f2Name not deleted --> Error! </p>"); } ?>

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

<?php // Create files $f1Name = "oldFile.txt"; $f2Name = "newFile.txt"; echo("<h1>Creating files</h1> $f1Name and $f2Name <br>"); if (!file_exists($f1Name)){ $fHandle1 = fopen($f1Name,"w"); } else { echo ("<p style='color:red;'>File $f1Name already existed --> Error! </p>"); } if (!file_exists($f2Name)){ $fHandle1 = fopen($f2Name,"w"); } else { echo ("<p style='color:red;'>File $f2Name already existed --> Error! </p>"); } ?>

Файловая система - работа с папками

Функции для работы с папками (folders):

mkdir() - создание папки. Аргументы: имя папки и режим доступа. UNIX - права доступа, восьмеричное число из трех цифр с нулем впереди. Первая цифра - право доступа для владельца, вторая - для группы, третья - для всех остальных. В системе Windows режим доступа игнорируется. В системе UNIX определены следующие права доступа:

0Нет доступа
1Доступ для запуска
2Доступ для записи
3Доступ для записи и запуска
4Доступ для чтения
5Доступ для чтения и запуска
6Доступ для чтения и записи
7Полный доступ

Например, право полного доступа для владельца, чтения и запуска для группы и запуска для всех остальных:

mkdir( "testdir", 0751 );

rmdir() - удаление папки. Аргумент: имя. Удалить можно лишь пустую папку при наличии права на это. При успешном выполнении функция возвращает true.

opendir() - открытие папки. Аргумент: имя папки. Возврвщает ссылку на папку. В случае возникновения ошибки функция возвращает false. Ошибка при открытии может быть вызвана тем, что папка не существует или программа не имеет права его читать.

readdir() - чтение папки. Аргумент: дескриптор каталога (resource), ранее открытый функцией opendir(). Если дескриптор каталога не указан, используется последний дескриптор открытый функцией opendir().. Возвращает строку, содержащую  имя следующего по порядку элемента каталога. Элементы возвращаются в том порядке, в котором они хранятся в файловой системе. По достижении конца каталога функция возвращает false.

scandir()  - выдаёт список папок и файлов внутри данной

is_dir() - проветить, существут ли папка с таким именем. Аргумент - путь к папке.

Примеры

создать паку

<?php // Directory create $dirName = "newTestFolder"; $accessCode = 0751; echo("<h1>Creating folder</h1> with name $dirName if it does not exist already<br>"); if (!is_dir($dirName)){ mkdir( $dirName, $accessCode ); echo ("<p>Folder $dirName created ! </p>"); } else { echo ("<p style='color:red;'>Folder $dirName already existed --> Error! </p>"); } ?>

прочесть содержимое папки - readdir()

<?php // Directory read $dirName = "newTestFolder"; echo("<h1>Read folder</h1>Folder <b>$dirName</b> contains:<br>"); if ($handle = opendir($dirName)) { while ($entry = readdir($handle)) { echo ("$entry<br>"); } closedir($handle); } ?>

прочесть содержимое папки - scandir()

<?php // Directory read $dirName = "newTestFolder"; echo("<h1>Read folder</h1>Folder <b>$dirName</b> contains:<br>"); // Sort in ascending order - this is default $a = scandir($dirName); // Sort in descending order $b = scandir($dirName,1); var_dump($a); var_dump($b); ?>



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

fread() - считывает содержимое файла в 

fgetc() - считывает одиночный символ из файла

fgets() - считывает одну строку из файла

file() - считывает содержимое всего файла в массив

fgetcsv() - считывает строку значений, разделенных запятыми

file_get_contents() - считывает весь файл в строку

readfile() - отображает содержимое всего файла без необходимости вызова функции fopen ().

fread - чтение файла в двоичном формате, в виде последовательности байт (binary safe mode). использует два параметра: указатель на файл (полученный от fopen ) и количество байт для считывания.

Например:

<?php $num = 100; $fName = "files/myfile.txt"; echo ("<h1>Read $num bytes from file $fName</h1>"); $f1 = fopen($fName,"r"); echo (fread ($f1, $num)); ?>

читает 100 байт из файла "myfile.txt" .

Функции для записи в файл:

fwrite() — запись в файл

fputcsv() — форматирует строку в виде CSV и записывает её в файл

file_put_contents() – пишет строку в файл без вызова фуекции fopen().

Например:

<?php $fName = "files/outFile1.txt"; $outTxt = "текст для записи в файл"; echo ("<h1>Write to file: $fName</h1>"); $myFile = fopen($fName, "w") or die("Невозможно открыть файл!"); $myFile.fwrite($myFile, $outTxt); fclose($myFile); ?>

Форматирование ввода-вывода

При операциях чтении-записи можно использовать спецификаторы формата (как и при работе со строками).

fprintf() — записывает отформатированную строку в файл (на file handle)

fscanf() — обрабатывает данные из файла в соответствии с форматом

Примеры

Читать полностью файл

<?php $fName = "files/myfile.txt"; $fEnd = filesize($fName); echo ("<h1>Read all from file $fName</h1>"); $f1 = fopen($fName,"r"); echo (fread ($f1, $fEnd)); ?>

Дозапись в файл

<?php // Дозапись в файл $fName = "files/outFile2.txt"; echo ("<h1>Append to file file $fName</h1>"); $f1 = fopen($fName,"a") or die ("Невозможно открыть файл!");; $f1.fwrite($f1,"Test to append\tTest to append\n"); fclose($f1); ?>

Читать файл построчно - 2 строки 

<?php // Прочесть 2 строки из фвйла - fgets()<br> $fName = "files/myfile2.txt"; echo ("<h1>Read line from file</h1> $fName"); $f1 = fopen($fName,"r") or die ("Невозможно открыть файл!");; echo ("<p>Первая строка, прочитанная из файла:</p>"); echo fgets($f1); echo ("<p>Вторая строка, прочитанная из файла:</p>"); echo fgets($f1); echo ("<hr>"); fclose($f1); ?>

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

<?php // Прочесть весь файл построчно - fgets() $fName = "files/myfile2.txt"; $i = 0; echo ("<h1>Read all lines from file</h1> $fName <hr>"); $f1 = fopen($fName,"r") or die ("Невозможно открыть файл!");; while(!feof($f1)){ echo ($i++ . " - " . fgets($f1) . "<br>"); } echo ("<hr>"); fclose($f1); ?>

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

<?php // Читать файл посимвольно - fgetc() $fName = "files/outFile2.txt"; $num = $_POST['num']; echo ("<h1>Read all lines from file</h1> $fName <hr>"); $f1 = fopen($fName,"r") or die ("Невозможно открыть файл!");; for($i=0; $i<=$num; $i++){ echo ($i++ . " - " . var_dump(fgetc($f1)) . "<br>"); } echo ("<hr>"); fclose($f1); ?>

fprintf() — писать отформатированную строку в файл

<?php $fName = "files/formatted1.txt"; $f1 = fopen($fName,"w") or die ("Невозможно открыть файл!");; fprintf($f1,"%.02lf\n", 1.035); fclose($f1); ?>



Загрузка содержимого файла в массив

file()

file — Читает содержимое файла и помещает его в массив (каждая строка - элемент массива)

file_get_contents()

Данная функция похожа на функцию file() с той лишь разницей, что file_get_contents() возвращает содержимое файла в строке, начиная с указанного смещения offset и до maxlen байт. В случае неудачи, file_get_contents() вернёт FALSE. Использование функции file_get_contents() наиболее предпочтительно в случае необходимости получить содержимое файла целиком.

Таким образом можно прочесть и WEB страничку:

$myWEB = $_POST['siteUrl']; echo ("<h1>Читаем сайт:</h1>" . $myWEB . "<hr>"); $homepage = file_get_contents($myWEB); print_r ($homepage);