Функция ресайза и кропа изображений на PHP

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

Код функции:

 

Теперь можно вызвать функцию например так:

Важное:

  • Прозрачность гифа будет утеряна.
  • В папке images надо создать папку resized.
  • Из-за кэширования уже созданных картинок, функция не будет перегружать сервер.

Эта функция есть небольшая модификация этой взятой с форума по NetCat.

Отправка Google Формы с сайта разными способами

Сейчас люди частенько юзают сервис google forms для любых форм на сайте. Поэтому часто возникает вопрос о встраивании Google формы на сайт, её стилизации и обработки ошибок в стиле сайта, поэтому мы разберем все это дело в текущей статье.

Зачем вообще использовать сервис гугл форм:

  • Формы создавать просто и быстро;
  • Результаты форм сразу сохраняются в таблице на облачном гугл диске;
  • Уведомление на email о заполнении вам так же приходит;
  • Это бесплатно.

Теперь к делу:

Создание формы:

Итак едем вот сюда жмем на всякие кнопки — создаем форму с нужными полями, там поддерживаются всякие разные типы полей. Я взял несколько стандартных типов полей и получилась вот такая форма.

Теперь будем втыкать форму на сайт.

Способ 1: iframe

Гугл предложит нам самый простой и быстрый способ встраивания — через iframe. Так что просто втыкаем айфрейм на страницу.

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

Способ 2: собственный html + jQuery + ajax

Инспектируем форму и достаем значения атрибутов name у полей и атрибут action у формы:

 

Отправка Google Формы с сайта разными способами

Создаем собственную форму и вставляем полям такие же атрибуты name как и у формы в айфрейме:

 

Теперь отправим форму аяксом с помощью jQuery:

Этот способ подойдет, если ничего важного в форме нет, и нет опасности что вас заспамят.

Способ 3: собственный html + jQuery + ajax + php

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

Вешаем на неё событие:

И пишем php-обработку под это дело:

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

 

ДЕМО.

Работа с API облачного хранилища copy.com

Регистрация и подготовка:

  • Едем сюда https://www.copy.com/developer/signup и регистрируемся как разработчик.
  • Потом здесь регистрируем наше приложение и ставим все галочки. Получаем Consumer key и Consumer secret и запоминаем их.
  • Качаем мастер архив отсюда и заливаем папку на хостинг, в файле config.php изменяем значение параметра $callbackURL на верный путь до файла get_access_token.php.
  • Заходим в эту папочку и вписываем на странице Set Consumer Key/Secret наши запомненные ранее данные
  • Теперь едем в Default App Permissions и внизу жмем Manually continue to Copy Auth page на следующей странице жмем Allow — нас возвратят обратно и вручат Access Token и Access Token Secret

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

На этом танцы с бубном завершены и можно приступать к самой работе.

Закачивание и изменение:

Тут соль в том, что типа есть форма, в которую подгружают файл и пишут его название, а он попадает в наше облачное хранилище:

 

Удаление

Вот и все, вроде совсем не сложно

TP link

Руководство китайской компании TP-LINK приняло решение запретить смену прошивки роутеров, производимых компанией, на альтернативную. Разработчикам Mesh-сети MetaMesh, которые используют беспроводные маршрутизаторы этой фирмы, подтвердили в службе поддержки, что следующее обновление принесёт блокировку загрузчика.

 

Это заблокирует возможность отката прошивки на предыдущую версию или установку альтернативной. Такие изменения связаны с новыми требованиями Федеральной комиссии по связи США. Согласно им, пользователю запрещено иметь возможности вмешательства в параметры Wi-Fi-адаптера, которые могут повлиять на формирование сигнала.

 

Ограничения уже действуют на модели Archer C7 V2, Archer C1900 V1, Touch P5 V1, Archer C2600 V1, Archer C3200 V1, Archer C2 V1, Archer C5 V2, Archer C8 V1, Archer C9 V1, TL-WR841N V11, TL-WDR3500 V1, TL-WDR3600, TL-WR940N V3.0, TL-WR1043ND V3.0, TL-WR710N(USA) и TL-WR841N V9.0, а в будущем список будет расширен на все выпускаемые версии.

 

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

Online_Icon

Часто на сайтах можно видите фразу, сейчас данный сайт просматривает столько-то человек, или даже список зарегистрированных посетителей, находящихся в данным момент на сайте. Обычно такой сервис называют “Список посетителей OnLine”. Учитывая, что у посетителя может динамически меняться IP-адрес, или наоборот несколько посетителей могут выходить в Интернет из под одного IP-адреса, для подсчёта уникальных посетителей на сайте прибегают к сессиям. Создадим таблицу session в которой будем хранить уникальные идентификаторы сессии (SID), назначенные посетителям.

Таблица session

Таблица имеет три поля – id_session, поле, куда помещается SID сессии, поле putdate, для того, хранения времени обращения посетителя к страницам сайта и поле user, которое нами использоваться не будет, но в котором можно хранить имя пользователя, если у вас имеется система авторизации и вы хотите различать гостей и авторизованных пользователей. Предполагается, что имя пользователя помещается в элемент суперглобального массива $_SESSION[‘user’] – если вас интересует авторизация на PHP, с нейм можно ознакомиться по ссылке

В начало каждой страницы сайта, которая будет участвовать в регистрации посетителей следует при помощи конструкции require_once() поместить следующий код.

Скрипт регистрации посетителей в таблице session

Протокол HTTP не является сессионным протоколом, поэтому мы можем фиксировать только обращения посетителей к страницам сайта – сколько после этого посетитель будет читать страницу – одному богу известно – получить эту информацию мы не сможем. Поэтому мы будем считать, что если посетиель не обращается к страницам сайта более 20 минут – он ушёл и его можно удалять из таблицы session.

Теперь нам остаётся только вывести содержимое таблицы session или подсчитать число посетителей в ней.

Выводим содержимое таблицы session

Для установки соединения с базой данных, нам потребуется конфигурационный файл config.php, следующего содержания.

Конфигурационный файл config.php

Скрипт передачи файлов методом POST предоставлен Арсеньевым Алексеем (больше известным на нашем форуме как JIEXA).

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

уравнение 3 неизвестных

Скрипт предназначен для решения системы уравнений с тремя неизвестными по правилу Крамера.

Напоминаем, что если детерминант матрицы равен 0, это означает, что система уравнений линейно зависима и получить единственное решение невозможно.

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

Метод Гаусса-Жордана
/****************
4x + 7y + 2z = 34
3x + 1y + 5z = 21
8x + 2y + 6z = 52
****************/
$matrix[0] = array(4, 7, 2);
$matrix[1] = array(3, 1, 5);
$matrix[2] = array(8, 2, 6);
$b[0] = 34;
$b[1] = 21;
$b[2] = 52;
// Решаем уравнение
list(list($x, $y, $z)) = gaussj($matrix, $b);
echo “Решение
“;
echo “X = $x
“;
echo “Y = $y
“;
echo “Z = $z
“;
// Проверка
echo 4 * $x + 7 * $y + 2 * $z;
echo ”
“;
echo 3 * $x + 1 * $y + 5 * $z;
echo ”
“;
echo 8 * $x + 2 * $y + 6 * $z;
// Решение системы линейных уравнений
// методом Метод Гаусса-Жордана
function gaussj($a, $b)
{
$n = count($a);
for($j = 0; $j < $n; $j++)
{
$ipiv[$j] = 0;
}
for($i = 0; $i < $n; $i++)
{
$big = 0;
for($j = 0; $j < $n; $j++)
{
if($ipiv[$j] != 1)
{
for($k = 0; $k < $n; $k++) { if($ipiv[$k] == 0) { if(abs($a[$j][$k]) >= $big)
{
$big = abs($a[$j][$k]);
$irow = $j;
$icol = $k;
}
}
else if($ipiv[$k] > 1)
{
return “Матрица сингулярна”;
}
}
}
}
$ipiv[$icol] = $ipiv[$icol] + 1;
if ($irow != $icol)
{
for($l = 0; $l < $n; $l++)
{
$dum = $a[$irow][$l];
$a[$irow][$l] = $a[$icol][$l];
$a[$icol][$l] = $dum;
}
$dum = $b[$irow];
$b[$irow] = $b[$icol];
$b[$icol] = $dum;
}
$indxr[$i] = $irow;
$indxc[$i] = $icol;
if($a[$icol][$icol] == 0) return “Матрица сингулярна”;
$pivinv = 1 / $a[$icol][$icol];
$a[$icol][$icol] = 1;
for($l = 0; $l < $n; $l++) $a[$icol][$l] = $a[$icol][$l] * $pivinv;
$b[$icol] = $b[$icol] * $pivinv;
for($ll = 0; $ll < $n; $ll++)
{
if($ll != $icol)
{
$dum = $a[$ll][$icol];
$a[$ll][$icol] = 0;
for($l = 0; $l < $n; $l++) { $a[$ll][$l] = $a[$ll][$l] – $a[$icol][$l] * $dum; } $b[$ll] = $b[$ll] – $b[$icol] * $dum; } } } for($l = $n -1; $l >= 0; $l–)
{
if($indxr[$l] != $indxc[$l])
{
for($k = 1; $k < $n; $k++) { $dum = $a[$k][$indxr[$l]]; $a[$k][$indxr[$l]] = $a[$k][$indxc[$l]]; $a[$k][$indxc[$l]] = $dum; } } } // $b – решение уравнения // $a – обратная матрица return array($b, $a); } ?>
Функция gaussj() принимает два параметра: квадратную матрицу коэффециентов $a и вектор свободных членов $b. На выходе также возвращаются два решения: $b содержит значения переменных, а $a – обратную матрицу. Если задача состоит только в нахождении обратной матрицы можно воспользоваться решением из темы Как найти обратную матрицу?

Класс для генерации CSV-файла на PHP

CSV-файлы очень популярны для представления электронных таблиц – файл является текстовым, ячейки таблицы в нём разделяются точкой с запятой. Представляем вашему вниманию класс, разработанный Кондраковым Александром Владимировичем, позволяющий генерировать CSV-файл из массива PHP.

Генерация CSV-файла

Перевод русского текста в транслит

Скрипт переводит русский текст в транслит (предоставлен Дрыгой Андреем (anddriga@yandex.ru)).

Перевод русского текста в транслит

Подсветка синтаксиса кода на PHP

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