0

Поиск ближайшего числа в последовательности

Дана упорядоченная последовательность конечного числа элементов, так же известная в математике как «кортеж», (a1,…,an). Все элементы этого множества — целые числа >= 0. Нужно написать функцию, которая на входе будет принимать два аргумента: указанное множество и один элемент, который является целым числом >= 0. На выходе функция должна возвратить индекс элемента множества, который равен указанному числу или наиболее близок к нему (в порядке декремента).

Пример работы функции на языке PHP может быть такой:

$a = array(1,3,4,5,7,13,14,18,20,24,25,29,30,33,51,78,99);
$b = 19;

function func($a, $b) {
    // тело функции
}

echo func($a, $b); // выведет "7" (индекс числа "18")

Continue Reading

0

Нахождение числа Фибоначчи по индексу

Числа Фибоначчи — это последовательность, в которой каждое последующее число равно сумме двух предыдущих чисел. Многие помнят задачу о вечноживущих и плодовитых кроликах. А как найти нужное число из последовательности, зная только его индекс?

Вот так можно определить n по счёту число из последовательности Фибоначчи в языке PHP:

function fibonacci($n)
{
    return round(
        pow((sqrt(5)+1) / 2, $n) / sqrt(5)
    );
}

Continue Reading

0

Установка Composer в *nux

Задача: установить менеджер зависимостей Composer в Ubuntu / Debian.

Решение:

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

Установим команду «composer» в окружение, чтобы можно было обращаться к функционалу Composer из командной строки:

export PATH=$PATH:~/.composer/vendor/bin

В примере описаны действия в домашней директории пользователя.

0

Шаблон полного отображения в списке объектов NetCat CMS

При работе с системой управления контентом NetCat CMS может возникнуть потребность вывести данные полного отображения объекта, используя функцию nc_objects_list(), она же s_list_class(). Изначально функция расчитана на вывод информации списка, а не отдельного объекта.

Решение, в данном случае, очень простое — в компоненте, в поле «Объект в списке» нужно вписать код:

<? /* данные из полного отображения объекта */ ?>
<? include_once (
    $nc_core->CLASS_TEMPLATE_FOLDER
    . $cc_env['Class_ID']
    . ($cc_env['Class_Template_ID'] ? "/" . $cc_env['Class_Template_ID'] : "")
    . "/RecordTemplateFull.html"
); ?>

В результате, вместо отображения объекта из списка, будет выведено содержимое поля полного отображения объекта.

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

1

Полная замена переносов строк в JavaScript при помощи PHP

Для передачи данных посредствам AJAX или других JavaScript-функций, иногда требуется избавиться от переносов строк. Как показала практика, просто удалить или заменить командные символы возврата и новой строки, \r и \n, недостаточно.

Приведу наиболее полную последовательность «нежелательных» символов для замены, и их обработку через PHP-функцию str_replace():

// массив спецсимволов для замены
$search = array(PHP_EOL, chr(10), chr(13), '\r' , '\n', '\t', '\x0B', '\0');
// на что заменять
$replace = '';
// текст с переносами строк
$sometext = '...';
// функция замены переноса строк
$newtext = str_replace($search , $replace, $sometext);

При желании можно заменять символы не на пустую строку, а на уникальный флаг, например %newline%, или HTML-тег <br />. Тогда процесс станет обратимым и переносы возможно будет восстановить.

0

Синтаксическая проверка PHP-файла на ошибки без его выполнения

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

Пример из жизни — динамически подключаемые php-файлы через функцию include(), если файл содержит ошибку — получим 500 ошибку сервера, которая весьма сурова для нашего кода. До версии PHP 5.0.4 можно было обойтись функцией php_check_syntax(), чтобы проверить файл перед его подключением, но в последующих версиях её нет, поэтому, казалось бы, остаётся только один простой способ проверки через командную строку:

php -l имя_файла

В php-реализации получается примерно так:

function php_check_syntax($file, &$error) {
  // анализируем файл
  exec("php -l ".$file, $error, $code);
  // ошибок нет
  if ($code == 0) {
    return true;
  }
  // ошибки есть
  return false;
}

Но, этот способ практически бесполезен для отечественных хостингов, т.к. функции exec() и shell_exec() возглавляют небезопасный список php-функций и их просто отключают. Так поступает masterhost и многие другие.

Найти другой функционал синтаксической проверки файлов на базе стандартных решений — не получилось, — поэтому будет магия! А поможет нам победить непослушный код — функция token_get_all() и функция eval().
Continue Reading

0

Заголовки сервера Apache, делаем безопаснее

Есть немаловажный момент связанный с безопасностью сервера, а следовательно и сайтов на нём расположенных… касается он информации отдаваемой в заголовках. Рассмотрим самые интересные, а зачастую и исчерпывающе-информативные заголовки: Server и X-Powered-By.

Заголовок Server может поведать нам о сервере, операционной системе, версии PHP и даже некоторых модулях. Думаю, что пагубность такой информации объяснять не нужно, ибо совершенного софта не бывает.

Заголовок X-Powered-By может наделить нас знанием о версии PHP, например. Опять же — лишняя брешь в безопасности.

Server: Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny9 with Suhosin-Patch mod_ssl/2.2.9 OpenSSL/0.9.8g
X-Powered-By: PHP/5.2.6

Есть несколько путей решения проблемы:

  • пересборка Apache с изменённым параметром AP_SERVER_BASEPRODUCT в файле include/ap_release.h;
  • изменение директивы SecServerSignature при установленном mod_security;
  • правка заголовков при помощи mod_headers.
  • редактирование файлов конфигурации Apache и PHP.

Continue Reading

1

Полноценный модуль php5-gd для Debian и Ubuntu

По умолчанию PHP функции imageantialias() и imagerotate() отключены в модуле gd.so для Debian и его производных. Сделано это ради обеспечения стабильности и безопасности. Задумка может и благая, но раз мы ищем решение этой проблемы, значит оно того стоит. Например Drupal не захочет работать с урезанным модулем.

По сути достаточно пересобрать PHP и установить новый полноценный пакет php5-gd. Сделать это совсем не сложно, хотя описание будет достаточно подробное. Собирать будем из исходников, что само по себе интересно =)

Далее все действия производятся в рутовом терминале или в обычном через команду sudo. Для наглядности буду писать без sudo. Continue Reading