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)