Архив автора: admin

Дружим PHPExcel с Битрикс

Зачем Excel

Иногда при разработке сайта на Битриксе возникает необходимость генерировать файлы Excel. Лично мне этот формат (т.е. родные форматы Excel) не нравится. Но менеджерам, зачастую, это ближе к сердцу, чем CSV. Как показывает практика, офисные сотрудники не всегда могут совладать с юникодом при открытии файлов CSV через MS Excel (вот, пора уже переходить на открытые аналоги, типа LibreOffice). Для таких вот запущенных случаев, нужно генерировать родные форматы Excel.

Из PHP генерацию фалов Excel можно делать с помощью распространённой библиотеки PHPExcel. Говорят, что эта библиотека не подходит для генерации больших и сложных документов. Но мне нужно было делать совсем маленькие Excel документы с простой таблицей и особым именем листа. Кстати, если вам не нужно давать листам названия, то можно поступить проще, — так же, как это делает сам Битрикс, — генерировать Excel документ через HTML. Но я использовал старую версию библиотеки PHPexcel — https://github.com/PHPOffice/PHPExcel, т.к. мне нужно было настроить работу на PHP 5.5. Вообще же лучше последовать рекомендациям разработчиков и использовать более новый вариант этой библиотеки — https://github.com/PHPOffice/PhpSpreadsheet

Проблема интеграции PHPExcel с Битриксом

Битрикс требует настройки mbstring.func_overload=2 и не работает с другими значениями. PHPExcel требует mbstring.func_overload=0 и не работает с другими значениями. Если на сервере используется Apache, то есть вариант настроить этот параметр в целом для хоста и задать отдельное значение для определённого каталога. Если у вас Apache, то дальше читать вам не обязателно. Но при использовании nginx + php-fpm задать mbstring.func_overload можно только для всего пула, без каких-либо исключений. Так как же быть в этом случае? При определённом стечении обстоятельств, PHPExcel нормально работает и с mbstring.func_overload=2. Проверено, что генерация работает успешно при настройке сайта на работу с UTF-8 и использовании XLSX формата. Нужно лишь отключить встроенную проверку mbstring.func_overload в библиотеке PHPExcel.

Отключаем проверку mbstring.func_overload

Для установки библиотек в Битриксе удобно использовать composer. Если composer установлен глобально, то можно выполнить команду установки:

composer require phpoffice/phpexcel

Я, например, это делал из каталога bitrix/php_interface/include/lib
В моём случае файл, в котором происходит проверка значения mbstring.func_overload — это bitrix/php_interface/include/lib/vendor/phpoffice/phpexcel/Classes/PHPExcel/Autoloader.php
В этом скрипте есть такие строки:

// check mbstring.func_overload
if (ini_get('mbstring.func_overload') & 2) {
    throw new PHPExcel_Exception('Multibyte function overloading in PHP must be disabled for string functions (2).');
}

Если эти строки удалить, то проверка значения mbstring.func_overload производиться не будет. Но, если это сделать простам редактированием файла, то при следующем обновлении библиотек через composer update велика вероятность, что обновится и PHPExcel, и это изменение затрётся. Тогда придётся повторять удаление ещё раз. Чтобы немного упростить себе жизнь, автоматизируем это удаление.
Composer позволяет выполнять определённые скрипты по событиям. Нам нужно определить выполнение нашего патча на событие установки (для внедрения) и на событие обновления. В моём случае, в каталоге bitrix/php_interface/include/lib лежит файл composer.json следующего содержимого:

{
    "require": {
        "phpoffice/phpexcel": "^1.8" 
   },
    "config": {
        "bin-dir": "vendor/bin"
    },
    "scripts": {
        "post-install-cmd": [
            "phpexcel_mbstring_patch.sh"
        ],
        "post-update-cmd": [
            "phpexcel_mbstring_patch.sh"
        ]
    }
}

Тут в секции «require» задана установка библиотеки PHPExcel. В секции
«config» задан каталог для размещения дополнительных скриптов (куда мы и разместим свой патч). В секции «scripts» оп
ределены на какие события, какие скрипты выполнять, — в нашем случае это один и тот же патч для установки и для обновления пакетов через composer.

Создаём скрипт-патч bitrix/php_interface/include/lib/vendor/bin/phpexcel_mbstring_patch.sh со следующим содержимым:

#!/bin/bash

# Change directory to the script’s location
cd $(dirname $(readlink -e $0))

file4Patch=»../phpoffice/phpexcel/Classes/PHPExcel/Autoloader.php»
fileTmp=»../phpoffice/phpexcel/Classes/PHPExcel/Autoloader.php.tmp»

# Remove this code:
# // check mbstring.func_overload
# if (ini_get(‘mbstring.func_overload’) & 2) {
#     throw new PHPExcel_Exception(‘Multibyte function overloading in PHP must be disabled for string functions (2).’);
# }
cat $file4Patch | awk -v p=1 ‘/mbstring/ {p=0} p {print $0} /}/ {p=1}’ > $fileTmp
mv -v $fileTmp $file4Patch

Поясню, что тут происходит. Это bash скрипт. Сначала определяется рабочий каталог (тот, откуда запускается патч). Затем в две переменные задаём файл, который будем патчить и временный файл, который нужен для обработки (он удаляется в конце). А дальше происходит сама магия. С помощью утилиты awk удаляется всё содержимое между строками (включая сами эти строки), содержащими «mbstring» и «}». Это как раз проверка, которая нам не нужна в PHPExcel (что и обозначено в комментарии перед магической командой). Далее просто временным файлом (в котором произведено удаление строк) подменяется исходный файл.
Это будет работать при каждом обновлении пакетов через composer до тех пор, пока в PHPExcel сохраняется такая проверка mbstring.func_overload.

Бонус

В качестве бонуса в статье приведу код функции, который генерирует XLSX файл с особым названием листа. Первая строка документа — названия колонок. Все последующие строки — данные колонок.

/**
 * Метод формирует файл Excel из массива данных
 * @param string $fileFullName Полный путь к создаваемому файлу
 * @param string $fileTitle Заголовок файла
 * @param array $arData Массив данных для записи в файл. Массив из двух вложенных массивов:
 *     первая позиция с ключём "HEADER"
 *     вторая позиция с ключём "ROWS"
 * @return mixed Возвращает сформированный файл (его полный путь) либо ЛОЖЬ в случае ошибки
 *
 */
public function arrayToExcel($fileFullName, $fileTitle, $arData)
{
    if (!empty($fileFullName) && is_array($arData)) {
        try {
            $objPHPExcel = new PHPExcel();
            // Set document properties
            $objPHPExcel->getProperties()->setCreator('Site's script')
                                         ->setLastModifiedBy('Site's script')
                                         ->setTitle($fileTitle)
                                         ->setSubject($fileTitle);
            // Add some data
            foreach ($arData as $dataType => $arDataset) {
                if ($dataType == 'HEADER') {
                    $arColumnValType = [];
                    foreach ($arDataset as $keyHeader => $valueHeader) {
                        if (isset($valueHeader['NAME'])) {
                            $objPHPExcel->setActiveSheetIndex(0)->setCellValueByColumnAndRow(
                                $keyHeader,
                                1,
                                $valueHeader['NAME']
                            );
                            if (isset($valueHeader['TYPE'])) {
                                $arColumnValType[$keyHeader] = $valueHeader['TYPE'];
                            } else {
                                $arColumnValType[$keyHeader] = PHPExcel_Cell_DataType::TYPE_STRING2;
                            }
                        }
                    }
                } elseif ($dataType == 'ROWS') {
                    foreach ($arDataset as $indexRow => $row) {
                        if (count($row) == count($arData['HEADER'])) {
                            foreach ($row as $indexColumn => $value) {
                                $objPHPExcel->setActiveSheetIndex(0)->setCellValueExplicitByColumnAndRow(
                                    $indexColumn,
                                    ($indexRow + 2),
                                    $value,
                                    $arColumnValType[$indexColumn]
                                );
                            }
                        } else {
                            AddMessage2Log('Переданы данные с ошибкой: не совпадает количество столбцов заголовка и количество столбцов данных в строке #' . $indexRow);
                        }
                    }
                }
            }

// Установим выравнивание ячеек по ширине содержимого
for ($i = 0; $i <= count($arData[‘HEADER’]); $i++) {
$objPHPExcel->getActiveSheet()->getColumnDimensionByColumn($i)->setAutoSize(true);
}

// Rename worksheet
$objPHPExcel->getActiveSheet()->setTitle(‘MyNameOfList’);
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);


Лечение геморрагического цистита: устранение возбудителя инфекции

лечение геморрагического циститаВне зависимости от причины, вызвавшей неинфекционный геморрагический цистит, лечение этого заболевания всегда практически одинаково. Важный аспект лечения — анализ мочи, выполняющийся для исключения возможности бактериального цистита. Основная цель лечения геморрагического цистита — устранение агента, вызвавшего цистит.

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

Процесс лечения

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

Персистирующая гематурия (постоянное наличие в моче кровяных сгустков) лечится посредством ирригации мочевого пузыря специфическими составами — в том числе карбопростом и нитратом серебра. Нитрат серебра, астрингент, останавливающий кровотечение, откладывается на кровоточащих поверхностях стенки мочевого пузыря и практически не попадает в кровь. Кроме того, для прекращения интравезикального кровотечения (кровотечения в мочевом пузыре) в некоторых случаях применяется аминокапроновая кислота, замедляющая или предотвращающая растворение кровяных сгустков ферментами мочи.

Карбопрост трометамин — еще один препарат, применяющийся для лечения геморрагического цистита. Это вещество вызывает сокращения гладкой мускулатуры стенок кровеносных сосудов и применяется, в основном, для ирригации мочевого пузыря при лечении геморрагического цистита, вызванного циклофосфамидом. Главное достоинство карбопроста в лечении геморрагического цистита — этот препарат не вызывает боли при ирригации мочевого пузыря.

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

Геморрагический цистит при химиотерапии

Для химиотерапии злокачественных опухолей применяется циклофосфамид — препарат, в процессе обмена веществ образующий акролеин, раздражающий слизистую мочевого пузыря и, в конечном итоге, повреждающий слизистую и вызывающий кровотечение. Токсичность циклофосфамида может быть снижена за счет одновременного приема некоторых препаратов — в частности, пентосана полисульфата, 2-меркаптоэтанесульфоната (месна), амифостина, N-ацетилцистеина (мукомист). Эти вещества, связывая молекулы акролеина, образуют стабильные не токсичные для слизистой мочевого пузыря соединения. Поскольку мукомист снижает химиотерапевтический эффект циклофосфамида, этот препарат применяется реже, чем месна.

Месна — препарат, предназначенный для перорального либо внутривенного применения и рекомендованный при химиотерапии циклофосфамидом и изофосфамидом. Препарат особенно эффективен в профилактике, предотвращении геморрагического цистита, а вот лечение месной развивающегося в результате химиотерапии геморрагического цистита куда менее продуктивно.

Вирусный геморрагический цистит

Для лечения вирусного геморрагического цистита у пациентов с иммунодефицитом и при иммуносупрессивной терапии применяются антивирусные препараты (цидофовир, видарабин, рибаварин) внутривенно, внутримышечно или перорально. Для лечения геморрагического цистита, вызванного ВК-вирусом (полиомавирусом человека 1), применяется гиалуронат (препарат вводится в мочевой пузырь), для лечения цистита, вызванного JC-вирусом, еще одним представителем группы полиомавирусов — рисперидон.

Как заработать на блоге? — сервисы и способы

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

Прежде всего, чтобы ваш сайт начинал приносить вам прибыль, вы должны над ним хорошенько поработать — правильно настроить, красиво оформить, заполнить контентом и раскрутить.На деле скажу вам, что это не так уж и легко как на словах. Ну ладно, давайте по существу. Я перечислил несколько сервисов и советов для заработка на вашем блоге:

Читать

7 успешных приемов монетизации блога

Для того, чтоы вести качественный блог и начать зарабатывать на нем, вам необходимо разобраться во всех тонкостях монетизации блогов.

1. Рекламная сеть Яндекс
Чтобы стать частью рекламной сети РСЯ, необходимо соответствовать нескольким требованиям:
— иметь русскоязычную аудиторию;
— располагаться на платном хостинге;
— иметь стабильную посещаемость более 500 человек в день;
Если вы обладаете этими требованиями, то можете запросто подать заявку.

2. Контекстная реклама в Google AdSense
Монетизировать блог с помощью Google AdSense  можно сразу.  Система контекстной рекламы Google принимает рекламные площадки без ограничений по посещаемости. Читать

Чем опасна Глаукома

Всемирная борьба с глазными заболеваниями!

6 марта мир будет отмечать «Всемирный день борьбы с глаукомой»! Мировое сообщество объединяется против глазных болезней, осознавая, что слепнущих с каждым годом всё больше.

Судите сами, тех же глаукомных больных сегодня насчитывается уже 100 млн. человек! А полностью ослепших уже более 28 миллионов, из которых каждый пятый потерял зрение из-за глаукомы! И это мы говорим лишь о тех, кто полностью потерял своё зрение. Цифра огромна!
А сколько тех, кто НЕ ЗНАЕТ о своём заболевании? Болезнь может притаиться, замаскироваться, симптомы могут быть невыраженными или вовсе скрытыми. Болезнь есть, но диагноз ещё не поставлен. К несчастью чаще всего он крайне запоздалый. Зрение бывает уже не спасти.
Но пока мир говорит о глаукоме и катаракте, других болезнях, люди продолжают слепнуть!
Пора положить конец печальной статистике!

 

 

 

Что такое глаукома?
Глаукома – это глазное заболевание с почти бессимптомным течением, при котором происходит повреждение зрительного нерва и сетчатки с характерным выпадением полей зрения, связанное, как правило,с повышенным внутриглазным давлением, без лечения приводящее к слепоте. 
Повреждение зрительного нерва при глаукоме носит необратимый характер и в итоге может привести к слепоте. Поэтому важно вовремя выявить глаукому для предотвращения её прогрессирования. 
 
Глаукома занимает второе место среди причин слепоты в мире, поражая людей любого пола, расы и национальности. В России в настоящее время зарегистрировано более 1 миллиона больных глаукомой (Либман Е.С.,2009).
 
Симптомы глаукомы
Большинство видов глаукомы,особенно на начальных стадиях,протекает бессимптомно, что является причиной поздней обращаемости пациентов к врачу-офтальмологу, когда болезнь достигает развитой стадии, и имеются необратимые изменения в зрительном нерве.
Симптомами, позволяющими заподозрить глаукому, являются: 

 

 

  •  
сужение границ периферического поля зрения, 

 

  •  

 

дефекты поля зрения, 

 

  •  

 

иногда радужные круги при взгляде на источник света. 

 

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

 

Таким образом, глаукома является коварным заболеванием с бессимптомным течением на начальной стадии. Пациент если и замечает сужение границ поля зрения, то уже на развитой стадии заболевания. Заподозрить и выявить глаукому на начальной стадиии может только врач-офтальмолог. Поэтому профилактические осмотры офтальмолога людям старше 40 лет обязательны.
Острый приступ глаукомы характеризуется целым рядом симптомов:

 

 

  •  
внезапное затуманивание или снижение зрения,

 

  •  

 

 радужные круги или ореолы при взгляде на источники света,

 

  •  

 

 боль в глазу, отдающая в висок, 

 

  •  

 

иногда тошнота и рвота. 

 

 

При возникновении таких симптомов необходимо срочно обратиться в ближайший пункт неотложной офтальмологической помощи для предотвращения необратимой потери зрения.

 

 

 

 

Виды глаукомы
Классификаций глаукомы много, но в зависимости от профиля угла передней камеры, 
Различают глаукому: 
  • открытоугольную
  • закрытоугольную 
Это имеет важное значение, т.к. открытоугольная глаукома течёт ,как правило, первично хронически, а закрытоугольная глаукома чаще даёт острые приступы повышения давления, которые крайне деструктивны для зрительного нерва и тканей глаза в целом. 
 
Также выделяют глаукому:
  • с низким давлением, 
  • врожденную,
  • вторичную глаукому.
Первичная открытоугольная глаукома является наиболее распространенной формой глаукомы в России и характеризуется хроническим течением. При отсутствии лечения повышенное внутриглазное давление повреждает зрительный нерв, что проявляется постепенным сужением границ полей зрения, вплоть до тоннельного или слепоты. Угол передней камеры при этом открыт, и причина повышения внутриглазного давления заключается в повышении сопротивления оттока жидкости через дренажную сеть. 
 
Первичная закрытоугольная глаукома встречается в России реже, чем открытоугольная, и характеризуется особым строением глаза, при котором короткая передне-задняя ось и относительно большой хрусталик обуславливают узкий или закрытый профиль угла передней камеры. 
 
 Заболевание течёт практически бессимптомно, пациенты могут отмечать эпизоды затуманивания зрения и односторонней головной боли в области лба и виска, так называемые подострые
приступы глаукомы. Если не начать соответствующее лечение, то может возникнуть острый приступ глаукомы с тяжелыми необратимыми последствиями. 
 
При данной форме глаукомы внутриглазное давление вне приступов на начальных стадиях может оставаться нормальным. Но особая форма строения вашего глаза, а именно, угла передней камеры, позволяет офтальмологу вовремя заподозрить глаукому или предрасположенность к ней, провести специальные обследования на глаукому и принять соответсвующие профилактические или лечебные меры. Поэтому регулярные осмотры у врача-офтальмолога крайне важны для вашего зрения. 
 
Глаукома с низким давлением или нормотензивная глаукома, или глаукома псевдонормального давления – это особый подвид открытоугольной глаукомы, характеризующийся постепенным поражением зрительного нерва и соответствующими дефектами полей зрения, но при нормальных значениях внутриглазного давления. 
 
Предполагают, что причиной данной патологии является неадекватное кровоснабжение зрительного нерва, так называемое низкое перфузионное давление, и крайняя чувствительность зрительного нерва даже к нормальным цифрам внутриглазного давления. Часто люди, страдающие нормотензивной глаукомой, имеют низкие цифры артериального давления — гипотоники, и могут страдать шейным остеохондрозом.
Врожденная глаукома – это наследственная форма заболевания, причиной которой является неправильное развитие внутриглазных структур, что обуславливает задержку жидкости, повышение внутриглазного давления, увеличение диаметра и отёк роговицы. 
Врождённая глаукома выявляется у ребенка,как правило, в возрасте до года педиатром или детским офтальмологом и практически всегда требует оперативного лечения.
 
Вторичная глаукома, как правило, возникает вследствие других глазных заболеваний : травмы глаза, длительные воспалительные заболевания (увеиты, иридоциклиты), изменения положения хрусталика или его объема, внутриглазные опухоли и др. Длительный приём кортикостероидов, например, больными бронхиальной астмой или системными аутоиммунными заболеваниями, может вызвать развитие вторичной стероидной глаукомы.
Диагностика глаукомы
Повышенное внутриглазное давление сам человек не ощущает, его можно определить только при помощи специального исследования – тонометрии. Тонометрия бывает контактная, когда к глазу прикладывают специальный грузик, и бесконтактная, при помощи специальных аппаратов — пневмотонометров.
Повреждение зрительного нерва при глаукоме проявляется сужением границ поля зрения, поэтому исследование полей зрения или периметрия является обязательным методом обследования на глаукому. Сами пациенты редко когда замечают изменение своего периферического поля зрения, особенно начального характера, вот почему врачи-офтальмологи часто обнаруживают уже развитые и далекозашедшие стадии глаукомы.
В ходе биомикроскопии переднего отрезка глаза офтальмолог может заметить изменения, характерные для различных видов глаукомы и заподозрить её. Чтобы увидеть угол передней камеры и оценить его форму и состояние, необходимо провести исследование – г
ониоскопию.
Осмотр глазного дна или офтальмоскопия позволяет оценить состояние зрительного нерва, сетчатки, сосудов. Офтальмоскопия может проводится контактным путём, когда к глазу приставляется специальная линза, но чаще она проводится бесконтактным путём при помощи увеличивающих изображение линз и/или специального аппарата – офтальмоскопа.
В настоящее время в арсенале врачей-офтальмологов для диагностики глаукомы имеются высокотехнологичные методы обследования, такие как Гейдельбергская ретинальная томография и оптическая когерентная томография. Данные методы позволяют с высокой точностью определять толщину слоя нервных волокон в области диска зрительного нерва, его экскавацию и другие параметры, оценка которых крайне важна как в первичной диагностике глаукомы, так и в контроле над её течением.
Ультразвуковая биомикроскопия позволяет детально визуализировать структуру глаза, в том числе путей оттока внутриглазной жидкости, даёт представление и размерах и соотношении внутриглазных структур, не доступных визуализации методами офтальмоскопии.
Лечение глаукомы
К сожалению, на сегодняшний день не существует методов, позволяющих вылечить, излечить глаукому, но её нужно и можно лечить и контролировать. В зависимости от вида, стадии и тяжести течения болезни врач-офтальмолог назначит вам капли от глаукомы, порекомендует лазерное лечение или предложит хирургическую операцию.
Как правило, лечение начинают с назначения глазных капель разного вида, которые имеют одно свойство – снижают внутриглазное давление и, тем самым, препятствуют повреждению зрительного нерва. Но капли эти нужно капать постоянно, по расписанию, т.к. период их действия в глазу ограничен. Некоторые капли могут вызывать чувство дискомфорта, жжения в глазу, но это не повод самостоятельно отменять капли без предварительной консультации с врачом-офтальмологом о возможности их замены на другие.

 

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

Бессимптомность и безболезненность течения болезни обуславливает легкомысленное отношение некоторых пациентов к назначенному лечению, которые капают капли нерегулярно, а то и вовсе перестают, забывают заблаговременно приобретать новый флакончик капель, не появляются в назначенное время на контрольном осмотре у врача-офтальмолога. Такое отношение к лечению является причиной прогрессирования глаукомы и, как следствие, необратимой потери зрения.

Приверженность пациента к лечению – это один из основных факторов успеха в борьбе с глаукомой.


Автор: Нина Карулина

Оплата товаров через Яндекс.Деньги в Aliexpress

Яндекс.Деньги – это довольно популярная платежная система. С ее помощью можно выполнять самые разные финансовые операции – оплачивать товары, услуги (в том числе и коммунальные), кредиты, штрафы и многое другое. В этой статье мы рассмотрим, как проходит оплата через Яндекс.Деньги в Aliexpress (на одном из самых известных сайтов по продаже китайской продукции).Покупка товаров на Aliexpress

Читать