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

Теория и список задач

<?php
 error_reporting(E_ALL);
 ini_set ('display_erorrs','on');
?>
если в папке выше
<?php
 echo file_get_contents('../dir/test.txt')
?>
можно поставить папку ddd
<?php
  echo file_get_contents('ddd/dir/../test.txt')
?>
выйти наружу и зайти в папк. абсолютный путь. Это путь относительно корня.

суперглобальнй массив показывает путь к

<?php
   echo file_get_contents($_SERVER ['DOCUMENT_ROOT'], '/folder/test')
  echo $_SERVER ['DOCUMENT_ROOT']
?>

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

<?php
echo $_SERVER ['DOCUMENT_ROOT']
  echo _FILE_; // она выводит путь к файлу
  echo _DIR_;
?>
Создайте файл test.txt и запишите в него текст 'test'. Пусть изначально файла с таким именем не существует.
Создаём файл в корневом каталоге с именем test.txt и напишем строчку "test". Пишем скрипт ниже и запускаем в консоле или браузере, выведится содерживмое файла "test".
 
 <?php 
echo file_get_contents('test.txt');
?>
Создайте файл new.txt с пустым текстом. Пусть изначально файла с таким именем не существует.
 
 <?php 
 file_put_contents("new.txt","!");
?>
Дан массив с именами файлов ['1.txt', '2.txt', '3.txt']. Переберите его циклом и создайте файлы с такими именами и пустым текстом.
 
 <?php 
$a = ['1.txt','2.txt','3.txt'];
 for ($i=0;$i<3;$i++) 
 {
  file_put_contents($a[$i],$i  );
 }
?>
Записываем данные массива в переменную и модифицируем и обратно
 
 <?php 
$t = file_get_contents('1.txt');
 echo file_put_contents("1.txt",$t."!");
?>
Пусть в корне вашего сайта лежит файл test.txt, в котором записано некоторое число. Откройте этот файл, возведите число в квадрат и запишите обратно в файл.
 
 <?php 
$t = file_get_contents('test.txt');
echo $t ,"<BR>";
$b=pow($t,2);
echo "<BR>",$b,"<BR>";
 file_put_contents("test.txt",$b);
?>
Пусть в корне вашего сайта лежит файл count.txt. Изначально в нем записано число 0. Сделайте так, чтобы при обновлении страницы наш скрипт каждый раз увеличивал это число на 1. То есть у нас получится счетчик обновления страницы в виде файла.
 
 <?php 
$t = file_get_contents('count.txt');
echo $t+1;
file_put_contents("count.txt",$t=$t+1);
?>
Пусть в корне вашего сайта лежат файлы 1.txt, 2.txt и 3.txt. Вручную сделайте массив с именами этих файлов. Переберите его циклом, прочитайте содержимое каждого из файлов, слейте его в одну строку и запишите в новый файл new.txt. Изначально этого файла не должно быть.
 
 <?php 

$t="";
$a = ['1.txt','2.txt','3.txt'];
for ($i=0;$i<3;$i++) 
  {
   $t.= file_get_contents($a[$i]);
   file_put_contents("new.txt",$t);
  }
?>
Пусть в корне вашего сайта лежат файлы 1.txt, 2.txt и 3.txt. Вручную сделайте массив с именами этих файлов. Переберите его циклом и в текст каждого файла в конец запишите восклицательный знак.
 
 <?php 
$t="";
$a = ['1.txt','2.txt','3.txt'];
for ($i=0;$i<3;$i++) 
  {
   $t = file_get_contents($a[$i]);
   file_put_contents($a[$i],$t."!");
  }
?>
Перемеинование файла в корне вашего сайта
 
 <?php 
rename ('1.txt','q.txt');
?>
Пусть в корне вашего сайта лежит файл test.txt. Пусть также в корне вашего сайта лежит папка dir. Переместите файл в эту папку.
 
 <?php 
rename ('test.txt','dir/q.txt');
?>
Пусть в корне вашего сайта лежит папка dir1, а в ней файл test.txt. Пусть также в корне вашего сайта лежит папка dir2. Переместите файл в эту папку.
 
 <?php 
rename ('dir1/test.txt','dir2/test.txt');
?>
Пусть в корне вашего сайта лежит файл test.txt. Скопируйте его в файл copy.txt.
 
 <?php 
copy ('count.txt', 's.txt');
?>
Пусть в корне вашего сайта лежит файл test.txt. Пусть также в корне вашего сайта лежит папка dir. Скопируйте файл test.txt в папку dir. Копию файла также назовите test.txt.
 
 <?php 
copy ('s.txt', 'dir1/s.txt');
?>
Пусть в корне вашего сайта лежит файл count.txt Удалите его.
 
 <?php 
unlink('count.txt');
?>
Пусть в корне вашего сайта лежат файлы 1.txt, 2.txt и 3.txt. Вручную сделайте массив с именами этих файлов. Переберите его циклом и удалите все эти файлы.
 
 <?php 
$a = ['1.txt','2.txt','3.txt'];
for ($i=0;$i<3;$i++) 
  {
   unlink($a[$i]);
 
  }
?>
Проверьте, лежит ли в корне вашего сайта файл test.txt.
 
 <?php 
var_dump(file_exists('test.txt'))  ;
?>
Проверьте, лежит ли в корне вашего сайта файл test.txt. Если да - удалите его, если нет - создайте.
 

 <?php

if (file_exists('test.txt')) {
 unlink('test.txt');
}
else {
 file_put_contents('test.txt'," ");
}
?>

Дан массив с именами файлов ['1.txt', '2.txt', '3.txt']. Переберите его циклом и проверьте каждый файл на существование. Выведите на экран имя каждого файла и рядом текст "существует" или "не существует".

 

 <?php
$a = ['1.txt','2.txt','3.txt'];
for ($i=0;$i<3;$i++) 
  {
if (file_exists($a[$i])) {
 echo $a[$i]," - exist";
}
else {
  echo $a[$i]," - no exist";
}
  }
?>
<?php
 error_reporting(E_ALL);
 ini_set ('display_erorrs','on');
?>
Определение размера файла
Пусть в корне вашего сайта лежит файл test.txt. Узнайте его размер, выведите на экран.
Модифицируйте предыдущую задачу так, чтобы размер файла выводился в килобайтах.
Положите в корень вашего сайта какую-нибудь картинку размером более мегабайта. Узнайте размер этого файла и переведите его в мегабайты.
Положите в корень вашего сайта какой-нибудь фильм размером более гигабайта. Узнайте размер этого файла и переведите его в гигабайты.
var_dump(filesize('1.avi')/1024/1024/1024);

Работа с переносом строки и PHP_EOL
Дан файл test.txt. Прочитайте его текст, получите массив его строк.

<?php
$text = file_get_contents ('test.txt');
$arr =  explode ("\n", $text);
  var_dump ($arr);
?>
Дан файл test.txt. В нем на каждой строке написано какое-то число. Найдите сумму этих чисел и запишите ее в файл sum.txt.
<?php
$c=0;
$text = file_get_contents ('test.txt');
$arr =  explode ("\n", $text);
 // var_dump ($arr);
// echo $arr [1];
 // var_dump ($arr);
 for ($i=0;$i<8;$i++) {
  $c =$c+ $arr[$i];
 }
 
file_put_contents ('test1.txt',$c);
?>
Дан массив. Запишите элементы этого массива в файл test.txt так, чтобы каждый элемент начинался с новой строки.
\r\n
<?php
$c='';
$arr=["a", "b","c"];  
 for ($i=0;$i<3;$i++) {
 $c=$c.$arr[$i]."\n";
 ?>

}
file_put_contents ('test1.txt', $c);

<?php
$arr = file ('test1.txt');
echo $arr[0];
echo $arr[1];
echo $arr[2];
echo $arr[3];
//var_dump(file ('test1.txt'));
?>
Дан файл test.txt. В нем на каждой строке написано какое-то число. С помощью функции file найдите сумму этих чисел и выведете ее на экран.
<?php

$sum=0;
$arr = file ('test1.txt',FILE_IGNORE_NEW_LINES);
for ($i=0;$i<4;$i++) {
    $sum = $arr[$i]+$sum;
 //echo $arr[$i]."<BR>";
}
echo $sum;
?>
Дан файл test.txt. В нем на каждой строке написано какое-то число. С помощью функции file найдите сумму этих чисел и запишите эту сумму обратно в конец файла, с новой строки.
<?php
$sum=0;
$e='';
$arr = file ('test1.txt',FILE_IGNORE_NEW_LINES);
for ($i=0;$i<8;$i++) {
     $sum = $arr[$i]+$sum;
    $e=$e.$arr[$i]."\n";
 //echo $arr[$i]."<BR>";
}
file_put_contents ('test2.txt', $e."\n".$sum); 
 ?>
Создайте в корне вашего сайта папку с названием dir.
<?php
mkdir( dir);
?>
Дан массив со строками. Создайте в корне вашего сайта папки, названиями которых служат элементы этого массива
<?php
$arr = file ('s.txt',FILE_IGNORE_NEW_LINES);
for ($i=0;$i<8;$i++) {
mkdir( $arr[$i] );
}
?>
Создайте в корне вашего сайта папку с названием test. Затем создайте в этой папке 3 файла: 1.txt, 2.txt, 3.txt.
(int), (integer) — приведение к integer.
(bool), (boolean) — приведение к boolean.
(float), (double), (real) — приведение к float.
(string) — приведение к string.
(array) — приведение к array.
(object) — приведение к object.
(unset) — приведение к NULL.
<?php
  $i=1;
    $c=  $i.'text.txt';
    echo $c,"<BR>";
   echo gettype ($c);
   $b='1text.txt';
   echo gettype ($c);
  //echo $b,"<BR>";
  if ($c===$b) {
    echo "true","<BR>";
    echo $c,"<BR>";
    echo $b,"<BR>";
  }
  else {
    echo "else";
  }
 
 
  mkdir('test');
  for ($i=0;$i<3;$i++) {
  $c=  (string)($i+1).'test.txt';
  file_put_contents ($c,'');
  rename ($c,'test/'.$c);
}
?>
Удалите папку с названием dir.
rmdir ('test'); // если директория непустая не удалится
Пусть в корне вашего сайта лежит папка old. Переименуйте ее на new.
rename ('old','new');
Пусть в корне вашего сайта лежит папка dir, а в ней какие-то текстовые файлы. Выведите на экран столбец имен этих файлов.
<?php
$a = scandir('dir'); 
$a = array_diff(scandir('dir'),['..','.']);
var_dump($a);
?>
Пусть в корне вашего сайта лежит папка dir, а в ней какие-то текстовые файлы. Переберите эти файлы циклом, откройте каждый из них и запишите в конец восклицательный знак.
<?php
$t = array_diff(scandir('dir'),['..','.']);
  for ($i=2;$i<=5;$i++) 
  {
    $e[$i] = preg_replace("/.*?\./", '', $t[$i]);
     if  ($e[$i] == "txt") {  
       //echo "$t: ".$t[$i]." ".$i."<BR>";
       $s = file_get_contents('dir/'.$t[$i]);
      file_put_contents('dir/'.$t[$i],$s."!");
      
    }
     

 }

?>
Пусть в корне вашего сайта лежит папка dir, а в ней какие-то текстовые файлы. Переберите эти файлы циклом и выведите их тексты в браузер.
<?php
$t = array_diff(scandir('dir'),['..','.']);
  for ($i=2;$i<=5;$i++) 
  {
    $e[$i] = preg_replace("/.*?\./", '', $t[$i]);
     if  ($e[$i] == "txt") {  
       //echo "$t: ".$t[$i]." ".$i."<BR>";
       $s = file_get_contents('dir/'.$t[$i]);
      echo  $t[$i].": ".$s."<BR>";
      
    }
    } 
?>

Пусть дан путь к файлу. Проверьте, файл это или папка.

<?php
$files = array_diff(scandir ('dir'),['..','.']);
// var_dump($files);
foreach ($files as $file) {
echo "<BR>",$file,"<BR>";
var_dump (is_file ('dir/'.$file));
var_dump (is_dir ('dir/'.$file));
}
?>

Пусть в корне вашего сайта лежит папка dir, а в ней какие-то файлы и подпапки. Выведите на экран столбец имен подпапок из папки dir.

<?php
$files = array_diff(scandir ('dir'),['..','.']);
// var_dump($files);
foreach ($files as $file) {
if (is_dir ('dir/'.$file)) {
  echo $file,"<BR>";
}
}
?>
Пусть в корне вашего сайта лежит папка dir, а в ней какие-то файлы и подпапки. Выведите на экран столбец имен файлов из папки dir.
<?php
$files = array_diff(scandir ('dir'),['..','.']);
// var_dump($files);
foreach ($files as $file) {
if (is_file ('dir/'.$file)) {
  echo $file,"<BR>";
}
}
?>
Пусть в корне вашего сайта лежит папка dir, а в ней какие-то текстовые файлы и подпапки. В подпапках в свою очередь также могут быть текстовые файлы и подпапки. Рекурсивно пройдитесь по всем вложенным папкам и выведите в браузер пути ко всем текстовым файлам.

/*

<?php
getFiles ('dir');
function getFiles ($dir) {
$files = array_diff (scandir($dir),['..','.']);
foreach ($files as $file) {
  $path =$dir.'/'.$file;
  if (is_dir($path)) {
    getFiles($path);
  }
  else {
    var_dump ($path);
  }
}
}
?>

*/
/*

<?php
var_dump (getFiles ('dir'));
function getFiles ($dir) {
  $files = array_diff (scandir ($dir),['..','.']);
  $result=[];

  foreach ($files as $file) {
    $path=$dir.'/'.$file;
    if (is_dir($path)) {
      $result=array_merge($result,getFiles($path));
    } else {
      $result[]=$path;
    }
 }
  return $result;
}
 ?>

*/

Пусть в корне вашего сайта лежит папка dir с текстовыми файлами и подпапками. Рекурсивно пройдитесь по всем вложенным папкам и в конец каждого текстового файла запишите восклицательный знак.

<?php
<?php
 getFiles ('dir');
function getFiles ($dir) {
$files = array_diff (scandir($dir),['..','.']);
foreach ($files as $file) {
  $path =$dir.'/'.$file;
  //echo '<BR>',$path,'<BR>';
  if (is_dir($path)) {
      getFiles($path);
  }
  else   {
    // var_dump ($path);
      file_put_contents($path,"!");
  }
 }
 }

?>
Пусть в корне вашего сайта лежит папка dir с текстовыми файлами и подпапками. Удалите папку dir вместе с ее содержимым.
<?php
 removeDir ('dir');
function removeDir ($dir) {
$files = array_diff (scandir($dir),['..','.']);
foreach ($files as $file) {
  $path =$dir.'/'.$file;
  //echo '<BR>',$path,'<BR>';
  if (is_dir($path)) {
      removeDir($path);
  }
  else   {
      unlink ($path);
  }
 }
 rmdir($dir);
 }

?>
Функция glob PHP

?>

Функция glob PHP

var_dump (glob('dir/*.txt')); // неограниченное количество символов
var_dump (glob('dir/?.txt')); // только 1 символ
var_dump (glob('dir/[12].txt')); // 1 или 2
rmdir($dir);
}

?>