Полезные PHP код-сниппеты — для опытных
Несколько готовых сниппетов для решения конкретных задач в PHP. Эти приемы рассчитаны на пользователей, которые знакомы с PHP. Коды ниже могут стать готовым решением или основной для очередного велосипеда. А также хорошей основой для понимания некоторых моментов, касательно того как решаются разные задачи в PHP. В общем, читайте и выносите для себя что-то новое...
См. также: Полезные PHP коды - для новичков
Как наложить водяной знак или текст на картинку в PHP
Накладываем водяной знак
Пример ниже показывает как наложить одну картинку на другую, при этом первой картинке будет задана прозрачность в 60% и размещена она будет в нижний правый угол второй картинки.
/**
* Накладывает указанный водяной знак на указанную картинку и выводит результат на экран.
* @param string $img_path Путь до картинки JPG формата. Исходная картинка
* @param string $watermark_path Путь до картинки JPG формата - картинка - водяной знак
* @param string [$save_path = NULL] Путь для сохранения файла. Если равен NULL, изображение будет выведено на экран в бинарном виде.
*/
function apply_watermark( $img_path, $watermark_path, $save_path = NULL ){
// получаем размеры обоих картинок
$size = getimagesize( $img_path );
$size_wm = getimagesize( $watermark_path );
$height = $size[1]; // высота
$width = $size[0]; // ширина
$height_wm = $size_wm[1];
$width_wm = $size_wm[0];
// определим формат
$img_ext = preg_match('~.png$~i', $img_path) ? 'png' : 'jpg';
$wm_ext = preg_match('~.png$~i', $img_path) ? 'png' : 'jpg';
// загружаем изображения
$image = $img_ext === 'jpg' ? imagecreatefromjpeg( $img_path ) : imagecreatefrompng( $img_path );
$watermark = $wm_ext === 'jpg' ? imagecreatefromjpeg( $watermark_path ) : imagecreatefrompng( $watermark_path );
$opacity = 60; // прозрачность
// высчитываем координаты для наложения водяного знака
$x = $width - $width_wm;
$y = $height - $height_wm;
// объединяем две картинки
imagecopymerge( $image, $watermark, $x, $y, 0, 0, $width_wm, $height_wm, $opacity );
if( ! $save_path ){
// задаем заголовок, чтоб вывести результат в браузере
header('Content-Type: image/jpeg');
}
imagejpeg( $image, $save_path );
// очищаем память
imagedestroy( $image );
imagedestroy( $watermark );
}
Пример использования функции
$uploads = wp_get_upload_dir()['basedir'];
$img_path = $uploads . '/2017/03/Poisk-nuzhnyh-kvorkov-po-razdelam.png';
$watermark_path = $uploads . '/2013/10/yandex.png';
// записываем результат в файл my_image.jpg в корне сайта
apply_watermark( $img_path, $watermark_path, $_SERVER['DOCUMENT_ROOT'] .'/my_image.jpg' );
echo '<img src="'. home_url('my_image.jpg') .'" alt="">';
Накладываем текст
Для нанесения текста в любой кодировке и на любом языке возможно благодаря сторонним шрифтам.
В основе примера используется функция — imagettftext(). Она может принимать несколько значений: размер текста в пикселях, цвет, начало текста относительно координат по осям X и Y, сам наносимый текст и самое главное, файл шрифта, который позволит наносить текст в нужной кодировке.
$width = 200; // ширина изображения
$height = 100; // высота изображения
// создаем изображение, на котором будем рисовать
$img = imagecreatetruecolor( $width, $height );
$rgb = 0xFFFFFF; // цвет заливки фона
imagefill( $img, 0, 0, $rgb ); // заливаем холст цветом $rgb
$fontName = "impact.ttf"; // путь к шрифту
$font_sise = 18; // размер шрифта
$textColor = 0x000000; // цвет шрифта
$x = 50; // отступ слева
$y = 50; // отступ справа
// текст, который будем наносить на картинку n обозначает переход на новую строку
$text = 'Текстn кириллица';
// нанесение текста
imagettftext( $img, $font_sise, 0, $x, $y, $textColor, $fontName, $text );
// выводим результат в браузер
header("Content-Type: image/png");
imagepng( $img );
// очищаем память
imagedestroy( $img );
Нанесение на изображение текста с обводкой
Для создания обводки специальных функций в PHP нет. Но её можно сделать через функцию — imagettftext(). Нужно вывести текст много раз - девять. Да, девять раз, из них восемь раз вывод текста нужно делать цветом обводки, постоянно смещая текст 1-2 пикселя влево, вправо, вниз, вверх, влево и вверх, вправо и вверх, вправо и вниз, влево и вниз. И девятый раз выводим текст уже тем цветом, которого он должен быть.
$width = 200; // ширина изображения
$height = 100; // высота изображения
// создаем изображение, на котором будем рисовать
$img = imagecreatetruecolor($width, $height);
$rgb = 0xFFFFFF; // цвет заливки фона
imagefill( $img, 0, 0, $rgb ); // заливаем холст цветом $rgb
$fontName = "impact.ttf"; // путь к шрифту
$fontSise = 18; // размер шрифта
$textColor = 0xFFFFFF; // цвет шрифта
$aroundColor = 0x000000; // цвет обводки
$x = 50; // отступ слева
$y = 50; // отступ справа
// текст, который будем наносить на картинку n обозначает переход на новую строку
$text = "Текстn кириллица";
// обводка текста
imagettftext( $img, $fontSise, 0, $x+2, $y, $aroundColor, $fontName, $text ); // смещение вправо
imagettftext( $img, $fontSise, 0, $x-2, $y, $aroundColor, $fontName, $text ); // смещение влево
imagettftext( $img, $fontSise, 0, $x, $y+2, $aroundColor, $fontName, $text ); // смещение вниз
imagettftext( $img, $fontSise, 0, $x, $y-2, $aroundColor, $fontName, $text ); // смещение вверх
imagettftext( $img, $fontSise, 0, $x+1, $y+1, $aroundColor, $fontName, $text ); // смещение вправо и вниз
imagettftext( $img, $fontSise, 0, $x+1, $y-1, $aroundColor, $fontName, $text ); // смещение вправо и вверх
imagettftext( $img, $fontSise, 0, $x-1, $y-1, $aroundColor, $fontName, $text ); // смещение влево и вверх
imagettftext( $img, $fontSise, 0, $x-1, $y+1, $aroundColor, $fontName, $text ); // смещение влево и вниз
imagettftext( $img, $fontSise, 0, $x, $y, $textColor, $fontName, $text ); // вывод самого текста
// выводим результат в браузер
header("Content-Type: image/png");
imagepng( $img );
imagedestroy( $img ); // очищаем память
Нанесение на изображение текста с подчеркиванием
Для этих целей стандартных PHP функций нет. Поэтому нужно вывести текст и нарисовать под ним линию. Сложность в том, что необходимо знать координаты нанесения линии и ее длину. Для определения начала линии можно воспользоваться координатами самого текста, только прибавить к значению по оси Y размер самого текста. А для получения длины, можно воспользоваться функцией imagettfbbox(), которая определяет положение текста. Функция возвращает массив с восемью элементами, координаты углов, обрамляющей текст рамки. Используя полученные, координаты, можно высчитать длину текста.
$width = 200; // ширина изображения
$height = 100; // высота изображения
// создаем изображение, на котором будем рисовать
$img = imagecreatetruecolor( $width, $height );
$rgb = 0xFFFFFF; // цвет заливки фона
imagefill( $img, 0, 0, $rgb ); // заливаем холст цветом $rgb
$fontName = "impact.ttf"; // путь к шрифту
$fontSise = 18; // размер шрифта
$textColor = 0x000000; // цвет шрифта
$paddingLine = 3; // отступ линии от начала текста
$x = 50; // отступ слева
$y = 50; // отступ справа
// текст, который будем наносить на картинку
$text = "Любой текст";
// выводим текст
imagettftext( $img, $fontSise, 0, $x, $y, $textColor, $fontName, $text );
// определяем размер текста
$textbox = imagettfbbox( $fontSise, 0, $fontName, $text );
// вычисляем ширину текста
$text_width = $textbox[2] - $textbox[ 0];
// толщина линии
imagesetthickness( $img, 3 );
// рисуем линию
imageline( $img, $x, $y + $paddingLine, $x + $text_width, $y + $paddingLine, $textColor );
// выводим результат в браузер
header("Content-Type: image/png");
imagepng( $img );
imagedestroy( $img ); // очищаем память
Экранирование строк в регулярных выражениях
Если в «регулярку» передается динамичная строка, то её принято экранировать с помощью preg_quote(). Однако иногда такой экран может не подойти, когда, например, не нужно экранировать символ : допустим в url.
В этом случае может пригодится менее известная функция quotemeta() - она не экранирует символы: { } = ! < > | : -.
Смотрите разницу:
preg_quote( '. + * ? [ ^ ] $ ( ) { } = ! < > | : -' );
// получим: \. \+ \* \? \[ \^ \] \$ \( \) \{ \} \= \! < \> \| \: \-
quotemeta( '. + * ? [ ^ ] $ ( ) { } = ! < > | : -' );
// получим: \. \+ \* \? \[ \^ \] \$ \( \) { } = ! < > | : -
Обратите внимание, что символ / не является служебным и не экранируется нигде.
В preg_quote() можно указать второй параметр, тогда указанный там символ тоже будет экранироваться:
$str = '(40км/ч)'; preg_quote( $str ); //> (40км/ч) preg_quote( $str, '/' ); //> (40км/ч)
Как разбить предложение на слова в PHP
Чтобы разбить строку на отдельные слова, можно использовать PHP функцию – strtok( $str, $token ). Она принимает два параметра: строку и символы, по которым строка будет разбиваться на части.
strtok() разбивает строку $str на подстроки (токены), используя в качестве разделителей символы из $token.
Например, строку "Это примерная строка" можно разбить на отдельные слова используя пробел в качестве разделителя.
$string = "Бог наградил в нем слог и ум покорный,
Стал Моисей известный господин...";
$sep = " \n\t";
// В качестве разделителей используем пробел, табуляцию и перевод строки
$token = strtok( $string, $sep );
while ( $token !== false ) {
echo "word = $token\n";
$token = strtok( $sep );
}
/*
Word = Бог
Word = наградил
Word = в
Word = нем
Word = слог
Word = и
Word = ум
Word = покорный,
Word = Стал
Word = Моисей
Word = известный
Word = господин...
*/
Заметьте, что исходная строка передается только при первом вызове strtok(). Последующим вызовам передаются только разделители, так как эта функция сохраняет исходную строку и запоминает позицию в этой строке между вызовами. Для работы с новой строкой нужно снова вызвать функцию с двумя аргументами.
Обратите внимание, что в параметре token можно использовать несколько разделителей. Строка будет делиться по любому найденному символу, присутствующему в этом параметре.
Склонение слов после чистительных (на PHP)
Не редко возникает необходимость вывода числа с подписью и в этом случае в русском языке окончание подписи будет зависеть от того какое число указано. Например, вывод количества дней: 1 день, 2 дня, 5 дней. Как видно форма слова меняется в зависимости от числа.
Таким образом нам нужна функция, которая бы склоняла слова, которые идут после числа.
Ниже я постарался написать универсальный вариант склонение слов после числительного.
/**
* Word declension after a number.
*
* // Examples of invocation:
* num_decline( $num, 'книга,книги,книг' )
* num_decline( $num, 'book,books' )
* num_decline( $num, [ 'книга','книги','книг' ] )
* num_decline( $num, [ 'book','books' ] )
*
* @param int|string $number The number that is followed by the word. You can use HTML tags.
* @param string|array $titles Variants of words for numbers.
* @param bool $show_number Set to `false`, when you don't want to output the number itself.
*
* @return string For example: 1 book, 2 books, 10 books.
*
* @version 3.2
*/
function num_decline( $number, $titles, $show_number = true ): string {
if( is_string( $titles ) ){
$titles = preg_split( '/, */', $titles );
}
// when 2 elements are specified
if( empty( $titles[2] ) ){
$titles[2] = $titles[1];
}
$cases = [ 2, 0, 1, 1, 1, 2 ];
$intnum = abs( (float) strip_tags( $number ) );
$intnum = (int) round( $intnum );
$title_index = ( $intnum % 100 > 4 && $intnum % 100 < 20 )
? 2
: $cases[ min( $intnum % 10, 5 ) ];
return ( $show_number ? "$number " : '' ) . $titles[ $title_index ];
}
#1 Пример использования
Удобно, что параметры можно передавать по-разному. Чтобы каждый раз не вспоминать как именно нужно это делать, например:
echo num_decline( 4, 'книга, книги, книг' ); // 4 книги echo num_decline( 5, ['книга','книги','книг'] ); // 5 книг echo num_decline( 4, 'книга, книги, книг', 0 ); // книги
#1 Выведем склоняемый текст до и после числа
$num = 23; echo sprintf( "%s $num %s", num_decline( $num, 'Опубликован,Опубликовано', 0 ), num_decline( $num, 'комментарий,комментария,комментариев', 0 ) ); // Опубликовано 23 комментария
Функция склонения слов после чисел (JS)
Та же самая функция только для JS.
/**
* Склонение слова после числа.
*
* // Примеры вызова:
* num_decline( num, 'книга,книги,книг' )
* num_decline( num, 'book,books' )
* num_decline( num, [ 'книга','книги','книг' ] )
* num_decline( num, [ 'book','books' ] )
*
* @param {int|string} number Число после которого будет слово. Можно указать число в HTML тегах.
* @param {string|array} titles Варианты склонения или первое слово для кратного 1.
* @param {boolean} show_number Указываем тут 00, когда не нужно выводить само число.
*
* @return string Например: 1 книга, 2 книги, 10 книг.
*
* @version 3.1
*/
function num_decline( number, titles, show_number = true ){
if( typeof titles === 'string' ){
titles = titles.split( /, */ )
}
// когда указано 2 элемента
if( typeof titles[2] === 'undefined' ){
titles[2] = titles[1]
}
const cases = [ 2, 0, 1, 1, 1, 2 ]
// strip_tags
const intnum = Math.abs( parseInt( `${number}`.replace(/<\/?[^>]+>/gi, '') ) )
let title_index = ( intnum % 100 > 4 && intnum % 100 < 20 )
? 2
: cases[ Math.min( intnum % 10, 5 ) ];
return ( show_number ? `${number} ` : '' ) + titles[ title_index ];
}
Более короткий вариант:
function numDecline( n, titles )
{
return titles[ 1 === n % 10 && 11 !== n % 100 ? 0 : 2 <= n % 10 && 4 >= n % 10 && ( 10 > n % 100 || 20 <= n % 100 ) ? 1 : 2 ]
}
// использование
numDecline( 1, ['книга', 'книги', 'книг'] )
Как получить список файлов внутри папки (включая подпапки) на PHP
Готовая PHP-функция, которая получает список всех файлов, находящихся в заданной папке. Также по умолчанию включаются файлы находящиеся во вложенных папках: параметр $recursive = true.
Результатом работы функции является массив со списком всех файлов (и папок если $include_folders = true).
/**
* Получает пути всех файлов и папок в указанной папке.
*
* @param string $dir Путь до папки (на конце со слэшем или без).
* @param bool $recursive Включить вложенные папки или нет?
* @param bool $include_folders Включить ли в список пути на папки?
*
* @return array Вернет массив путей до файлов/папок.
*/
function get_dir_files( $dir, $recursive = true, $include_folders = false ){
if( ! is_dir($dir) )
return array();
$files = array();
$dir = rtrim( $dir, '/\\' ); // удалим слэш на конце
foreach( glob( "$dir/{,.}[!.,!..]*", GLOB_BRACE ) as $file ){
if( is_dir( $file ) ){
if( $include_folders )
$files[] = $file;
if( $recursive )
$files = array_merge( $files, call_user_func( __FUNCTION__, $file, $recursive, $include_folders ) );
}
else
$files[] = $file;
}
return $files;
}
Использование:
$files = get_dir_files('/home/example.com/wp-includes/');
/*
Array
(
[0] => /home/example.com/wp-includes/ms-settings.php
[1] => /home/example.com/wp-includes/embed.php
[2] => /home/example.com/wp-includes/rest-api.php
[3] => /home/example.com/wp-includes/registration.php
[4] => /home/example.com/wp-includes/cron.php
...
*/
Старый вариант
/**
* Получает пути всех файлов в указанной папке, включая все вложенные уровни.
*
* @param $dir Путь до папки со слэшем на конце или без.
* @return Вернет массив путей до файлов.
*/
function get_dir_files( $dir ){
$filenames = array();
$dir = rtrim( $dir, '/' ); // удалим слэш на конце
if( is_dir($dir) ){
if( $handle = opendir($dir) ){
chdir( $dir );
while( false !== ($file = readdir($handle)) ){
if( $file != "." && $file != '..' ){
if( is_dir($file) ){
$arr = get_dir_files( $file );
foreach( $arr as $value ) $filenames[] = $dir .'/'. $value;
}
else {
$filenames[] = $dir .'/'. $file;
}
}
}
chdir('../');
}
closedir( $handle );
}
return $filenames;
}
$files = get_dir_files('/home/example.com/wp-includes/');
/*
Array
(
[0] => /home/example.com/wp-includes/ms-settings.php
[1] => /home/example.com/wp-includes/embed.php
[2] => /home/example.com/wp-includes/rest-api.php
[3] => /home/example.com/wp-includes/registration.php
[4] => /home/example.com/wp-includes/cron.php
...
*/
Удаление папки (директории)
Этот код полностью удаляет указанную папку, т.е. удаляется папка и все вложенные в нее папки и файлы, включая скрытые файлы (.extension). Для этого добавьте следующую PHP функцию и используйте её где нужно.
/**
* Удаляет текущую директорию и все файлы и папки в ней, включая скрытые файлы (.extension)...
* @param string $folder_path Путь до папки которую нужно удалить
*/
function delete_folder( $folder_path, $delete_self = true ){
$folder_path = untrailingslashit( $folder_path );
$glod = glob( "$folder_path/{,.}[!.,!..]*", GLOB_BRACE );
foreach( $glod as $file ){
if( is_dir($file) )
call_user_func( __FUNCTION__, $file );
else
unlink( $file );
}
if( $delete_self ){
rmdir( $folder_path );
}
}
Поиск файла в папке и подпапках на PHP
Хорошим примером использования рекурсии, может послужить поиск файла в папке и всем вложенным подпапкам.
Для поиска файла, достаточно перебрать все файлы во всех папках и сравнить название файла с искомым. И в случае совпадения добавить путь до файла в массив найденных фалов.
$folderName = ABSPATH; // в какой папке ищем
$fileName = "xml"; // что ищем
$found = search_file( $folderName, $fileName );
print_r( $found );
/* Вернет:
Array
(
[0] => /home/example.com/xmlrpc.php
[1] => /home/example.com/wp-includes/class-wp-xmlrpc-server.php
[2] => /home/example.com/wp-includes/wlwmanifest.xml
)
*/
/**
* Поиск файла по имени во всех папках и подпапках
* @param string $folderName - пусть до папки
* @param string $fileName - искомый файл
* @return array Массив найденных файлов.
*/
function search_file( $folderName, $fileName ){
$found = array();
$folderName = rtrim( $folderName, '/' );
$dir = opendir( $folderName ); // открываем текущую папку
// перебираем папку, пока есть файлы
while( ($file = readdir($dir)) !== false ){
$file_path = "$folderName/$file";
if( $file == '.' || $file == '..' ) continue;
// это файл проверяем имя
if( is_file($file_path) ){
// если имя файла искомое, то вернем путь до него
if( false !== strpos($file, $fileName) ) $found[] = $file_path;
}
// это папка, то рекурсивно вызываем search_file
elseif( is_dir($file_path) ){
$res = search_file( $file_path, $fileName );
$found = array_merge( $found, $res );
}
}
closedir($dir); // закрываем папку
return $found;
}
Массовая замена текста в файлах с помощью PHP или поиск в них
Этот пример может быть полезен, при работе с большим количеством файлов.
Пример ниже покажет, как можно перебрать все файлы в заданной папке, а также во всех вложенных папках и заменить в них строку на строку.
Вместо замены, этот код можно взять за основу, когда нужно создать поиск по файлам в папке и подпапках.
$oldText = 'old text'; // что меняем
$newText = 'new text'; // на что меняем
$folderName = "./files"; // в какой папке меняем
// запускаем функцию
replace_txt( $folderName, $oldText, $newText );
/**
* Функция замены текста во всех файлах папки
* @param string $folderName - пусть до папки
* @param string $oldText - искомый текст
* @param string $newText - на что меняем текст
*/
function replace_txt( $folderName, $oldText, $newText ){
$dir = opendir( $folderName ); // открываем текущую папку
// перебираем папку, пока есть файлы
while( false !== ($file = readdir($dir)) ){
// если это не папка
if( $file != '.' && $file != '..' ){
$file_path = "$folderName/$file";
// это файл
if( is_file($file_path) ){
$file_content = file_get_contents( $file_path ); // получаем конетнт файла
// для работы с файлами в кодировке windows-1251
//$file_content = iconv( "windows-1251", "utf-8", $file_content );
// делаем замену в тексте
$file_content = str_replace( $oldText, $newText, $file_content );
// сохраняем изменения
file_put_contents( $file_path, $file_content );
}
// это папка, рекурсивно вызываем replace_txt()
elseif( is_dir($file_path) ){
replace_txt( $file_path, $oldText, $newText );
}
}
}
closedir( $dir ); // закрываем папку
}
Работа с zip архивами в PHP: запаковка и распаковка файлов
Когда необходимо программно запаковать файлы в zip архив, используйте модуль — ZipArchive, который установлен практически на всех серверах вместе с PHP.
Для работы с модулем, используется одноименный класс – ZipArchive.
Запаковка файлов в zip
Пример показывает как запаковать все папки, подпапки и файлы в них с помощью ZipArchive.
/**
* Create zip archive from specified folder.
*
* @param $source
* @param $destination
* @param bool $include_sourse
*
* @return string
*
* @ver 0.1 (kama)
*/
function zip_folder( $source, $destination, $include_sourse = true ){
$source = str_replace( '\\', '/', rtrim( realpath( $source ), '/' ) );
if( ! file_exists( $source ) )
return 'Error: file not exists';
$zip = new ZipArchive();
if( ! $zip->open( $destination, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE ) )
return 'Error: ZipArchive not installed';
if( $include_sourse )
$zip->addEmptyDir( basename($source) );
if( is_file( $source ) ){
$zip->addFile( $source );
}
elseif( is_dir( $source ) ){
foreach( new RecursiveIteratorIterator( new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST )
as $file_path => $file_obj ){
// Ignore . | .. folders
if( preg_match('~/[.]{1,2}$~', $file_path) )
continue;
$file_rel_path = str_replace( "$source/", '', $file_path );
if( $include_sourse )
$file_rel_path = basename($source) .'/'. $file_rel_path;
if( is_dir( $file_path ) ){
$zip->addEmptyDir( $file_rel_path );
}
elseif( is_file( $file_path ) ){
$zip->addFile( $file_path, $file_rel_path );
}
}
}
$zip->close();
return 'Done';
}
Использвоание:
$source = __DIR__ . '/wp-content'; $destination = __DIR__ . '/_'. basename($source) .'-'. date( 'd-m-Y' ) . '.zip'; echo zip_folder( $source, $destination );
Распаковка файлов из zip
Теперь, пример распаковки zip архива с помощью ZipArchive.
function unzip_file( $file_path, $dest ){
$zip = new ZipArchive;
if( ! is_dir($dest) ) return 'Нет папки, куда распаковывать...';
// открываем архив
if( true === $zip->open($file_path) ) {
$zip->extractTo( $dest );
$zip->close();
return true;
}
else
return 'Произошла ошибка при распаковке архива';
}
// использование
$zipfile = 'test.zip'; // путь до файла архива
$pathdir = 'test/'; // путь к папке, в которую будет распакован архив
$done = unzip_file( $zipfile, $pathdir );
if( is_string($done) ){
echo 'Ошибка: '. $done;
}
В WordPress для распаковки архивов есть специальные функция (работают только в админке) unzip_file()
Как перевести цвет из HEX в RGB и наоборот в PHP
Перевод цвета из HEX в RGB
## перевод цвета из HEX в RGB
function hex_to_rgb( $color ){
// проверяем наличие # в начале, если есть, то отрезаем ее
if ( $color[0] == '#' ) {
$color = substr( $color, 1 );
}
// разбираем строку на массив
if ( strlen($color) == 6 ) {
// если hex цвет в полной форме - 6 символов
list( $red, $green, $blue ) = array(
$color[0] . $color[1],
$color[2] . $color[3],
$color[4] . $color[5],
);
}
elseif ( strlen($cvet) == 3 ) {
// если hex цвет в сокращенной форме - 3 символа
list( $red, $green, $blue ) = array(
$color[0]. $color[0],
$color[1]. $color[1],
$color[2]. $color[2],
);
}
else {
return false;
}
// переводим шестнадцатеричные числа в десятичные
$red = hexdec( $red );
$green = hexdec( $green );
$blue = hexdec( $blue );
return array(
'red' => $red,
'green' => $green,
'blue' => $blue,
);
}
// пример использования
$colorHex = '#FFAA00' ;
$result = hex_to_rgb( $colorHex );
print_r( $result );
/*
Array (
[red] => 255
[green] => 170
[blue] => 0
)
*/
Перевод цвета из RGB в HEX
## перевод цвета из RGB в HEX
function rgb_to_hex( $color ) {
$red = dechex( $color[0] );
$green = dechex( $color[1] );
$blue = dechex( $color[2] );
return "#$red$green$blue";
}
// пример использования
$colorRgb = array(125, 255, 0);
$result = rgb_to_hex($colorRgb);
echo $result; //> #7dff0