Рейтинг
1.13
голосов: 1
avatar

PHP

О блоге

PHP (англ. PHP: Hypertext Preprocessor — «PHP: препроцессор гипертекста»; первоначально Personal Home Page Tools — «Инструменты для создания персональных веб-страниц») — скриптовый язык программирования общего назначения, интенсивно применяемый для разработки веб-приложений. В настоящее время поддерживается подавляющим большинством хостинг-провайдеров и является одним из лидеров среди языков программирования, применяющихся для создания динамических веб-сайтов. (по материалам www.wikipedia.com)

Администраторы (1)

Модераторы (0)

Модераторов здесь не замечено

Читатели (1)

Maugli

Преобразование строки HEX в число INT с учётом знака

PHP
Как оказалось, преобразование строки HEX в число INT с учётом знака, не является тривиальной задачей. И для такой конвертации не предусмотрено стандартной функции)
Но, если смотреть на сайте php.net не только описание стандартных функций, но и комментарии к ним, то можно обнаружить интереснейшие решения, одно из которых я и предлагаю Вашему вниманию.
/**
     * Конвертация HEX в INT с знаком
     *
     * @param $hex
     *
     * @return number
     */
    function hex2decSigned($hex)
    {
        // очистка от символов, не входящих в HEX
        $hex = preg_replace('/[^0-9A-Fa-f]/', '', $hex);

        // конвертация в десятичное значение:
        $dec = hexdec($hex);

        // максимальное десятичное значение, основанное на длине hex + 1:
        // количество бит в шестнадцатеричное число-это 8 бит для каждого 2 hex -> max = 2^n
        // использование 'pow(2,n) -' с '1 << n' - только для целых чисел и, следовательно, ограничен integer.
        $max = pow(2, 4 * (strlen($hex) + (strlen($hex) % 2)));

        // complement = maximum - конвертированный hex:
        $_dec = $max - $dec;

        // если dec значение больше, чем complement, имеем отрицательное значение (первый бит)
        return $dec > $_dec ? -$_dec : $dec;
    }

П.С. также эта функция может использоваться как частичная реализация C функции atoi(HEX) в PHP.

Создание и использование битовой маски в PHP

PHP

Пример создание и использование битовой маски в PHP

Пишу этот материал только потому, что сам долго вникал, что к чему)))
Наверное, чтоб проще понять как использовать битовую маску (bitmask), нужно на примере показать, для чего она используется.

Пример использования битовой маски:
Задача
На сайте есть система опроса пользователей, которая содержит 10 вариантов ответа. Каждый вариант имеет свой уникальный номер — ID. Ответы нужно сохранять в БД.

Решение
Можно конечно, не заморачиваться и сделать для каждого варианта ответа отдельное поле в таблице результатов, но это не наши методы. Мы попробуем хранить все ответы в одном поле типа INT.

Предположим, что модуль голосования прислал нам массив результатов:
array(1,2,3,12);
это значит, что пользователь указал в голосовании пункты 1,2,3,12. Давайте представим результат нашего голосования как строку из 0 и 1, в которой 1 соответствуют выбранные в голосовании пункты. В результате такого преобразования мы получим число 100000000111 в двоичной системе, что будет соответствовать числу 2055 в десятичной системе.


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

Выбор категорий нижнего уровня из дерева категорий 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;

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

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

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

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

Расширение файла средствами PHP

PHP
Есть несколько способов получить расширение файла средствами PHP
Но, благодаря пользователю хабра iBear, а точнее его статье с тестами, я выбрал самый быстрый способ:
function get_get($filename) {
    return substr(strrchr($fileName, '.'), 1);
  }

В данном случае функция strrchr возвращает всё с конца строки и до искомого символа "."
А функция substr возвращает строку без первого символа, что и есть расширение файла.

А что за циферки??? Или подробнее о кодах ошибок в переменной $_FILES['file']['error'].

PHP
В конце прошлой недели разбирался с проблемами, которые, начали возникать в работе одного из старых проектов, одна из них была связана с загрузкой файлов на сервер. Проблема была решена довольно таки быстро, после просмотра значений суперглобального массива $_FILES, а точнее переменной $_FILES['file']['error']. Код возвращаемой ошибки – 1, довольно быстро помог справиться с задачей, а теперь разберемся в значениях данной переменной и что же делать, если ее значение больше нуля.

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

Обрезка строк в файле средствами PHP

PHP
По просьбе одного из наших читателей, небольшое дополнение к статье Обрезка строки по словам php.

Читатель попросил реализовать обрезку строк в файле. Во всяком случае мы так поняли и предлагаем своё решение данного вопроса.

Итак, как реализовать обрезку строк в файле средствами PHP?
Для начала прочитаем содержимое файла в массив с разбивая на строки таким образом, чтоб каждому элементу массива соответствовала каждая строка файла.

Для этого будем использовать готовую функцию file()
$strings = file('src.txt', FILE_SKIP_EMPTY_LINES);
FILE_SKIP_EMPTY_LINES — означает, что не нужно читать пустые строки.

Теперь, обработаем строки уже знакомой нам функцией words_limit()
// $input_text - исходная строка
// $limit = 50 - количество слов по умолчанию
// $end_str - символ/строка завершения. Вставляется в конце обрезанной строки
function words_limit($input_text, $limit = 50, $end_str = '') {
    $input_text = strip_tags($input_text);
    $words = explode(' ', $input_text); // создаём из строки массив слов
    if ($limit < 1 || sizeof($words) <= $limit) { // если лимит указан не верно или количество слов меньше лимита, то возвращаем исходную строку
        return $input_text;
    }
    $words = array_slice($words, 0, $limit); // укорачиваем массив до нужной длины
    $out = implode(' ', $words);
    return $out.$end_str; //возвращаем строку + символ/строка завершения
}


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

Как определить, что файл является картинкой?

PHP
Как определить, что файл является картинкой?

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


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

Удалить первый элемент массива в php

PHP

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

Чтоб удалить первый элемент массива можно использовать команду
array_shift ( array &$array ).
array_shift() извлекает первое значение массива array и возвращает его, сокращая размер array на один элемент. Все числовые ключи будут изменены таким образом, что нумерация массива начнётся с нуля, в то время как строковые ключи останутся прежними.

Код очень простой. Пример:
$array = array(1,2,3,4,5,6);
array_shift($array);
// в результате получим массив array(2,3,4,5,6)

Импорт дампа большого размера в phpmyadmin.

PHP
Сразу оговорюсь, существует множество других способов, начиная с загрузки дампа через консоль, заканчивая написанием скрипта, но если по каким-то причинам альтернативные решения вас не устраивает и у вас есть доступ к настройкам php, то действуем следующим образом.

Изменяем в файле php.ini (естественно в большую сторону) следующие значения:
upload_max_filesize  (максимальный размер файла для загрузки),
post_max_size (максимальный размер почтовых данных),
max_execution_time (макс. время исполнения каждого скрипта, в сек.),
max_input_time (макс. количество времени каждого сценария) и
memory_limit (макс. объем памяти).

Перезапускаем apache.

Радуемся возможности импортировать дамп нужного нам размера.
  • +1
  • 10 сентября 2012, 10:47
  • Maugli