// dest – результирующее изображение
// w – ширина изображения
// ratio – коэффициент пропорциональности
$w = 90; // квадрат 90x90
$h = 90;
// создаём исходное изображение на основе исходного файла и определяем его размеры
$w_src = imagesx($im); //вычисляем ширину
$h_src = imagesy($im); //вычисляем высоту изображения
if ($w_src !== $h_src) {
exit ('<h4>Стороны изображения для загрузки должны быть равны. Квадрат. Например 256*256.<br>Рекомендую использовать готовые аватары со специализированных сайтов.<br>
Или подготовьте картинку в графическом редакторе</h4><br><i>p.s. грузим аватары, а не картины</i>');
}
// создаём пустую квадратную картинку именно truecolor!, иначе будет 8-битный результат
$dest = imagecreatetruecolor($w,$w);
$white = imagecolorallocate($dest, 255, 255, 255);
imagefill($dest, 0, 0, $white);
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $h_src);
$date=time(); //вычисляем время в настоящий момент.
imagejpeg($dest, $path.$date.".jpg");//сохраняем изображение формата jpg в нужную папку, именем будет текущее время. Сделано, чтобы у аватаров не было одинаковых имен.
$avatar = $path.$date.'.jpg';//заносим в переменную путь до аватара.
$delfull = $path.$filename;
unlink ($delfull);//удаляем оригинал загруженного изображения, он нам больше не нужен. Задачей было – получить миниатюру.
}
else
{
//в случае несоответствия формата, выдаем соответствующее сообщение
exit ("Аватар должен быть в формате <strong>JPG,GIF или PNG</strong>"); //останавливаем выполнение сценариев
}
//конец процесса загрузки и присвоения переменной $avatar адреса загруженной авы
}
Скрипт создает и присваивает пользователю аватар из выбранной им картинки и загружает его под уникальным именем в папку avatars. Листинг подробнейший, мне кажется, здесь пояснения не нужны.
18. Работа с обычным пользователем
18.1 Скрипт работы с пользователем
Скрипт аналогичен коду использумому для работы с администратором в индексном файле папки «users» за исключением того, что пользователь видит и может редактировать только свои данные. Кроме того он не может поменять свой логин. За это отвечает свойство Readonly в поле ввода логина.
За обработку данных отвечает файл «edituser.php».
Листинг 32. edituser.php Путь: news/chat/admin/users/ edituser.php
<?php
error_reporting(E_ALL);
require_once $_SERVER['DOCUMENT_ROOT'] . '/chat/admin/access.php';
/*.................Редактирование пользователя....................*/
if (isset($_POST['action']) and $_POST['action'] == 'Редактировать') {
include $_SERVER['DOCUMENT_ROOT'] . '/chat/dsn.php';
try {
$sql = 'SELECT id, login, email, img FROM users WHERE id = :id';
$s = $dsn->prepare($sql);
$s->bindValue(':id', $_POST['id']);
$s->execute();
} catch (pdoException $e) {
$error = 'Ошибка при получении сведений об авторе.';
include $_SERVER['DOCUMENT_ROOT'] . '/chat/admin/users/error.html.php';