Архив метки: php

Аналог strtotime в Java

На работе пишем новый проект, который перевернёт мир рекламы. Проект пишем на Java. Почему на Java? Хуй его знает. Без меня решили. Пишем, так пишем. Значит надо учить Java. Язык хороший, мощный. Немного смущает строгая типизация и линейное мышление, привитое php.

А ещё иногда очень не хватает простых функций вроде strtotime.

Для форматирования даты в нужный формат в php требуется 2 функции: strtotime и date.

date('Y-m-d', strtotime('дата в любом формате'));

В Java всё немного иначе.

// Создаём объект SimpleDateFormat для даты из которой будем форматировать. Дата должна быть указанного формата.
SimpleDateFormat dateSourceObject = new SimpleDateFormat("dd.MM.yyyy");

// Создаём объект SimpleDateFormat для даты в которую будем форматировать.
SimpleDateFormat dateResultObject = new SimpleDateFormat("yyyy-MM-dd");

// Форматируем дату
dateResultObject.format(dateSourceObject.parse('дата в формате dd.MM.yyyy'));

Плюсы в Java:

  • Строгая типизация
  • ООП
  • Java это круто

Плюсы в php: просто и быстро

Для преверженцев ООП есть вариант и в php:

$date = DateTime::createFromFormat('j-M-Y', '15-Feb-2009');
echo $date->format('Y-m-d');


Правда здесь необходимо указать формат даты, из которой будем форматировать.

Установка php 5.6 на CentOS 6.3

Чтобы поставить php 5.4 на CentOS необходимо подключить дополнительные репозитории:


rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-7.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

Теперь ставим php из репозитория remi:


yum --enablerepo=remi,remi-test install php php-common php-devel

И добавляем необходимые модули:


yum --enablerepo=remi,remi-test install php-pear php-pdo php-mysql php-gd php-mbstring php-mcrypt php-xml

Также будет полезно установить акселератор, например Alternative PHP Cache:


yum --enablerepo=remi,remi-test install php-pecl-apc

Изменение регистра символов

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

Написал такую функцию:

function lower($str, $charset='UTF-8')
{
	//	Разбиение строки.
	$tmp = explode(' ', $str);

	if (is_array($tmp) && 0 < ($count = count($tmp)))
	{
		for ($i=0;$i<$count;$i++)
		{
			/**
			 * Для определения кириллицы используется тождественное сравнивание,
			 *  т.к. ctype_upper работает некорректно.
			 * 
			 */
			if ($tmp[$i] !== mb_strtolower($tmp[$i], $charset))
			{
				$tmp[$i] = mb_convert_case(mb_strtolower($tmp[$i], $charset), MB_CASE_TITLE, $charset);
			}
		}
	}
	$str = implode(' ', $tmp);
	return $str;
}

Использовать можно так:

$str = 'Записки WEB-ПРОГРАММИСТА';
echo lower($str); // Записки Web-Программиста

Условия в if

В стандартах кодирования в разделе «форматирование блоков if then else» написано, что при сравнении константы необходимо ставить слева, т.е.

if (1 == $var)

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

if (true === $var)

или использовать восклицательный знак (!)

if (!$var)

Загрузка файлов с помощью PHP и cURL

При написании приложения для работы с vkontakte.ru Ads API потребовалось загружать данные на их сервер.
С помощью cURL и PHP делается это так:

< ?php
$ch = curl_init();
// URL для обработки.
curl_setopt($ch, CURLOPT_URL, $url);
// Не отправлять заголовки в браузер
curl_setopt($ch, CURLOPT_HEADER, false);
// Название браузера.
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible;)");
// Возвращать содержимое.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Заголовки для запроса.
$headers = array(
	'Expect:',
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// Сообщаем, что это POST-запрос.
curl_setopt($ch, CURLOPT_POST, true);
// Данные POST-запроса.
$post = array(
	'file' => '@/home/izra/file.ext'
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);

// Получение ответа.
$return = curl_exec($ch);
// Закрытие соединения.
curl_close($ch);
?>

exit(); vs die();

Почему-то всегда думал, что между die(); и exit(); есть какая-то небольшая разница. Но никогда не думал проверить это. Как оказалось разницы между этими конструкциями нет вообще.

Скорее всего die(); существует для того, чтобы программисты, работающие с Perl могли более легко перейти на PHP.

MySQL. Неизвестная пунктуация.

На днях столкнулся с непонятной ошибкой MySQL. Сервер сообщал, что в запросе на вставку записи (с другими не пробовал) допущена ошибка «Неизвестная пунктуация«.

Ошибка появлялась в тот момент когда вставлялось 2 и более записи и в какой-либо из строк содержится точка с запятой (;). Дамп заливался через консоль, phpmyadmin и Sypex Dumper Lite 1.0.8.

Причина в func_overload библиотеки mbstring. Для корректной работы оно должно быть отключено.

WebAsyst

Сегодня пришлось поработать с WebAsyst. Ну и херня же эта система.
А пришлось мне переносить его с одного сервера на другой.

Сначала оказалось, что все таблицы, кроме таблиц с префиксом «CS_» в нижнем регистре, а в скриптах используется в верхнем регистре.

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

Потом оказалось, что логин и пароль от панели администрирования клиент не знает.
Читать полностью →

php программистам!

Во время поиcка помощника, провел достаточно большое число собеседований по вакансии php-программист. Люди приходили разные. Но почти все знают минимум. Да даже не минимум. Знания ниже того уровня, который требуется для разработки простейшего web-сайта.
Читать полностью →