Работа с файлами в php
PHPПодборка PHP функций для работы с файлами.
Как создать новый файл и записать в него что-то?
<?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] . " " ); }
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.
Какую можно получить информацию о файле?
Информацию о файле можно получить с помощью функции:
<?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 . " "; }
// Только для записи C КАТЕГОРИЙ
foreach( $arr as $ck => $cv )
{
$input .= $ck . " ";
foreach( $cv as $k => $v )
{ $input .= $k . " = " . $v . " "; }
}
// Записываем как обычный файл
$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 ) . "
";
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] . " " ); }
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 ");
fputs ($fp, "Host: $URL ");
fputs ($fp, "Connection: close ");
fputs ($fp, " ");
while (!feof($fp))
{ $s .= fgets ($fp); }
fclose ($fp);
}
echo (strpos($s, 'OK') !== FALSE) ? 'FOUND' : ' NOT FOUND';
?>
Как узнать размер удаленного файла?
<?php
$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 ");
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);
}
?>
Комментарии
Алиса
06.05.2018 14:33:45
06.05.2018 14:33:45
дратути