Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

организуйте дозапись новых данных анкеты в этот же файл

Strlen()

возвращает длину строки, которую принимает в качестве аргумента:

<? $string = "Hello, world!!!"; $string_len = strlen ($string); echo ( $string_len ); ?>

Chr()

Эта функция принимает в качестве аргумента ASCII код символа и возвращает соответствующий этому коду фактический символ:

<? $str = chr (36); echo ( $str ); // возвращает символ "$" ?>

Ord()

Выполняет действие, обратное функции chr ():

<? $str = ord ('$'); echo( $str ); // возвращает 36 ?>

Функции объединения/разделения строк

str_repeat() str_pad() chunk_split() strtok() explode() implode() join()

 

Str_repeat()

Синтаксис:

string str_repeat ( string str, int number )

Функция повторения строки. Повторяет строку str то количество раз, которое указано в параметре number.

К примеру:

<? echo str_repeat(" Hello! ",3 ); // выводит Hello! Hello! Hello! ?>

 

Str_pad()

Синтаксис:

string str_pad ( string strinput, int pad_length [, string pad_string [, int pad_type ]] )

Эта функция дополняет строку другой строкой до определенной длины. Аргумент strinput задает исходную строку. Аргумент pad_length задает длину возвращаемой строки. Если он имеет меньшее значение, чем исходная строка, то добавления не производится. Необязательный аргумент pad_string указывает на то, какую строку использовать в качестве дополнения. По умолчанию используются пробелы. Необязательный аргумент pad_type указывает, с какой стороны следует дополнять строку: справо, слево или с обеих сторон. Аргумент pad_type может принимать следующие значения:

· STR_PAD_RIGHT (по умолчанию)

· STR_PAD_LEFT

· STR_PAD_BOTH

<?

$file=fopen("vasya",w);

$str="трям";

$str1=str_pad($str,10,"*");

$str2=str_pad($str1,12,"\n");

fwrite($file,$str2);

fclose($file);

#unlink("file/vasya");

echo($str2);

?>

 

Chunk_split()

Синтаксис:

string chunk_split ( string str [, int chunklen [, string end ]] )

Эта функция возвращает фрагмент строки. Функция chunk_split () возвращает строку, в которой между каждым блоком строки str длиной chunklen (по умолчанию chunklen = 76) вставляется последовательность из разделителей end (по умолчанию: end = " \r\n ").

<?

$file=fopen("vasya",w);

$str="тру-лялялял ываываыва";

$str1=chunk_split($str,3,"\n");

fwrite($file,$str1);

fclose($file);

#unlink("file/vasya");

echo($str);

?>

Strtok()

Синтаксис:

string strtok ( string arg1, string arg2 )

Фунция возвращает строку по частям. Она возвращает часть строки arg1 до разделителя arg2. При последующих вызовах функции возвращается следующая часть до следующего разделителя, и так до конца строки. При первом вызове функция принимает два аргумента: исходную строку arg1 и разделитель arg2. Обратите внимание, что при каждом последующем вызове arg1 указывать не надо, иначе будет возвращаться первая часть строки.

Пример:

<? $str = "I am very glad to see%you% adhahjasdad"; $tok = strtok ( $str, " " ); while( $tok ) { echo ( $tok ); echo ( " " ); $tok = strtok ( " %" ); }; // выведет: "I" "am" "very" "glad" "to" "see" "you": ?>
 
  I am very glad to see you

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

 

Explode()

Синтаксис:

string explode ( string arg, string str [, int maxlimit ] )

Функция explode () производит разделение строки в массив. Она возвращает массив строк, каждая из которых соответствует фрагменту исходной строки str, находящемуся между разделителями, указанными аргументом arg. Необязательный параметр maxlimit указывает максимальное количество элементов в массиве. Оставшаяся неразделенная часть будет содержаться в последнем элементе.

Пример:

<? $str = "one two three for five"; $str_exp = explode ( " ", $str ); /* теперь $str_exp = array([0] => one, [1] => two, [2] => three, [3] => for, [4] => five) */ ?>

 

Implode()

Синтаксис:

string implode ( string var, array param )

Функция implode () является обратной функции explode () и производит объединение массива в строку. Функция возвращает строку, которая последовательно содержит все элементы массива, заданного в параметре param, между которыми вставляется значение, указанное в параметре var. Для примера выведем все то, что мы только что "умассивили" функцией explode (), используя пробел в качестве разделителя:

Пример:

<? $str = "one two three four five"; $str_exp = explode ( " ", $str ); /* $str_exp = array([0] => one, [1] => two, [2] => three, [3] => four, [4] => five) */ $str_imp = implode ( " ", $str_exp ); echo( $str_imp );

Результат:

 
  one two three four five

 

Join()

Синтаксис:

string join ( string var, array param )

Аналог функции implode () - производит объединение массива в строку.

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

Функции преобразования регистра

strtolower() strtoupper() ucfirst() ucwords()

 

Strtolower()

Функция производит преобразование символов строки в нижний регистр.

Синтаксис:

string strtolower ( string str )

Пример:

<? $str = "HELLO WORLD"; $str = strtolower ( $str ); echo $str; // выведет "hello world" ?>

 

Strtoupper()

Производит преобразование строки в верхний регистр.

Синтаксис:

string strtoupper ( string str )

Отмечают, что функция не очень хорошо иногда работает с русскими буквами.

Пример:

<? $str = "Hello World"; $str = strtoupper ( $str ); echo $str; // выведет HELLO WORLD ?>

 

Ucfirst()

Производит преобразование первого символа строки в верхний регистр.

Синтаксис:

string ucfirst ( string str )

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

<? $str = "hello world"; $str = ucfirst ( $str ); echo $str; // выведет Hello world ?>

 

Ucwords()

Производит преобразование первого символа каждого слова строки в верхний регистр.

Синтаксис:

string ucwords ( string str )

Возвращает строку, у которой первый символ каждого слова в строке заглавный.

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

<? $str = "hello world"; $str = ucwords ( $str ); echo $str; // выведет Hello World ?>

Функции сравнения строк

strcmp() strncmp() strcasecmp() strncasecmp() strnatcmp() strnatcasecmp() similar_text() levenshtein()

 

Strcmp()

Синтаксис:

int strcmp ( string str1, string str2 )

Эта функция сравнения строк. Она сравнивает две строки и возвращает:

· 0 - если строки полностью совпадают;

· 1 - если, строка str1 лексикографически больше str2;

· 1 – если, наоборот, строка str1 лексикографически меньше str2

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

Пример:

<? $str1 = "ttt"; $str2 = "tttttttttt" ; echo( "Result of strcmp ($str1, $str2) is "); echo( strcmp ( str1, str2 )); echo( "< br >" ); echo( "Result of strcmp ($str2, $str1)> is "); echo( strcmp ( str2, str1 )); echo( "< br >" ); echo( "Result of strcmp ($str1, $str1) is "); echo( strcmp (str1, str1 )); ?>

Результат:

 
  Result of strcmp (ttt, tttttttttt) is -1 Result of strcmp (tttttttttt, ttt) is 1 Result of strcmp (ttt, ttt) is 0

 

Strncmp()

Синтаксис:

int strncmp ( string str1, string str2, int len )

Эта функция отличается от strcmp () тем, что сравнивает начала строк, а точнее первые len байтов. Если len меньше длины наименьшей из строк, то строки сравниваются целиком.

В остальном функция ведет себя аналогично strcmp (), т.е. возвращает:

· 0 - если строки полностью совпадают;

· 1 - если, строка str1 лексикографически больше str2;

· 1 – если, наоборот, строка str1 лексикографически меньше str2

Сравнение также проводится побайтово, поэтому функция чувствительна к регистру.

 

Strcasecmp()

Синтаксис:

int strcasecmp ( string str1, string str2 )

Функция работает аналогично strcmp (), только при работе не учитывается регистр букв.

 

Strncasecmp()

Синтаксис:

int strncasecmp ( string str1, string str2, int len )

Функция strncasecmp () cравнивает начала строк без учета регистра.

 

Strnatcmp()

Синтаксис:

int strnatcmp ( string str1, string str2 )

Производит так называемое "естественное" сравнение строк.

Об этой функции поговорим поподробнее. Данная функция является имитатором сравнение строк человеком, т.е. она сравнивает строки так, как их сравнивал бы человек. Т.е., если, к примеру, мы будем сравнивать файлы с названиями pict1.gif, pict20.gif, pict2.gif, pict10.gif, то обычное сравнение приведет к следующему их расположению: pict1.gif, pict10.gif, pict2.gif, pict20.gif. Естественная же сортировка даст результат, который нам более привычен: pict1.gif, pict2.gif, pict10.gif, pict20.gif.

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

<? $array1 = $array2 = array("pict10.gif", "pict2.gif", "pict20.gif", "pict1.gif"); echo( "обычная сортировка:" ); echo ( "< br >" ); usort ( $array1, strcmp ); print_r ( $array1 ); echo ( "< br >" ); echo( "естественная сортировка:" ); echo( "< br >" ); usort ( $array2, strnatcmp ); print_r ( $array2 ); ?>

Этот скрипт выведет следующее:

 
  обычная сортировка: Array([0]=>pict1.gif [1]=> pict10.gif [2]=>pict2.gif [3]pict20.gif) естественная сортировка: Array([0]=>pict1.gif [1]=> pict2.gif [2]=>pict10.gif [3]pict20.gif)

 

Strnatcasecmp()

Синтаксис:

int strnatcasecmp ( string str1, string str2 )

Производит "естественное" сравнение строк без учета регистра. Функция выполняет то же самое, что и strnatcmp (), только без учета регистра.

 

Similar_text()

Синтаксис:

int similar_text ( string str_first, string str_second [, double percent ] )

Эта функция производит определение схожести двух строк.

Функция similar_text () определяет схожесть двух строк по алгоритму Оливера. Функция возвращает число символов, совпавших в строках str_first и str_second. Третий необязательный параметр передается по ссылке и в нем сохраняется процент совпадения строк.

Вместо стека, как в алгоритме Оливера, эта функция использует рекурсивные вызовы. Сложность алгоритма этой функции равна O((max(n,m))3), что делает эту функцию медленной. (Грубо говоря, скорость выполнения этой функции пропорциональна N3, где N – длина наибольшей строки.

Пример:

<? $str1 = "Hello, world!"; $str2 = "Hello!"; $var = similar_text ( $str1, $str2 ); $var1 = similar_text ( $str1, $str2, & $tmp ); // параметр $tmp передаем по ссылке echo( "Результат выполнения функции similar_text() для строк $str и $str1 в количестве символов:" ); echo( "< br >" ); echo( "$var"); echo( "< br >" ); echo( "и в процентах:" ); echo( "< br >" ); echo( $tmp ); // для вывода информации в процентах обращаемся к $tmp ?>

Результат:

 
  Результат выполнения функции similar_text() для строк Hello, world! и Hello! в количестве символов: 6 и в процентах: 63.157894736842

 

Levenshtein()

Функция выполняет определение различия Левенштейна двух строк.

Синтаксис:

int levenshtein ( string str1, string str2 ) int levenshtein ( string str1, string str2, int cost_ins, int cost_rep, int cost_del ) int levenshtein ( string str1, string str2, function cost )

Под понятием " различие Левенштейна " понимается минимальное число символов, которое требовалось бы заменить, вставить или удалить для того, чтобы превратить строку str1 в str2.

Сложность алгоритма этой функции равна O(m*n), т.е. пропорциональна произведению длин строк str1 и str2, поэтому эта функция намного более быстрая, чем функция similar_text ().

Как видим, у функции три вида синтаксиса. В первом случае функция возвращает число необходимых операций над символами строк для преобразования str1 в str2:

<? $str1 = "Hello, world!"; $str2 = "Hello!"; $var = levenshtein ( $str1, $str2 ); echo( $var ); // вернет 7 ?>

Во втором случае добавляется три дополнительных параметра: стоимость операции вставки cost_ins, замены cost_rep и удаления cost_del. Естественно, функция в этом случае становится менее быстродействующей. Возвращается интегральный показатель сложности трансформации (ИПСТ).

<? $str1 = "Hello, world!"; $str2 = "Hello!"; $var = levenshtein ( $str1, $str2,3,3,3 ); echo( $var ); // вернет 21 ?>

Число 21, между прочим, это 7*3:). Т.е. ИПСТ равен произведению количества символов, необходимых для замены (а как мы посчитали в предыдущем примере их надобно 7) на стоимость, в этом случае, одной из операций. В этом примере, поскольку стоимость одинакова, не имеет значения, какую операцию брать. В случае, если стоимости различны, при вычисления ИПСТ берется наибольший. Т.е., если мы напишем в этом примере

$var = levenshtein ( $str1, str2,2,3,6 );

то функция вернет нам значение 42.

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

Функции форматного вывода. Спецификаторы преобразования

printf() sprintf() sscanf()

 

Printf() и sprintf()

Синтаксис:

int printf ( string format [, mixed args ] ) string sprintf ( string format [, mixed args ] )

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

С одной стороны этими функциями можно пользоваться просто как функциями вывода:

<? printf ( "Hello!" ); // выводит "Hello!" sprintf ( "Hello!" ); // сама по себе ничего не выводит, $str = sprintf ( "Hello!" ); // а просто возвращает строку, printf ( $str ); // которую затем можно вывести в выходной поток ?>

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

Спецификация определяется символом " % ", за которым может следовать до пяти спецификаторов в следующем порядке:

1. Спецификатор заполнения

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

2. Спецификатор выравнивания

По умолчанию дополнение строки до минимальной ширины производится с левого края (т.е., строка выравнивается по правому краю). Если добавлен символ дефиса, то строка выравнивается по левому краю

3. Спецификатор минимальной ширины

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

4. Спецификатор точности

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

5. спецификатор типа

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

o b – целое число, представляемое в двоичном виде;

o с – целое число, представляемое в виде символа с тем же ASCII кодом;

o d – целое число, представляемое в десятичном виде;

o f – число с плавающей точкой, представляемое в виде десятичной дроби;

o o – целое число, представляемое в восьмеричном виде;

o s – строка;

o x – целое число, представляемое в шестнадцатеричном виде в нижнем регистре;

o X – целое число, представляемое в шестнадцатеричном виде в верзнем регистре

Теперь, после разговора о спецификаторах типа, выведем с помощью функции printf() строку в формате даты dd/mm/yyyy. Следующий код выводит в результате строку " 02/03/2003 ":

<? $day = 2; $month = 3; $year = 2003; printf ("%02d/%02d/%04d", $day, $month, $year); ?>

Результат:

 
  02/03/2003

В этом примере, месяц и день мы форматируем как двузначные числа, а год – как четырехзначное. При этом мы указываем, что целые числа дополняются до минимальной длины нулями слева: %04d

Первый символ – спецификатор заполнения и он равен нулю. Так как дополнение дописывается к началу числа, спецификатор выравнивания отсутствует. Спецификатор минимальной ширины равен двум. Спецификатор точности также отсутствует, так как мы форматируем целое число. Спецификатор типа представлен символом d, так как мы форматируем число как десятичное целое.

Приведем еще один пример.

<? $value = 19; printf ("%.3f", $value); ?>

Этот скрипт выводит число 19 в виде 19.000

 

Еще одна форматная функция

функция sscanf()

Синтаксис:

mixed sscanf ( string str, string format [, string var1...] )

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

Давайте рассмотрим такой пример. Пусть у нас есть строка, в которой находится информация о названии и серийном номере изделия в виде "maxtor/203-5505" и нам надо вытащить из нее серийный номер. Пишем вот такой скриптик:

<? $product = "maxtor/203-5505"; $str = sscanf($product,"maxtor/%3d-%4d"); echo ( " $str [0]- $str [1]" ); ?>

Результат:

 
  203-5505

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

Давайте поработаем еще с датой изготовления этого изделия, которая нам явилась в виде " august 10 2003 ", а нам надо чтоб она выводилась в виде " 10 aug 2003 ". Работаем.

<? $date = " august 10 2003 "; list ( $month, $day, $year ) = sscanf($date, "%s %d %d" ); echo ( "Date: $day -". substr ( $month,0,3)."- $year " ); ?>

Результат:

 
  Date: 10-aug-2003

Важное замечание: при указании необязательных параметров их надо передавать по ссылке (ссылка обозначается указанием символа " & " перед переменной).

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

<? $book = "1\tThinking in PHP"; $str = sscanf ( $book,"%d\t%s %s %s", & $id, & $first, & $second, & $last ); echo ( "book number $id - $first $second $last " ); ?>
 
  book number 1 - Thinking in PHP>

Функции работы с блоками текста

 

wordwrap() str_replace() substr_replace() strtr() stripslashes() stripcslashes() addslashes() addcslashes() quotemeta() strrev()

 

Wordwrap()

Синтаксис:

string wordwrap ( string str [, int width [, string break [, int cut ]]] )

Функция wordwrap() разбивает исходный текст на строки с определенными завершающими символами. Согласно синтаксису, эта функция разбивает блок текста str на несколько строк, которые завершаеются символами break, так, чтобы в одной строке было не более width букв. Поскольку разбиение происходит по границам слов, текст остается вполне читаемым.

К примеру:

<? $str = "Вставай, страна огромная"; $mod_str = wordwrap ( $str,5,"\t" ); echo( $mod_str ); ?>

 

Str_replace()

Синтаксис:

string str_replace ( string from, string to, string str )

Функция str_replace() заменяет в исходной строке str одни подстроки на другие. Т.е. функция заменяет в строке str все вхождения подстроки from на to и возвращает результат. Эта функция может работать с двоичными строками.

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

$txt = str_replace ( "[B]","<B>", $txt );

Т.е. если Вы используете для отображения текста полужирным шрифтом символы "[B]", Вы должны их заменить на символ "<B>", используемые в НТМL.

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

 

Substr_replace()

Синтаксис:

string substr_replace ( string str, string replacement, int start [, int length ] )

Эта функция заменяет в исходной строке одни подстроки на другие. Она возвращает строку str, в которой часть от символа с позицией start и длиной length заменяется строкой replacement. Если аргумент длины length не указан, замена проводится до конца.

Если значение аргумента start положительно, то отсчет производится от начала строки str, в противном случае - от конца. В случае неотрицательного значения length, оно указывает длину заменяемого фрагмента. Если же оно отрицательно, то это - число символов от конца строки str до последнего символа заменяемого фрагмента.

 

Strtr()

Синтаксис:

string strtr ( string str, string from, string to )

string strtr ( string str, array from )

Эта функция предназначена для комплексной замены в строке и имеет два вида синтаксиса. В первом случае функция strtr() возвращает строку str, в которой каждый символ, присутствующий в строке from, заменяется на символ из строки to. Если строки from и to различной длины, то лишние конечные символы у той строки, которая длинее, игнорируются. Во втором случае функция strtr() возвращает строку, в которой фрагменты строки str заменяются на фрагменты, соответствующие индексам значений элементов массива from. Сначала функция пытается заменить наибольшие фрагменты исходной строки, при этом не выполняя замену в уже модифицированных частях строки. Таким образом, можно выполнить несколько замен сразу:

<? $str = array ( "" => "M.Kuznetsov", "<name2>" => "I.Simdyanov" ); $str_out = "Авторы этого учебника и приветствуют вас!"; echo strtr ( $str_out, $str ); ?>

А вот как можно при помощи этой функции отменить действие функции htmlspecialchars():

<? $var = array_flip ( get_html_translation_table () ); $str = strtr ( $str, $var ); ?>

Т.е., из строки, в которой все спецсимволы заменены на их HTML-эквиваленты, мы получаме исходную строку.

 

Stripslashes()

Синтаксис:

string stripslashes ( string str )

Функция удаления обратных слешей. Т.е. производится замена в строке str предваренных слешем символов на их кодовые эквиваленты. Функция работает с символами: ", ", \.

 

Stripcslashes()

Синтаксис:

string stripcslashes ( string str )

А эта функция преобразует спецсимволы в их двоичное представление.

Она возвращает строку, в которой закомментированные обратным слешем спецсимволы, (с целью визуального отображения), преобразуются в их двоичное представление. Функция распознает C-подобные записи (восьмеричные и шестнадцатеричные последовательности \n, \r и т.д.).

 

Addslashes()

Синтаксис:

string addslashes ( string str )

Функция добавления слешей перед символами строки "," и \. Эту функцию удобно использовать при вызове функции eval().

 

Addcslashes()

Синтаксис:

string addcslashes ( string str, string charlist )

Функция добавление слешей перед специальными символами строки.

Возвращает строку str, в которую вставлены символы обратного слеша перед перечисленными в списке charlist символами. Это позволяет преобразовывать символы, которые не печатаются в их визуальное С-представление.

 

Quotemeta()

Синтаксис:

string quotemeta ( string str )
Функция цитирования метасимволов. Возвращает строку, в которую добавлены обратные слеши перед каждым из следующих символов:. \\ + *? [ ^ ] ($). Функцию можно использовать для подготовки шаблонов в регулярных выражениях.

Strrev()

Синтаксис:

string strrev ( string str )
Функция производит реверс строки. Задание

1. Введите слово а и получите новое слово в, удвоив каждую букву слова,

2. Введите строку и замените в этой строке все «руб» на «грн»

3. Подсчитайте количество гласных и согласных букв во введенной строке

4. Заменить во введенной строке все буквы «о» на «а»

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

6. Вырезать из введенной строки все точки

7. Определить, если ли во введенонй строке два одинаковых символа, идущих подряд

8. Определить, является ли введенное слово «перевертышем»

9. Определить, какая из букв «а» или «Б» встречается в строке раньше

Подсчитать количество слогов «му» во введеной строке


Файлы, директории и PHP

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

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

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

file_exists

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

if (!file_exists("somefile.txt")) exit("Указанный файл не существует");

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

Вот некоторые правила описания пути к файлу.

filename Просто указание имени файла означает, что он находится в текущей директории.
./files/filename Файл содержится в папке files, находящейся в текущей директории. Длина цепочки из папок не ограничена.
../filename Файл лежит в предыдущей директории. Каждый знак ../ расценивается как возврат в родительскую директорию.
../files/filename Файл находится в папке files, которая лежит в предыдущей директории.

filesize

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

file

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

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

$text_file = implode("", file("somefile")); echo $text_file;

readfile

Как и предыдущая функция, readfile выводит содержание указанного файла, а также возвращает число символов в файле (или количество байт, кому как нравится, так как один символ равен одному байту). Но учтите, что в отличие от file, эта функция не предусматривает присваивание прочитанного содержимого файла переменной. Если вы попытаетесь это сделать, то переменной присвоится только число прочитанных символов.

$bytes = readfile ("somefile"); echo "Итого - ".$bytes." символов";

fopen

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

Функция fopen имеет несколько режимов работы с файлом. Они указываются после имени файла и представляют из себя следующие обозначения:

· "r"
Файл открывается только для чтения его содержимого.

· "r+"
Открытие файла как для чтения, так и для записи.

· "w"
Файл открывается с целью записи.

· "w+"
Открыть файл для чтения и записи.

· "a"
Файл открывается для записи в конец файла (дозаписи).

· "a+"
Открывается для дозаписи и чтения.

fgets

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

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...