Публикации с тегом "PHP"

Получение даты из MySQL в PHP

Как известно, в MySQL есть два основных типа данных для хранения дат: date и datetime. Второй вариант, по сути, является расширенным вариантом первого и позволяет помимо даты хранить и время. При извлечении из MySQL данных такого типа мы получаем строки соответственно следующих форматов:

2012-03-03
2012-03-03 12:00:00

Однако в PHP в большинстве функциях работы с датами используется так называемый формат даты Unix timestamp, представляющий из себя число — количество секунд между "эпохой Юникс" (полночью первого января 1970 года) и текущим временем.

Можно при помощи парсинга получить из вышеупомянутых строк значения года, месяца и т.д. и передать их в PHP-функцию mktime, но я предлагаю вариант проще. Существует MySQL-функция Unix_timestamp, которая позволяет преобразовать дату из формата MySQL в формат Unix timestamp на этапе запроса. Используется следующим образом:

SELECT created                 AS created_mysql,
       Unix_timestamp(created) AS created_unix
FROM   articles;

Получение случайного HTML-цвета при помощи PHP

Оставлю это тоже здесь, может кому-то пригодится. Этой функцией я раскрашиваю теги в облаке на главной:

function random_html_color()
{
    return sprintf( '#%02X%02X%02X', rand(0, 255), rand(0, 255), rand(0, 255) );
}

Каждая RGB-составляющая цвета генерируется с помощью rand(0, 255), сузив разброс до, скажем, rand(0, 120) можно генерировать случайные, но темные цвета.

Русская дата на PHP

Хочу поделиться функцией, которая позволяет сформировать дату с локализованными месяцами и днями недели:

function rusdate($d, $format = 'j %MONTH% Y', $offset = 0)
{
    $montharr = array('января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря');
    $dayarr = array('понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота', 'воскресенье');
 
    $d += 3600 * $offset;
 
    $sarr = array('/%MONTH%/i', '/%DAYWEEK%/i');
    $rarr = array( $montharr[date("m", $d) - 1], $dayarr[date("N", $d) - 1] );
 
    $format = preg_replace($sarr, $rarr, $format); 
    return date($format, $d);
}

Первый параметр — юникс-дата, второй — формат выводимой даты. Оба параметра идентичны параметрам PHP-функции date(), однако в формате можно передать два дополнительных шаблона:

%MONTH% — русское название месяца (родительный падеж)
%DAYWEEK% — русское название дня недели

Облако тегов на PHP

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

Некоторые теги повторяются у различных статей, такие теги становятся популярными. На этом сайте, допустим, были бы популярны теги PHP и HTML.

Облако тегов — это блок с определенным количеством самых популярных тегов сайта. При чем, чем популярнее тег, тем больше визуально он выглядит в облаке.

Хранение тегов в базе данных

Для начала определимся, каким образом можно хранить теги для статей в базе данных. Просто хранить теги через запятую в текстовом поле для каждой статьи — плохое решение, так как реализация построения облака и поиска по тегам будет очень сложной и медленной. Самый оптимальный способ, я считаю — это связь "многие ко многим" между таблицами статей и тегов при помощи промежуточной таблицы.

Создание капчи (captcha) на PHP часть 2

В предыдущей статье про создание капчи на PHP я обещал показать пример использования созданной капчи на практике. Вот, наконец, руки дошли. В вышеупомянутой статье у нас получилась следующая реализация капчи:

<?php
 
  $letters = 'ABCDEFGKIJKLMNOPQRSTUVWXYZ';
 
  $caplen = 6;
  $width = 120; $height = 20;
  $font = 'comic.ttf';
  $fontsize = 14;
 
  header('Content-type: image/png');
 
  $im = imagecreatetruecolor($width, $height);
  imagesavealpha($im, true);
  $bg = imagecolorallocatealpha($im, 0, 0, 0, 127);
  imagefill($im, 0, 0, $bg);
 
  putenv( 'GDFONTPATH=' . realpath('.') );
 
  $captcha = '';
  for ($i = 0; $i < $caplen; $i++)
  {
    $captcha .= $letters[ rand(0, strlen($letters)-1) ];
    $x = ($width - 20) / $caplen * $i + 10;
    $x = rand($x, $x+4);
    $y = $height - ( ($height - $fontsize) / 2 );
    $curcolor = imagecolorallocate( $im, rand(0, 100), rand(0, 100), rand(0, 100) );
    $angle = rand(-25, 25);
    imagettftext($im, $fontsize, $angle, $x, $y, $curcolor, $font, $captcha[$i]);
  }
 
  session_start();
  $_SESSION['captcha'] = $captcha;
 
  imagepng($im);
  imagedestroy($im);
 
?>