Записки web-программиста

Личный блог программиста php

Архив рубрики: 'разработка'

 
16 Ноябрь'11
0

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

Необходимо было проверить строку на наличие слов, написанных в верхнем регистре и заменить их на слово в нижнем регистре, но с заглавным первым символом.
Функция 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-Программиста
03 Октябрь'11
0

Условия в if

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

if (1 == $var)

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

if (true === $var)

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

if (!$var)
29 Июнь'11
0

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
< ?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);
?>
29 Июнь'11
1

Ads API vkontakte.ru

Vkontakte.ru выпустил в свет API для управления рекламными объявлениями. Конечно, выпустил он его давно, но Ads API до сих пор имеет статус beta.

Документация не особо объемная, но все же немного помогает. При разработке решений на базе их API проблемы возникли сразу же.
Подробнее...

29 Июнь'11
2

exit(); vs die();

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

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

02 Февраль'11
1

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

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

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

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

29 Сентябрь'10
1

Midnight Commander для Masterhost

По роду деятельности иногда приходится общаться с хостингом от Мастерхоста.
При работе с shell нередко возникает необходимость в каком-нибудь файловом менеджере. Да вот только в мастерхосте совсем не думают о клиентах и любимый Midnight Commander приходится устанавливать вручную.

Для установки Midnight Commander на сервере Мастерхост необходимо выполнить несложные команды.
Подробнее...

10 Август'10
2

Говнокод: Логика

1
2
3
4
5
6
7
8
9
10
11
function Logika($f)
{
        $t=($f=true) ? true : false
        switch($t)
        {
              case true:  $return=1; break;
              case false: $return=0; break;
              default: $return; break;
        }
        return $return;
}
17 Март'10
0

Разделение текста на предложения

Сегодня понадобилось из одного куска текста сделать что-то вроде анонса. Понятно, что анонс - это некая часть текста. У меня это было 300 символов. Но просто обрезать и поставить многоточие не хорошо. Кто знает, что находится в позиции трехсот символов от начала строки. Поэтому необходимо было обрезать текст в конце предложения после 300 символов.

Для этого хорошо подошла регулярка /[.?!]\s+(?=[А-Я])/m.

В данном выражении используется так называемое lookahead-условие или lookbehind-условие (?=[А-Я]).

17 Октябрь'09
2

Ошибки при создании сайтов

Сегодня разбирался на хостинге и нашел файл, в котором я начинал писать статью про ошибки при создании сайтов. В данной статье рассматривался один интернет магазин.

Статья не полная, но наталкивает на рассуждения. В данной статье нет ответов на какие-либо вопросы. В ней я сам задаю вопросы горе разработчиком. Возможно именно с этой статьи я начну повествование об очень интересном факторе при создании сайтов, как юзабилити, т.е. удобство использования.
Подробнее...