7 Практикум по програмуванню на PHP
Функція printf
<?php printf("В вашей корзине находится %d покупки", 3); ?>
Специфікатори пертворень, які використовуються в функції printf
Специфікатор
Перетворення, здійснені з аргументом arg
Приклад (для arg, що має значення 123)
%
Відображення символа %(аргументи не потрібні)
%
b
Відображення arg у вигляді двоїчного цілого числа
1111011
c
Відображення ASCII-символа з кодом, який є в arg
{
d
Відображення arg у вигляді цілого десятичного числа з знаком
123
e
Відображення arg з використанням наукової форми запису
1.23000e+2
f
Відображення arg у вигляді числа з плаваючою крапкою
123.000000
o
Відображення arg у вигляді вісьмиричного цілого числа
173
s
Відображення arg у вигляді рядка
123
u
Відображення arg у вигляді беззнакового десятичного числа
123
x
Відображення arg у вигляді шіснадцятирічного числа з символами у нижньому регістрі
7b
X
Відображення arg у вигляді шіснадцятирічного числа з символами у верхньому регістрі
7B
приклади
<?php printf("Меня зовут %s. Мне %d года, то есть %X в шестнадцатеричном" . "представлении", 'Симон', 33, 33); printf("<span color='#%X%X%X'>Привет</span>", 65, 127, 245); ?>
Обычно представляется удобным в качестве аргументов printf использовать переменные или выражения. Например, если значения для цветового решения хранятся в трех переменных — $r, $g и $b, то более темный оттенок можно получить с помощью выражения:
printf("<span color='#%X%X%X'>Привет</span>", $r-20, $g-20, $b-20); <?php printf("Результат: $%.2f", 123.42 / 12); ?>
Результат виконання коду:
Результат: $10.29
Пример 7.1. Настройка преставления данных точности
<?php echo "<pre>"; // Тег, позволяющий отображать все пустые пространства // Дополнение пробелами до 15 знако-мест printf("Результат равен $%15f\n", 123.42 / 12); // Дополнение нулями до 15 знако-мест printf("Результат равен $%015f\n", 123.42 / 12); // Дополнение пробелами до 15 знако-мест и //вывод с точностью до двух десятичных знаков printf("Результат равен $%15.2f\n", 123.42 / 12); // Дополнение нулями до 15 знако-мест и //вывод с точностью до двух десятичных знаков printf("Результат равен $%015.2f\n", 123.42 / 12); // Дополнение символами # до 15 знако-мест и //вывод с точностью до двух десятичных знаков printf("Результат равен $%'#15.2f\n", 123.42 / 12); ?>
Результат виконання коду:
Результат равен $ 10.285000
51Результат равен $00000010.285000
Результат равен $ 10.29
Результат равен $000000000010.29
Результат равен $##########10.29
Пример 7.2. Дополнение строк
<?php echo ""; // Тег, позволяющий отображать все пустые пространства $h = 'Rasmus'; printf("[%s]\n", $h); // Стандартный вывод строки printf("[%12s]\n", $h); // Выравнивание пробелами по правому краю до ширины 12 printf("[%-12s]\n", $h); // Выравнивание пробелами по левому краю printf("[%012s]\n", $h); // Дополнение нулями printf("[%'#12s]\n\n", $h); // Использование специально выбранного символа дополнения '#' $d = 'Rasmus Lerdorf'; printf("[%12.8s]\n", $d); // Выравнивание по правому краю с усечением до 8 символов printf("[%-12.12s]\n", $d); // Выравнивание по левому краю с усечением до 12 символов printf("[%-'@12.10s]\n", $d); // Выравнивание по левому краю, дополнение символом '@', усечение до 10 символов ?>Результат виконання коду:
[Rasmus] [ Rasmus] [Rasmus ] [000000Rasmus] [######Rasmus] [ Rasmus L] [Rasmus Lerdo] [Rasmus Ler@@]
Функция sprintf
Зачастую результат преобразования нужно не выводить на экран, а использовать в самом коде программы. Для этого предназначена функция sprintf. Она позволяет не отправлять выходную информацию браузеру, а присваивать ее какой-нибудь переменной
$hexstring = sprintf("%X%X%X", 65, 127, 245);
Или же она может пригодиться для сохранения выходной информации, которую нужно будет вывести на экран чуть позже:
$out = sprintf("Результат: $%.2f", 123.42 / 12); echo $out;
Функции даты и времени
<?php echo time(); ?>
Функция checkdate
Пример 7.3. Проверка допустимости даты
<?php $month = 9; // Сентябрь (в котором только 30 дней) $day = 31; // 31-е $year = 2018; // 2018 if (checkdate($month, $day, $year)) echo "Допустимая дата"; else echo "Недопустимая дата"; ?>
Результат виконання коду:
Недопустимая дата
Проверка существования файла
<?php if (file_exists("testfile.txt")) echo "Файл существует"; ?>
Результат виконання коду:
Пример 7.4. Создание простого текстового файла
<?php // testfile.php $fh = fopen("testfile.txt", 'w') or die("Создать файл не удалось"); $text = <<<_END Строка 1 Строка 2 Строка 3 _END; fwrite($fh, $text) or die("Сбой записи файла"); fclose($fh); echo "Файл 'testfile.txt' записан успешно "; ?>
- У цьому простому прикладі показана послідовність роботи з усіма файлами.
- Все починається з відкриття файлу за допомогою виклику функції fopen.
- Після цього можна викликати інші функції. В даному випадку в файл йшов запис (fwrite), але можна також читати дані з уже існуючого файлу (fread або fgets) і здійснювати з ним інші дії.
- Робота завершується закриттям файлу (fclose). Хоча програма перед завершенням своєї роботи робить це за вас, але все ж ви повинні упевнитися в тому, що після закінчення роботи з файлом він буде закритий
Таблица 7.5. Режимы работы, поддерживаемые функцией fopen
Режим
Дія
Опис
'r'
читання з початку файла
Відкриття файлу тільки для читання; установка покажчикафайлу на його початок. Повернення FALSE, якщо файлу не існує
'r+'
Читання з початку файла з можливістю запису
Відкриття файлу для читання і запису; установка покажчика файлу на його початок. Повернення FALSE, якщо файлу не існує
'w'
Запис з початку файлуз урізанням його розміру
Відкриття файлу тільки для запису; установка покажчика файлу на його початок і скорочення розміру файлу до нуля. Якщо файлу не існує, спроба його створення
'w+'
Запис з пачатку файла з урізанням його розміру і можливістю читання
Відкриття файлу для читання і запису; установка покажчика файлу на його початок і скорочення його розміру до нуля. Якщо файлу не існує, спроба його створення
'a'
Дописування в кінець файла
Відкриття файлу тільки для запису; установка покажчика файлу на його кінець. Якщо файлу не існує, спроба його створення
'a+'
Дописування в кінець файла з можливістю читання
Відкриття файлу для читання і запису; установка покажчика файлу на його кінець. Якщо файлу не існує, спроба його створення
Читання з файлів
Простіше за все прочитати файл, видобуваючи з нього весь рядок(строку) цілком
Приклад 7.5. Читання файла за допомогою функції fgets(остання буква s в назві функції означає string - рядок(строка))
<?php $fh = fopen("testfile.txt", 'r') or die("Файл не існує або ви не маєте прав на його відкриття"); $line = fgets($fh); fclose($fh); echo $line; ?>
Результат виконання коду:
Строка 1
Можна також отримати з файлу відразу кілька рядків або фрагменти рядків,скориставшись функцією fread, як показано в прикладі 7.6
<?php $text = fread($fh, 3); fclose($fh); echo $text; ?>
Приклад 7.7. Копіювання файла
<?php copy('testfile.txt', 'tesfile2.txt') or die("Копіювання неможливе"); echo "Файл вдачно скопійовано в 'testfile2.txt'"; ?>
Результат виконання коду:
Файл вдачно скопійовано в 'testfile2.txt'
Приклад 7.8. Алтернативний синтаксис для копіювання файла
<?php if (!copy('testfile.txt', 'testfile2.txt')) echo "Копіювання неможливе"; else echo "Файл вдачно скопійовано в 'testfile2.txt'"; ?>
Для переміщення файлу його необхідно перейменувати, як показано в прикладі 7.9
<?php if (!rename('etstfile2.txt', 'tetfile2.new')) echo "Rename is not possible"; else echo "File successfully renamed in 'testfile2.new'"; ?>
Функцію перейменування можна застосовувати і до каталогів. Щоб уникнути попереджень при відсутності вихідних файлів, спочатку для перевірки факту їх існування можна викликати функцію file_exists
Example 7.10 Delete a file
<?php if (!inlink('testfile2.new')) echo "Delete is imposible "; else echo "Файл 'testfile2.new' видалено вдачно"; ?>
Результат виконання коду:
Пример 7.11. Обновление файла
<?php $fh = fopen("testfile.txt", 'r+') or die("Збій відкриття файла"); $text = fgets($fh); fseek($fh, 0, SEEK_END); fwrite($fh, "$text") or die("Збій запису в файл"); fclose($fh); echo "Файл 'testfile.txt' вдачно оновлено"; ?>
- fopen відкриває файл testfile.txt для читання та запису 'r+'
- далі використовується функція fgets(де считується перший рядок, який присвоюється змінній $text)
- після, використовується функція fseek, щоб перемістити вказівник файла в самий кінець
- fwrite записує "text" в файл $fh
З функцією fseek можна задіяти ще два режими установки покажчика: SEEK_SET і SEEK_CUR.
Пример 7.12. Обновление файла с использованием блокировки
<?php $fh = fopen("testfile.txt", 'r+') or die("Сбой открытия файла"); $text = fgets($fh); if (flock($fh, LOCK_EX)) { fseek($fh, 0, SEEK_END); fwrite($fh, "$text") or die("Сбой записи в файл"); flock($fh, LOCK_UN); } fclose($fh); echo "Файл 'testfile.txt' успешно обновлен"; ?>
Результат виконання коду:
Чтение всего файла целиком
Пример 7.13. Использование функции file_get_contents
<?php echo "<pre>"; // Тег, позволяющий отображать переводы строк echo file_get_contents("testfile.txt"); echo "</pre>"; // Прекращение действия тега pre ?>
Результат виконання коду:
Строка 1
Строка 2
Строка 34 Строка 1
Строка 2
Строка 3
kjh
С ее помощью можно извлечь файл с сервера через Интернет
Пример 7.14. Захват главной страницы сайта O'Reilly
<?php echo file_get_contents ("http://oreilly.com"); ?>
Завантаження файлів на веб-сервер
<?php // upload.php echo <<<_END <html> <head> <title>PHP-форма для загрузки файлов на сервер</title> </head> <body> <form method='post' action='7practicum_r_nixon.php' enctype='multipart/form-data'> Выберите файл: <input type='file' name='filename' size='10'> <input type='submit' value='Загрузить'> </form> _END; if ($_FILES) { $name = $_FILES['filename']['name']; move_uploaded_file($_FILES['filename']['tmp_name'], $name); echo "Загружаемое изображение '$name'<br><img src='$name'>"; } echo "</body></html>"; ?>
- if ($_FILES) - чи є файл
- $_FILES['filename']['name']
- 'filename' - шлях до завантажувального файлу
- 'name' - оригінальне ім'я файлу
- move_uploaded_file - перемістити завантажувальний файл
- $_FILES['filename']['tmp_name'] - звідки
- $name - куди
Результат виконання коду:
Використання масива $_FILES
Під час завантаження файлу на сервер в масиві $ _FILES зберігаються п'ять елементів, показаних в табл. 7.6 (де використовується файл завантаження, ім'я якого надається відправляємою серверу формою).
Елемент масиву
Вміст
$_FILES['file']['name']
Ім'я завантаженого файла(напр. smiley.jpg)
$_FILES['file']['type']
Тип вмісту файла(напр. image/jpeg)
$_FILES['file']['size']
Розмір файлу в бітах
$_FILES['file']['tmp-name']
Ім'я тимчасового файла, збереженого на сервері
$_FILES['file']['error']
<Код помилки, що отримується після завантаження файла
Результат виконання коду:
Поточна версія PHP: 8.2.29
Таблиця 7.7. Деякі найбільш розповсюдженні типи інформації, які використовуються в інтернеті
application/pdf
image/gif
multipart/form-data
text/xml
application/zip
image/jpeg
text/css
video/mpeg
audio/mpeg
image/png
test/html
video/mp4
audio/x-wav
image/tiff
text/plain
video/quicktime
Більш безпечніша версія завантаження файлів на веб-сервер
Приклад 7.16
<?php echo <<<_END <html> <head> <title>PHP-форма для завантаження файлів на сервер</title> </head> <body> <form method='post' action='upload2.php' enctype='multipart/form-data'> Виберіть файл з розширенням JPG, GIF, PNG або TIF: <input type='file' name='filename' size='10'> <input type='submit' value='Заантажити'> </form> _END; if ($_FILES) { $name = $_FILES['filename']['name']; switch($_FILES['filename']['tyoe']) { case 'image/jpeg': $ext = 'jpg'; break; case 'image/gif': $ext = 'gif'; break; case 'image/png': $ext = 'png'; break; case 'image/tiff': $ext = 'tif'; break; default: $ext = ''; break; } if ($ext) { $n = "image.$ext"; move_uploaded_file($_FILES['filename']['tmp_name'], $n); echo "Завантожено зображення '$name' під ім'ям '$n':<br>"; echo "<img src='$n'>"; } else echo "'$name' - неприйнятний файл забраження"; } else echo "Завантажити забраження не вдалося"; echo "<body></html>" ?>
Результат виконання коду:
PHP-форма для завантаження файлів на сервер
Завантажити забраження не вдалося
Системні виклики
<?php $cmd = "ls"; //Linux, Unix & Mac // $cmd = "dir"; //Windows exec(escapeshellcmd($cmd), $output, $status); if ($status) echo "Команда exes не виконана"; else { echo "список файлів і директорій"; echo "<pre>"; foreach($output as $line) echo htmlspecialchars("$line\n"); echo "</pre>"; } ?>
Результат виконання коду:
список файлів і директорій11_obrabotka_form_nixon.php
7practicum_r_nixon.php
8mysql_sklar.php
array_r_nixon.php
examples
flex_css.php
footer.php
function.php
functions.php
header.php
home.php
html.php
imena
index.php
javascript_notice.php
learn_mysql
mysql_notice.php
mysql_php_nixon.php
mysql_php_nixon_2.php
mysql_r_nixon.php
new_html5_nixon.php
object_d_sklar.php
object_r_nixon.php
oop-php-notice.php
php_notice.php
pr2_1
scripts
semantic_elements.gif
shablon.php
start.html
start.php
style_flex.css
table_7.1.html
tesfile2.txt
testfile.txt
variable.php
web_forms.php
zadanie_1
zadanie_1.zip
Функція htmlspecialchars викликається з метою перетворення будь-яких спеціальних символів, що повертаються системою, в символи, які можуть бути сприйняті і правильно відображені як код HTML, впорядковуючи тим самим висновок.
-
Функція exec сприймає три аргумента.
- Cаму команду(в попередньому випадку це $cmd)
- Масив, в який система всавить інформацію що отримає в результаті виконання команди (в попердньому випадку це $output)
- Змінну для зберігання статусу виклику що повертається (в попередньому випадку це $status)