Очень простое и изящное решение:
array_walk_recursive( $array, function ( &$entry ) { $entry = mb_convert_encoding( $entry, 'UTF-8' ); } );
Очень простое и изящное решение:
array_walk_recursive( $array, function ( &$entry ) { $entry = mb_convert_encoding( $entry, 'UTF-8' ); } );
Казалось бы, что за вопрос? Все очень просто: ucfirst и готово, в чем проблема?
А проблема возникает в тот момент, когда вы работает в UTF-8. В моем случае — постоянно.
Как известно, функция ucfirst в php не работает со строками в UTF-8 кодировке.
Поэтому я использую следующую функцию:
function mb_ucfirst($string) { $string = mb_strtoupper(mb_substr($string, 0, 1)) . mb_substr($string, 1); return $string; }
При нажатии на свойства компонента, вместо привычного диалога с настройками компоненты Битрикс показывает пустой диалог.
Проблема в том, что переменная pcre.recursion_limit в php.ini стоит больше 1000 и php валится с переполнением стека.
Эта же проблема не дает пройти тест «Проверка системы», проверка валится на тесте «Размер стека и pcre.recursion_limit» (или на предыдущем «Передача объектов по ссылке»).
Решение: установить значение переменной pcre.recursion_limit в рекомендованное Битриксом — 1000.
Если не помогло, уменьшать пока не поможет 🙂 У меня завелось со значением 500.
Ссылки по теме: http://max22.ru/pitfalls/site-checker/
Довольно часто нужно ограничить текст по количеству строк.
Понятно, что это не сложно и способов это сделать довольно много.
Но вот самые красивые.
Здесь интересное решение с массивами:
function limit_words($string, $word_limit) { $words = explode(' ',$string); return trim(implode(' ', array_splice($words, 0, $word_limit))) .'...'; }
А здесь вся сила и красота регулярных выражений:
function limit_words($string, $word_limit) { return preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $word_limit)) .'...'; }
Проблема:
phpinfo()
показывает, что Apache не загрузил расширение php_mysql.dll;php -m
показывает, что php_mysql.dll загружается нормально, и всё у него хорошо;Да очень просто:
$array = array_values($array);
Столкнулся с проблемой, нужно было прочитать содержимое папки, которая находится в сети. Например, для поиска в удалённой папке файлы по маске. Штатные функции opendir и glob не помогали. Я перепробовал всё: и подключал сетевой диск, и вызывал консольные команды, и попытался задействовать Windows Scripting через COM. Ничего не помогало.
Небольшая памятка какую версию php качать: thread safe или none thread safe? vc6 или vc9?
Туда же и вопросы о xdebug’е.
При выгрузке из 1С на сайте получаем вместо фотографий черные квадраты. Как быть и что же делать? Самое главное: кто виноват?
Это связано с тем, что в настройках инфоблока стоит опция «уменьшать изображения». И инфоблок честно пытается их уменьшить.
Но бывают не совсем корректно сформированные изображения (у меня jpeg). По разным причинам: битая флэшка, глупый фотоаппарат, глупый фотограф. Из-за этого библиотка GD (которую использует Битрикс) не может их открыть и отправляет Warning. Но так как Warning’и подавлены, лога импорта нет (о, как бы хотелось его получить) и нет проверки на валидность открытого файла, в итоге получаются черные квадраты.
Для того чтобы инфоблок пропускал «неправильные» картинки, нужно в файл /bitrix/modules/iblock/classes/general/iblock.php добавить проверку: смогла ли GD открыть наше изображение? В строке 2595 добавим строчки:
if ($image === false) return GetMessage("IBLOCK_BAD_FILE_UNSUPPORTED");
И система будет просто пропускать проблемные файлы.
Всё время забываю, что в последних версиях PHP нельзя выставлять параметры модуля mbstring в .htaccess.
Пора выковать калёным железом где-нибудь на заметном месте:
В последних версиях PHP нельзя выставлять параметры модуля mbstring в .htaccess. Только в php.ini.