- Подробности
- </программирование>
echo 'Русский алфавит: <a href="/glossary/'. implode('</a> <a href="/glossary/', array_filter(array_map(function($l){ $l = iconv('cp1251','utf-8',$l); return $l.'">'.$l; },range(chr(0xC0), chr(0xDF))) ) ).'</a>';
echo 'Русский алфавит: <a href="/glossary/'. implode('</a> <a href="/glossary/', array_filter(array_map(function($l){ $l = iconv('cp1251','utf-8',$l); return $l.'">'.$l; },range(chr(0xC0), chr(0xDF))) ) ).'</a>';
Решение проблемы довольно простое - достаточно почистить кэш браузера. Возникает она из-за некорректного закрытия браузера.
Делаю товарную витрину игр для консолей GameLet.ru. Вдохновляющим пинком послужило нижеследующее:
После установки OpenCart 2.x получаем следующий список папок и файлов:
admin — содержит компоненты бэкэнда
catalog — содержит компоненты фронтэнда
image — для изображений
system — содержит части, отвечающие за функционирование непосредственно движка интернет-магазина/фреймворка.
config.php — файл констант-настроек для фронтэнда
index.php — стартовый файл для фронтэнда
.htaccess.txt — файл настроек для веб-сервера в т.ч. с правилами для обработки ЧПУ
php.ini — прочие рекомендации веб-серверу.
Для этого применяется стандартная функция trim(). Однако есть разновидность "сложных" пробелов, которые возникают при UTF-кодировке:
// превратим HTML с неразрывными пробелами в "обычную" строку $myHTML = " abc"; $converted = strtr($myHTML, array_flip(get_html_translation_table(HTML_ENTITIES, ENT_QUOTES))); // нижеследующая инструкция не работает, как ожидается // $converted превратится в " abc" в исходном коде $converted = trim($converted); // превращается в 0xA0 в обычном случае, тогда можно попробовать: $converted = trim($converted, "\xA0"); // <- что не всегда срабатывает // UTF кодирует его в chr(0xC2).chr(0xA0) $converted = trim($converted,chr(0xC2).chr(0xA0)); // у меня работает
Размеры функций и методов могут быть громадными, и пролистывание наверх, чтобы посмотреть, к чему относится тот или иной кусок кода, геморройно. Поставил себе плагин SublimeFunctionNameDisplay, который выводит название функции в статусной строке, в зависимости от того, где в данный момент находится курсор.
Взять его можно тут.
Установка предлагается через менеджер пакетов Package Control.
Поселились у меня на одном из серваков спамеры. Предполагаю, что ломанули жумлу, а шифруются при этом под вордпрессные файлы (wp-xxx.php формата обнаружил туеву хучу плюс директории wp-content , коих быть не должно ну никак). От хостера было предупреждение про рассылки, да отлупы приходят на системную почту о том, что отправляемые с сервака письма распознаются как спам. Никакие письма, естественно, я целенаправленно не рассылаю, так что надо шерстить.
Нашел полезный PHP-скрипт для обнаружения потенциально вредоносных скриптов, также написанных на PHP. Суть работы сводится к поиску вхождений base64_decode, HTTP_REFERER, файлов, названия которых начинаются с точки (так они скрываются от FTP-менеджеров). Можно взять здесь https://aw-snap.info/articles/base64-decode.php либо вот ниже:
<html><head><title>Find String</title></head><body> <?php // ini_set('max_execution_time', '0'); // ini_set('set_time_limit', '0'); find_files('.'); function find_files($seed) { if(! is_dir($seed)) return false; $files = array(); $dirs = array($seed); while(NULL !== ($dir = array_pop($dirs))) { if($dh = opendir($dir)) { while( false !== ($file = readdir($dh))) { if($file == '.' || $file == '..') continue; $path = $dir . '/' . $file; if(is_dir($path)) { $dirs[] = $path; } else { if(preg_match('/^.*\.(php[\d]?|txt|js|htaccess)$/i', $path)) { check_files($path); }} } closedir($dh); } } } function check_files($this_file){ $str_to_find[]='base64_decode'; $str_to_find[]='edoced_46esab'; // base64_decode reversed $str_to_find[]='preg_replace'; $str_to_find[]='HTTP_REFERER'; $str_to_find[]='HTTP_USER_AGENT'; if(!($content = file_get_contents($this_file))) { echo("<p>Could not check $this_file You should check the contents manually!</p>\n"); } else { while(list(,$value)=each($str_to_find)) { if (stripos($content, $value) !== false) { echo("<p>$this_file -> contains $value</p>\n"); } } } unset($content); } ?> </body></html>
Допустим, нам нужно исключить материалы из указанных категорий в модуле Последних новостей. Вот строка включающая:
$model->setState('filter.category_id', $params->get('catid', array()));
Теперь, чтобы сделать фильтр наоборот - исключающий, ниже добавляем:
$model->setState('filter.category_id.include', false);
С января сего года плотнее взялся за арбитраж. На партнерки трафик лью с контекста. Первые пока беру с адмитада , а контекст через Seopult с... сюрприз... Директа, РСЯ, Адвордса и Adsense. До этого была у меня сделана товарная площадка с товарами для дома - текстилем и посудой. Ее развитие шло постольку-поскольку, в стиле вялотекущенко, что характерно для всех моих проектов. Пробовал на ней контекст - заказы шли под стать развитию сайта, однако с поиска однажды капнул один достойный.