Яндекс ТИЦ средствами php

Как получить Яндекс ТИЦ средствами PHP?

В «глобальной сети» можно найти множество вариантов, вот и я предлагаю свой.

    /**
    * Функция возвращает Яндекс ТИЦ страницы $url
     * 
     * @param string $url
     */
    function getYandexTIC($url) {
        $bar = file_get_contents("http://bar-navig.yandex.ru/u?show=31&url=$url");
        if (!preg_match('/<tcy.+value=\"(\d+)\"/', $bar, $result)) {
            $result = array(0, 0);
        }//if
        return $result[1];
    }

Рекурсивный поиск значения в массиве PHP

Рекурсивный поиск значения в массиве задача редкая, но иногда нужная.

Чуть нижу я выкладываю функцию, которая реализовывает задачу рекурсивного поиска значения в многомерных массивах.

Пусть она не сильно эстетична, зато «надёжна и практична ©».

function in_array_recursive($search, $array, $strict = false) {
	$result = false;
	if (in_array($search, $array)) {
		return true;
	}//if
	foreach ($array as $value) {
		if (is_array($value)) {
			$result = in_array_recursive($search, $value);
			if ($result) {
				return TRUE;
			}//if
		} else {
			return ($strict) ? ($search === $value) : ($search == $value);
		}//if
	}//foreach
	return $result;
}

Обрезка до конца предложения с использованием регулярных выражений PHP

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

Обновлённый вариант — обрезка доконца предложения с использованием регулярных выражений.

Предположим, что предложение у нас может заканчивается на "." "?" "!". В таком случае регулярное выражение будет такое — /.+?[?!.]/

Если результата нет, то возвращаем исходную строку.

function trim_to_dot($string) {
	$pattern = '/.+?[?!.]/';
	$result = array();
	if (preg_match($pattern, $string, $result) && !empty($result[0])){
		return $result[0];
	}else{
		return $string;
	}
}

Удаление последнего символа PHP

Очень коротко сохраню (а то старею. стал забывать синтаксис)))) как адалить последний символ текстовой строки на PHP.

Вариант 1 — удаление любого последнего символа в строке (ANSI)
$string = substr($string, 0, -1);

Вариант 2 — удаление последнего символа с очисткой от пробелов и переносов строки
$string = trim(substr($string, 0, -1));

Вариант 3 — удаление любого последнего символа в строке (UTF-8)
$string = mb_substr($string, 0, -1, "UTF-8");

Вот и всё)

Универсальный PHP скрипт для кеширования страниц

Немного истории
Это очень специфический скрипт, так как многие современные решения уже имеют данный функционал. Но, разбирая старые модули и найдя его, я не мог не написать)
Основная сфера его применения, PHP скрипты, в которых содержится одновременно элементы модели MVC, а именно формирование данных, их обмен с БД и соответственно подготовка HTML вывода.
Как уже писал, сейчас это большая редкость, но иногда попадаются задачи доработки и оптимизации старых скриптов. И на практике этот модуль кеширования уже использовался мной не один раз. При этом я не анализирую его и не дорабатываю) А просто использую как есть)


Читать дальше

Установка memcached и PHP модуля memcache на Debian

Процедура установки memcached и PHP модуля memcache не займёт много времени.

Для начала обновим репозиторий
# apt-get update && apt-get upgrade

Теперь установим демон memcached и модуль memcache для PHP
# apt-get install memcached php5-memcache

Далее проверим запустился ли демон
# netstat -tap | grep memcached
tcp 0 0 localhost:11211 *:* LISTEN 21488/memcached

По умолчанию memcached слушает порт 11211 с IP:127.0.0.1 (localhost). Если вас не устраивают эти настройки, например вы хотите открыть доступ из внешнего IP, то нужно отредактировать файл настроек memcached — /etc/memcached.conf.
-l 127.0.0.1
этот параметр отвечает за IP адрес, который слушает демон memcached.


Читать дальше

Выбор категорий нижнего уровня из дерева категорий PHP.

PHP
Попроси заказчик в описаниях разделов сделать ссылки на категории, которые находятся на самом последнем уровне вложенности дерева категорий. Чтоб было более понятно, приведу схему:
Категория 1
	Категория 1.1
	Категория 1.2
		Категория 1.1
		Категория 1.2
		Категория 1.3
	Категория 1.3
	Категория 1.4
Категория 2
Категория 3
Ну а суть задачи в том, чтобы при выборе Категории 1, в описании выводились ссылке не на категории 1.х, а на категории 1.х.х, повторюсь, вложенность может быть любой глубины. Итак, почесав голову, привели в порядок генератор идей и принципе после получасовых мучения родилась следующая функция:
function GetSubCategories($category_id){
        global $DB;
        // Объявляем глобальный массив в который будем записывать ID нужных нам категорий
        global $category_array;
        
        //Полоучаем вложения первого уровня
        $query = "SELECT * FROM `categories` WHERE `parent_id`='".$category_id."'";
        $categories = $DB->q_assocs($query);
        if(empty($category)){
            // Обходим полуенные значения
            foreach($categories as $category){
                //Создаем запрос к БД, чтобы получить подкатегории следующего уровня
                $query = "SELECT * FROM `categories` WHERE `parent_id`='".$category['id']."'";
                $categories = $DB->q_assocs($query);

                //Если подкатегорий на уровне нет, записываем в массив ID нужных нам категорий
                if(empty($category)){
                    $category_array[] = $category['id'];
                }
                //Если категории на следующем уровне есть, вызываем рекурсивно нашу функцию
                else{
                    Application_services::GetSubServices($category['id']);
                }
            }
        }
        return $category_array;

Не устанавливается Nginx на Debian Linux через ISPManager

Сегодня утром проснулся раненько и решил, что пора на VPS, на котором и этот сайт в том числе, настраивать Nginx.

На сервере установлена панель управления ISPManager. Но вот проблема, в панели управления, в разделе возможности при выборе установки [nginx [engine x] — HTTP и прокси-сервер] ничего не происходит. Если быть точнее — происходит, отображается индикатор установки и через некоторое время возврат на эту же страницу. Как вы понимаете сервер Nginx при этом не установлен.

Так в чём же проблема и по какой причине не устанавливается Nginx на Debian Linux через консоль управления ISPManager.

Перечитав дохрена много форумов и советов, решил всё же разобраться в деталях.
Для этого открыл файл логов установки пакетов ISPManager /usr/local/ispmgr/var/pkgctl.log и обнаружил там такую строку
FATAL code=4 Invalid value ip.
Именно из-за этой строки не устанавливался Nginx.

Решение проблемы
Для того, чтоб эта проблема исчезла, нам нужно в панели управления ISPManager в разделе Адрес панели прописать IP адрес сервера.

После этих действий возвращайтесь в раздел Возможности и устанавливайте Nginx.

Если вы установили Nginx и не можете зайти в адми панель ispmanager обратитесь к его встроенному веб серверу через порт 1500. Выглядит это так xxx.xxx.xxx.xxx:1500/, где xxx.xxx.xxx.xxx — IP4 адрес вашего сервера.

Самый простой способ очистки массива от пустых элементов PHP

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

$array = array_diff($array, array(''));

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

Случайный выбор из массива в PHP

Как сделать случайный выбор элемента из массива в PHP?

Вот функция, которая это делает:

function getRandomEl($array){
    return $array[mt_rand(0, count($array)-1)];
}

Немного информации. Для получения случайного элемента массива используем генератор случайных чисел, а именно функцию mt_rand(от, до)от и до включительно.

Так как массивы у нас начинаются обычно с ноля, то используем диапазон от 0 до (длинна массива — 1).