Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:

Error. Page cannot be displayed. Please contact your service provider for more details.


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

Поиск:
Ниже рассмотрен следующий ряд вопросов, которые зачастую возникают у новичков.

Как создать новый файл и записать в него что-то?
Как прочитать содержимое текстового файла целиком?
Как прочитать содержимое текстового файла построчно?
Как добавить информацию в начало файла?
Как удалить строчку из файла?
Как послать файл пользователю?
Как получить массив файлов в каталоге с определенным расширением?
Как вывести случайную строку из файла?
Как записать файл в определенной кодировке?
Как скопировать / переименовать / удалить файл или директорию?
Что такое права доступа ( CHMOD ) и как их изменить?
Какую можно получить информацию о файле?
Как организовать файл INI и его парсинг (чтение)?
Как получить список всех каталогов и подкаталогов (сканинг папок) ?
Как узнать сколько места занимает на диске каталог?
Как отредактировать определенную строчку в файле?
Как "обнулить" (очистить) содержимое файла?
Как посчитать количество файлов в папке и подпапках?
Как проверить на существование удаленный файл?
Как узнать размер удаленного файла?

Как создать новый файл и записать в него что-то?

Код
<?php

$text = "Some Text";

if( file_exists( "file.txt" ) ) // Проверяем файл на существование
 {
  if( !is_writeable( "file.txt" ) )    // Проверяем файл на НЕ возможность записи
   {  die( "Вы не можете записать в этот файл" );  }
      // Завершаем выполнение скрипты, выводом сообщения об ошибке
 }
else  // Если файл не существует и нам все-таки надо его создать.
 {
  if( !touch( "file.txt" ) )
   {  die( "Нельзя создать файл" );  }
      // Завершаем выполнение скрипты, выводом сообщения об ошибке

  $f = fopen( "file.txt" , "w" );
  fwrite( $f , $text ); // Пишем в файл содержимое строки $text;
  flose( $f );
 }

?>


Как прочитать содержимое текстового файла целиком?

1 способ.
Код
<?php

$f = fopen( "file.txt" , "r" );
$text = fread( $f , filesize( $f ) );
close($f);
print $text // Выведет содержимое файла.

?>


2 способ.
Код
<?php

$text = file_get_contents( "file.txt" );
print $text // Выведет содержимое файла.

?>


3 способ.
Код
<?php

readfile( "file.txt" );
 // Выведет содержимое файла сразу в буфер.

?>


Как прочитать содержимое текстового файла построчно?

Код
<?php

$f_arr = file( "file.txt" );
// Каждая строка файла - будет элементом массива $f_arr.
// Номерация начинается с нуля.

?>


Как добавить информацию в начало файла?

Код
<?php

$f = fopen( "file.txt" , "r" );
$text = fread( $f , filesize( $f ) );
close($f);

$text_towr = "Some Text to write in file";

$f = fopen( "file.txt" , "w" );
fwrite( $f , $text_towr . $text );
close($f);

?>


Как удалить строчку из файла?

Код
<?php

$f_arr = file( "file.txt" );

$needle = 2; // Какую строчку нужн удалить.
             // Не забывайте, нумерация начинается с нуля.
array_splice( $f_arr , $needle , 1 );

$f = fopen( "file.txt" , "w" );

for( $i = 0; $i < count( $f_arr ); $i++ )
 {  fwrite( $f , $f_arr[$i] . "\n" );  }

close($f);

?>


Для удаления первой или последней строчки воспользуйтесь функциями: array_shift(); и array_push();, вместо array_splice(); .

Как послать файл пользователю?

Код
<?php

$file_server_path = "123.zip";
$download_size = filesize( $file_server_path );

header("Content-type: application/x-download");
header("Content-Disposition: attachment; filename=" . $file_server_path  . ";");
header("Accept-Ranges: bytes");
header("Content-Length: " . $download_size );
readfile( $file_server_path );

?>


Как получить массив файлов в каталоге с определенным расширением?

Код

<?php

//Допустимые расширения файлов:
$CONF["file_types"] ='mp3|wav|cxx';

//Открываем текущую директорию:
$dh = opendir('.');

//Читаем директорию:
while($fname = readdir($dh)){

    //Находим расширените файла :
         $file_array = explode('.', $fname);
         $num = count($file_array);
         $fileres = $file_array[($num - 1)];

   //Доступные расширения:
         $file_types = explode("|", $CONF['file_types']);

   //Если присутсвует файл с таким расширением, то вносим его в массив:
         if(in_array($fileres, $file_types)){

           $files[] = $fname;

         }

}

 //В итоге получаем массив $files имен файлов директории.

?>


Как вывести случайную строку из файла?

Обычно такой вопрос задаются те, кто не использует какой-нибудь Базы Данных, тем не менее нуждается в ее функциях...
Вывести случайною строку из файла, например случайный анекдот можно так:

Код
<?php

$arr = file( "file.txt" ); // Читаем файл построчно
print $arr[ rand( 0 , count( $arr ) - 1 ) ]; // Выводим строку со случайным образом.

?>


Функция rand(); получает два параметра: первый - 0, второй - количество элементов массива минус 1. Т.е. устанавливается диапазон выбора (минимум - максимум).

Как записать файл в определенной кодировке?

Код
<?php

$file = fopen("file.txt", "w");
$code = convert_cyr_string($code,"w","k") // Из win-1251 в koi-8
fwrite($file, $code);
fclose($file);

?>


Как скопировать / переименовать / удалить файл или директорию?

Код
<?php

unlink( "file.txt" ); // Удаление файла
rmdir( "folder/" ); // Удаление директории. Внимание, папка должна быть пустой
copy( "otkuda.txt" , "kuda.txt" ); // Копирование.
rename( "chto.txt" , "vo_chto.txt" ); // Переименование.

?>


Что такое права доступа ( CHMOD ) и как их изменить?

Права доступа показывают, какие операции (чтение, запись, выполнение) с файлом (директорией) может выполнять пользователь.
Права доступа определяются для 3 пользователей:
1. Хозяина (создавшего файл).
2. Группы, в которую входит хозяин файла.
3. Остальные пользователи.

Права доступа могут быть записанны как в буквенном, так и в символьном варианте.

В буквенном: drwxr-x-r-x (стандартные права для директорий).
Первый символ - специальный, показывающий чем этот файл является (в UNIX системах все представленно ввиде файлов, даже директории). d - директория.
Затем идут три комбинации, rwx - права для хоязина, r-x - права для группы, r-x - права доступа для отсальных пользователей.
r - пользователь имеет право чтения файла (по сути просто обратиться к нему).
w - пользователь имеет право записать / перезаписать файл.
x- показывает, что файл может быть исполнен (актуально для CGI сценариев).

В числовом варианте права каждого пользователя определяет цифра, которая складывается из суммы:
r - 4, w - 2, x -1. Таким образом drwxr-xr-x - 755.

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

Код
<?php

chmod( "file.txt" , 0755 ); // 0 - показывает, что это восьмеричная система.

?>


В Операционных Системах Windows права доступа всегда 777.

Какую можно получить информацию о файле?

Информацию о файле можно получить с помощью функции:
Код
<pre>
<?php

print_r( stat( "file.txt" ) );

?>


Выведет массив, где:
0 - dev - устройство
1 - ino - inode - отедьная функция: fileinode();
2 - mode - inode protection mode
3 - nlink - number of links
4 - uid - идентификатор хоязина - отедьная функция: fileowner();
5 - gid - идентификатор группы - отедьная функция: filegroup();
6 - rdev - device type, if inode device *
7 - size - размер - отедьная функция: filesize();
8 - atime - время последнего доступа к файлу (Unix time) - отедьная функция: fileatime();
9 - mtime - время последней модификации файла (Unix time) - отедьная функция: filemtime();
10 - ctime - время создания файла (Unix time) - отедьная функция: filectime();
11 - blksize - blocksize of filesystem IO *
12 - blocks - number of blocks allocated

Аналогом данной функции является fstat(), но работает она с открытым указателем.

Как организовать файл INI и его парсинг (чтение и запись)?

В PHP существует возможность парсинга *.ini файлов, которые имеют тот же синтаксис, что и php.ini, т.е.:
Код
[категория]
<ключ> = <значение>;

Для этого есть функция: parse_ini_file();
Код
<?php

$arr = parse_ini_file( "test.ini" , TRUE );
print_r( $arr );

?>

Если вы устанавливаете второй параметр - FALSE (или не укажите вовсе), то вы получите массив всех ключей и значений. Если укажите TRUE, то получите многомерный массив, где верхними элементами будут название категорий.

Обращаем ваше внимание, что *.ini файл по умолчанию воспринимается веб-сервером, как текстовый документ, поэтому не рекомендуем хранить в нем важные данные...

ВАЖНО: значение не состоящие из символов латинского алфавита или цифр должны быть заключены в кавычки.

Настоятельно не рекомендуем вам использовать не латинские символы...

Запись файла *.ini вам придется производить собственным алгоритмом.
Код
<?php

$input = "";

$arr = array ( ... );

// Только для записи БЕЗ КАТЕГОРИЙ
foreach( $arr as $k => $v )
 {  $input .= $k . " = " . $v . "\n";  }

// Только для записи C КАТЕГОРИЙ
foreach( $arr as $ck => $cv )
 {
  $input .= $ck . "\n";

  foreach( $cv as $k => $v )
   {  $input .= $k . " = " . $v . "\n";  }
 }

// Записываем как обычный файл
$f = fopen( "test.ini" , "w+" );
fwrite( $f , $input , strlen( $input ) );
fclose( $f );

?>

Данные алгоритм не осуществляет проверку на не латинские символы и не производит их обрамление кавычками.

Как получить список всех каталогов и подкаталогов (сканинг папок) ?

Сканинг папок делается с помощью рекурсии, функции, которая вызывает саму себя.
Код
<?php

function dirsize( $d )
{
 $dh = opendir( $d );

 while( ( $f = readdir( $dh ) ) !== false )
  {
   if ( $f != "." && $f != ".." )
    {
     $path = $d . "/" . $f;

     if( is_dir( $path ) )
      {
       print substr( $path , 2 ) . "<br>";
       dirsize( $path );
      }
    }
  }

 closedir($dh);
}

dirsize("./");

?>


Как узнать сколько места занимает на диске каталог?

Размер папки складывается из суммы размеров файлов внутри не и папок.
Код
<?php


function dirsize( $d )
{
 $dh = opendir( $d );
 $size = 0;

 while( ( $f = readdir( $dh ) ) !== false )
  {
   if ( $f != "." && $f != ".." )
    {
     $path = $d . "/" . $f;

     if( is_dir( $path ) )
      {  $size += dirsize( $path );  }
     elseif( is_file( $path ) )
      {  $size += filesize( $path );  }

    }
  }

 closedir($dh);
 return $size;
}

print "Folder size: " . round( dirsize("./") / 1024 , 2 ) . " Kb.";

?>


Как отредактировать определенную строчку в файле?

Код
<?php

$f_arr = file( "file.txt" );

$needle = 2; // Какую строчку нужно отредактировать
             // Не забывайте, нумерация начинается с нуля.

$f_arr[ $needle ] = "Новое значение";

$f = fopen( "file.txt" , "w" );

for( $i = 0; $i < count( $f_arr ); $i++ )
 {  fwrite( $f , $f_arr[$i] . "\n" );  }

close($f);

?>


Как "обнулить" (очистить) содержимое файла?

Код
<?php

$f = fopen( "file.txt" , "r" );

ftruncate( $f , 0 );

close($f);

?>


Как посчитать количество файлов в папке и подпапках?
Код
<?php
function dirsize( $d )
{
 $dh = opendir( $d );
 while( ( $f = readdir( $dh ) ) !== false )
  {
   if ( $f != "." && $f != ".." )
    {
     $path = $d . "/" . $f;
     if( is_dir( $path ) )
      {  $count += dirsize( $path , $count );  }
     elseif( is_file( $path ) )
      {  $count++;  }
    }
  }
 closedir($dh);
 return $count;
}
$count = 0;
print dirsize("./" , 0);
?>


Как проверить на существование удаленный файл?

Автор: дмитрий ( профиль )

Код
<?php

$URL = 'phpscripts.ru';
$FILE = '/9.gif';
$s = "";

$fp = @fsockopen ($URL, 80, $_errno, $_errstr, 4);

if ($fp)
{
 fputs ($fp, "HEAD $FILE HTTP/1.0\r\n");
 fputs ($fp, "Host: $URL\r\n");
 fputs ($fp, "Connection: close\r\n");
 fputs ($fp, "\r\n");

 while (!feof($fp))
  {  $s .= fgets ($fp);  }
fclose ($fp);
}

echo (strpos($s, 'OK') !== FALSE) ? 'FOUND' : ' NOT FOUND';

?>


Как узнать размер удаленного файла?

Автор: tRiNEX ( профиль ) ( http://trinex.ru )

Код
<?
$hostname = "units.ru"; // units.ru - имя сервера
$filename = "/files/winamp.exe"; // интересующий на сервере файл
get_size($hostname, $filename);
function get_size($hostname, $filename)
{
     $end = false;
     $fp = fsockopen ($hostname, 80, &$errnr, &$errstr) or
     die("$errno:$errstr");
     fputs($fp,"HEAD ".$filename." HTTP/1.0\n\n");
     while (!$end) {
         $line = fgets($fp, 2048);
         if (trim($line) == "") {
              $end = true;
         } else {
              $str = explode(": ", $line);
         if ($str[0] == "Content-Length") print "Size of ".$filename." file ".$str[1]." bytes";
        }
      }
      fclose($fp);
}
?>
Автор: Mal Hack
Сайт: http://mal-hack.net






Просмотров: 48199

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную