Перейти к содержимому

Php f что это

  • автор:

fprintf

Записывает строку, созданную с использованием строки формата format , в поток, дескриптор которого передаётся в параметре stream .

Список параметров

Указатель ( resource ) на файл, обычно создаваемый с помощью функции fopen() .

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

Спецификаторы преобразования имеют следующий формат: %[argnum$][flags][width][.precision]specifier .

Argnum

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

Флаги

Флаг Описание
Выравнивание по левому краю в пределах заданной ширины поля; По умолчанию выравнивание происходит по правому краю.
+ Печатает плюс + у не отрицательных чисел; По умолчанию знак печатается только у отрицательных чисел.
(space) Дополняет результат пробелами. Это поведение по умолчанию.
0 Дополняет числа нулями (только слева). Со спецификатором s также может дополнять нулями справа.
‘ (char) Дополняет результат символом (char).
Ширина

Либо целое число, указывающее, сколько символов (минимум) должно получиться в результате преобразования, либо * . Если указано значение * , то ширина задаётся как дополнительное целое значение, предшествующее значению, отформатированному спецификатором.

Точность
  • Для спецификаторов e , E , f и F : задаёт количество цифр после десятичной запятой (по умолчанию 6).
  • Для спецификаторов g , G , h и H : задаёт максимальное значение печатаемых значащих цифр.
  • Для спецификатора s : задаёт ограничение максимального количества символов в строке, которые будут выведены.

Замечание: Если указана точка без последующего значения точности, то точность будет считаться за 0. Если указано значение * , точность задаётся как дополнительное целое значение, предшествующее значению, отформатированному спецификатором.

Пусть P равно точности, если она не равно нулю, 6 — если точность не задана и 1, если точность задана как 0. Тогда, если преобразование со стилем «E» будет иметь показатель степени X:

Если P > X ≥ −4, преобразование будет в стиле «f» и точность будет P − (X + 1). В обратном случае, преобразование будет в стиле «e» и точность будет P − 1.

Внимание

Спецификатор c игнорирует значения ширины и дополнения

Внимание

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

Переменные будут приведены к подходящему для спецификатора типу:

Обработка типов

Тип Спецификатор
string s
int d , u , c , o , x , X , b
float e , E , f , F , g , G , h , H

Возвращаемые значения

Возвращает длину записанной строки.

Ошибки

Начиная с PHP 8.0.0, если количество аргументов равно нулю, выбрасывается исключение ValueError . До PHP 8.0.0 вместо этого выдавалась ошибка уровня E_WARNING .

Начиная с PHP 8.0.0, если [width] меньше нуля или больше PHP_INT_MAX , выбрасывается исключение ValueError . До PHP 8.0.0 вместо этого выдавалась ошибка уровня E_WARNING .

Начиная с PHP 8.0.0, если [precision] меньше нуля или больше PHP_INT_MAX , выбрасывается исключение ValueError . До PHP 8.0.0 вместо этого выдавалась ошибка уровня E_WARNING .

Начиная с PHP 8.0.0, если аргументов задано меньше, чем требуется, выбрасывается исключение ArgumentCountError . До PHP 8.0.0 вместо этого выдавалась ошибка уровня E_WARNING .

Список изменений

Версия Описание
8.0.0 Функция больше не возвращает false в случае возникновения ошибки.
8.0.0 Выбрасывает исключение ValueError , если количество аргументов равно нулю; ранее функция выдавала ошибку уровня E_WARNING .
8.0.0 Выбрасывает исключение ValueError , если [width] меньше нуля или больше PHP_INT_MAX ; ранее функция выдавала ошибку уровня E_WARNING .
8.0.0 Выбрасывает исключение ValueError , если [precision] меньше нуля или больше PHP_INT_MAX ; ранее функция выдавала ошибку уровня E_WARNING .
8.0.0 Выбрасывает исключение ArgumentCountError , если аргументов задано меньше, чем требуется; ранее функция выдавала ошибку уровня E_WARNING .

Примеры

Пример #1 fprintf() : заполнение нулями

fprintf ( $fp , «%04d-%02d-%02d» , $year , $month , $day );
// запишет форматированную ISO-дату в файл date.txt
?>

Пример #2 fprintf() : форматирование денежных величин

$money1 = 68.75 ;
$money2 = 54.35 ;
$money = $money1 + $money2 ;
// echo $money выведет «123.1»;
$len = fprintf ( $fp , ‘%01.2f’ , $money );
// строка «123.10» записана в файл currency.txt

echo «записано $len байт в файл currency.txt» ;
// используйте возвращаемое из fprintf значение для определения количества записанных байт
?>

Смотрите также

  • printf() — Выводит отформатированную строку
  • sprintf() — Возвращает отформатированную строку
  • vprintf() — Выводит отформатированную строку
  • vsprintf() — Возвращает отформатированную строку
  • vfprintf() — Записывает отформатированную строку в поток
  • sscanf() — Разбирает строку в соответствии с заданным форматом
  • fscanf() — Обрабатывает данные из файла в соответствии с форматом
  • number_format() — Форматирует число с разделением групп
  • date() — Форматирует временную метку Unix

fopen

fopen() закрепляет именованный ресурс, указанный в аргументе filename , за потоком.

Список параметров

Если filename передан в форме «scheme://. «, он считается URL и PHP проведёт поиск обработчика протокола (также известного как «обёртка») для этой схемы. Если ни одна обёртка не закреплена за протоколом, PHP выдаст замечание, чтобы помочь вам отследить потенциальную проблему в вашем скрипте и затем продолжит выполнение, как если бы filename указывал на обыкновенный файл.

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

Если PHP установил, что filename указывает на зарегистрированный протокол и этот протокол зарегистрирован как сетевой URL, PHP выполняет проверку состояния директивы allow_url_fopen. Если она выключена, PHP выдаст предупреждение и вызов fopen закончится неудачей.

Замечание:

Список поддерживаемых протоколов доступен в разделе Поддерживаемые протоколы и обёртки. Некоторые протоколы ( обёртки ) поддерживают контекст и/или опции php.ini . Обратитесь к соответствующей странице с описанием используемого протокола для получения списка опций, которые могут быть установлены. (например, значение php.ini user_agent используется обёрткой http ).

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

$handle = fopen ( «c:\\folder\\resource.txt» , «r» );
?>

Параметр mode указывает тип доступа, который вы запрашиваете у потока. Он может быть одним из следующих вариантов:

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

mode Описание
‘r’ Открывает файл только для чтения; помещает указатель в начало файла.
‘r+’ Открывает файл для чтения и записи; помещает указатель в начало файла.
‘w’ Открывает файл только для записи; в противном случае ведёт себя так же, как и ‘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.

Замечание:

Разные семейства операционных систем имеют разные соглашения относительно окончания строк. Когда вы пишете текст и хотите вставить разрыв строки, вы должны использовать правильные символы (или символ) для вашей операционной системы. Системы семейства Unix используют \n в качестве символа конца строки, системы семейства Windows используют \r\n в качестве символов окончания строки и системы семейства Macintosh (Mac OS Classic) используют \r в качестве символа конца строки.

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

Windows предлагает флаг режима текстовой трансляции ( ‘t’ ), который автоматически переведёт \n в \r\n во время работы с файлом. И наоборот — вы также можете использовать ‘b’ , чтобы принудительно включить бинарный режим, в котором ваши данные не будут преобразовываться. Чтобы использовать эти режимы, укажите ‘b’ или ‘t’ последней буквой параметра mode .

Флагом трансляции по умолчанию является ‘b’ . Вы можете использовать режим ‘t’ , если работаете с текстовыми файлами и используете \n для обозначения конца строки в вашем скрипте, но при этом предполагаете, что ваши файлы будут использоваться в таких приложениях, как «Блокнот» (в устаревших версиях). Во всех остальных случаях используйте флаг ‘b’ .

Если вы укажете флаг ‘t’ во время работы с бинарными файлами, вы можете столкнуться со странными проблемами с вашими данными, включая повреждённые файлы изображений и проблемы с символами \r\n .

Замечание:

Опять же из соображений портируемости крайне рекомендуется переписать старый код, который полагается на режим ‘t’ , чтобы вместо этого он использовал правильные концы строк и режим ‘b’ .

Замечание: Параметр mode игнорируется при работе с обёртками потока php://output , php://input , php://stdin , php://stdout , php://stderr и php://fd .

use_include_path

Необязательный третий параметр use_include_path может быть установлен в ‘1’ или true , если вы также хотите провести поиск файла в include_path.

Возвращаемые значения

Возвращает указатель на файл в случае успешного выполнения или false в случае возникновения ошибки

Ошибки

В случае неудачного завершения работы генерируется ошибка уровня E_WARNING .

Список изменений

Версия Описание
7.0.16, 7.1.2 Добавлена опция ‘e’ .

Функция fgets в PHP, описание и примеры

Функция fgets() считывает и возвращает строку из файла. В случае возникновения ошибки возвращает False.

Версия PHP 3 и выше.

function fgets (resource handle [, int length])

Параметры функции fgets

handle Указатель на ресурс, открытый функцией fopen.
length Необязательное числовое значение, указывающее размер получаемой строки в байтах. По умолчанию равно 1 Кб. Если задано, то при строке больше этого размера она будет обрезана.

Примеры использования функции fgets

$f = fopen("myfile.txt", "r"); // открытие файла в режиме чтения echo fgets($f); // считывание и вывод одной строки echo echo fgets($f, 50); // считывание и вывод одной строки размером 50 байт fclose($f);// закрытие файла
$f = fopen("myfile.txt", "r"); while (!feof($f)) < // считывание и вывод всего содержимого файла $s = fgets($f); echo $s; >fclose($f);

Выражения

Выражения — это самые важные строительные элементы PHP. Почти всё, что вы пишете в PHP, является выражением. Самое простое и точное определение выражения — «все что угодно, имеющее значение».

Основными формами выражений являются константы и переменные. Если вы записываете $a = 5 , вы присваиваете 5 переменной $a . 5 , очевидно, имеет значение 5 или, другими словами, 5 — это выражение со значением 5 (в данном случае 5 — это целочисленная константа).

После этого присвоения вы ожидаете, что значением $a также является 5, поэтому, если вы написали $b = $a , вы полагаете, что работать это будет так же, как если бы вы написали $b = 5 . Другими словами, $a это также выражение со значением 5. Если всё работает верно, то именно так и произойдёт.

Немного более сложными примерами выражений являются функции. Например, рассмотрим следующую функцию:

function foo ()
return 5 ;
>
?>

Исходя из того, что вы хорошо знакомы с концепцией функций (если нет, то прочитайте главу о функциях), вы полагаете, что запись $c = foo() абсолютно эквивалентна записи $c = 5 , и вы правы. Функции — это выражения, значением которых является то, что возвращает функция. Поскольку foo() возвращает 5, значением выражения ‘ foo() ‘ является 5. Как правило, функции возвращают не просто статическое значение, а что-то вычисляют.

Разумеется, значения в PHP не обязаны быть целочисленными, и очень часто ими не являются. PHP поддерживает четыре типа скалярных значений: целочисленные ( int ), с плавающей точкой ( float ), строковые значения ( string ) и булевы ( bool ) значения (скалярными являются значения, которые вы не можете ‘разбить’ на меньшие части, в отличие, например, от массивов). PHP поддерживает также два комбинированных (не скалярных) типа: массивы и объекты. Любое значение такого типа может присваиваться переменной или возвращаться функцией.

Однако PHP, как и многие другие языки, понимает гораздо больше выражений. PHP — это язык, ориентированный на выражения и рассматривающий почти все как выражение. Вернёмся к примеру, с которым мы уже имели дело: $a = 5 . Легко заметить, что здесь присутствуют два значения — значение целочисленной константы 5 и значение переменной $a , также принимающей значение 5. Но на самом деле здесь присутствует и ещё одно значение — значение самого присвоения. Само присвоение вычисляется в присвоенное значение, в данном случае — в 5. На практике это означает, что $a = 5 , независимо от того, что оно делает, является выражением со значением 5. Таким образом, запись $b = ($a = 5) равносильна записи $a = 5; $b = 5; (точка с запятой обозначает конец выражения). Поскольку операции присвоения анализируются справа налево, вы также можете написать $b = $a = 5 .

Другой хороший пример ориентированности на выражения — префиксный и постфиксный инкремент и декремент. Пользователи PHP и многих других языков возможно уже знакомы с формой записи variable++ и variable— . Это операторы инкремента и декремента. Также как и C, PHP поддерживает два типа инкремента — префиксный и постфиксный. Они оба инкрементируют значение переменной и эффект их действия на неё одинаков. Разница состоит в значении выражения инкремента. Префиксный инкремент, записываемый как ++$variable , вычисляется в инкрементированное значение (PHP инкрементирует переменную до того как прочесть её значение, отсюда название ‘пре-инкремент’). Постфиксный инкремент, записываемый как $variable++ , вычисляется в первоначальное значение переменной $variable до её приращения (PHP инкрементирует переменную после прочтения её значения, отсюда название ‘пост-инкремент’).

Очень распространённым типом выражений являются выражения сравнения. Результатом вычислений являются false (ложь) или true (истина). PHP поддерживает операции сравнения > (больше), >= (больше либо равно), == (равно), != (не равно), < (меньше) и

Последний пример выражений, который мы здесь рассмотрим, это смешанные выражения операции и присвоения. Вы уже знаете, что если вы хотите увеличить $a на 1, вы можете просто написать $a++ или ++$a . Но что, если вы хотите прибавить больше, чем единицу, например, 3? Вы могли бы написать $a++ много раз, однако, очевидно это не очень рациональный и удобный способ. Гораздо более распространённой практикой является запись вида $a = $a + 3 . $a + 3 вычисляется в значение $a плюс 3 и снова присваивается $a , увеличивая в результате $a на 3. В PHP, как и в некоторых других языках, таких как C, вы можете записать это более коротким образом, что увеличит очевидность смысла и быстроту понимания кода по прошествии времени. Прибавить 3 к текущему значению $a можно с помощью записи $a += 3 . Это означает дословно «взять значение $a , прибавить к нему 3 и снова присвоить его переменной $a «. Кроме большей понятности и краткости, это быстрее работает. Значением $a += 3 , как и обычного присвоения, является присвоенное значение. Обратите внимание, что это НЕ 3, а суммированное значение $a плюс 3 (то, что было присвоено $a ). Таким образом может использоваться любой бинарный оператор, например, $a -= 5 (вычесть 5 из значения $a ), $b *= 7 (умножить значение $b на 7) и т.д.

Существует ещё одно выражение, которое может выглядеть необычно, если вы не встречали его в других языках — тернарный условный оператор:

$first ? $second : $third
?>

Если значением первого подвыражения является true (не ноль), то выполняется второе подвыражение, которое и будет результатом условного выражения. В противном случае будет выполнено третье подвыражение и его значение будет результатом.

Следующий пример должен помочь вам немного улучшить понимание префиксного и постфиксного инкремента и выражений:

function double ( $i )
return $i * 2 ;
>
$b = $a = 5 ; /* присвоить значение пять переменным $a и $b */
$c = $a ++; /* постфиксный инкремент, присвоить значение $a
(5) переменной $c */
$e = $d = ++ $b ; /* префиксный инкремент, присвоить увеличенное
значение $b (6) переменным $d и $e */

/* в этой точке и $d, и $e равны 6 */

$f = double ( $d ++); /* присвоить удвоенное значение $d перед
инкрементом (2*6 = 12) переменной $f */
$g = double (++ $e ); /* присвоить удвоенное значение $e после
инкремента (2*7 = 14) переменной $g */
$h = $g += 10 ; /* сначала переменная $g увеличивается на 10,
приобретая, в итоге, значение 24. Затем значение
присвоения (24) присваивается переменной $h,
которая в итоге также становится равной 24. */
?>

Некоторые выражения могут рассматриваться как инструкции. В данном случае инструкция имеет вид ‘ expr ; ‘ — выражение с последующей точкой с запятой. В записи $b = $a = 5; , $a = 5 — это верное выражение, но само по себе не инструкция. Тогда как $b = $a = 5; является верной инструкцией.

Последнее, что стоит упомянуть, это истинность значения выражений. Во многих случаях, как правило, в условных операторах и циклах, вас может интересовать не конкретное значение выражения, а только его истинность (значение true или false ). Константы true и false (регистронезависимые) — это два возможных булевых значения. Выражения можно автоматически преобразовать в логическое значение. Подробнее о том, как это сделать, рассказано в разделе о приведении типов.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *