====== Установка ionCube Loader======
Ioncube Loader скачиваем с сайта http://www.ioncube.com/loaders.php
{{ :linux:ioncube_logo.png?nolink|}}
===== CentOS =====
Проверяем текущую версию PHP
# php -v
PHP 5.3.3 (cli) (built: May 10 2016 21:30:21)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
Скачиваем архив ionCube в /tmp
Для x86
# wget http://downloads3.ioncube.com/loader_downloads/ioncube_loaders_lin_x86.tar.gz
Для x86_64
# wget http://downloads3.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz
Распаковываем архив
# tar xzvf ioncube*
Копируем модули ionCube
Для x86
# mv ioncube /usr/lib/php/ioncube
Для x86_64
# mv ioncube /usr/lib64/php/ioncube
Добавляем модуль
Для x86
# echo "zend_extension=/usr/lib/php/ioncube/ioncube_loader_lin_5.3.so" >> /etc/php.d/ioncube.ini
Для x86_64
# echo "zend_extension=/usr/lib64/php/ioncube/ioncube_loader_lin_5.3.so" >> /etc/php.d/ioncube.ini
Перезагружаем веб-сервер Apache или php-fpm
# service httpd restart
# service php-fpm restart
Проверяем загружен ли модуль
# php -m | grep ionCube
Проверяем еще раз ''php -v''
PHP 5.3.3 (cli) (built: May 10 2016 21:30:21)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
with the ionCube PHP Loader (enabled) + Intrusion Protection from ioncube24.com (unconfigured) v5.1.2, Copyright (c) 2002-2016, by ionCube Ltd.
===== Debian =====
Проверяем текущую версию PHP
# php -v
PHP 5.6.20-0+deb8u1 (cli) (built: Apr 27 2016 11:26:05)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
Скачиваем архив ionCube в /tmp
Для x86
# wget http://downloads3.ioncube.com/loader_downloads/ioncube_loaders_lin_x86.tar.gz
Для x86_64
# wget http://downloads3.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz
Распаковываем архив
# tar xzvf ioncube*
Смотрим где расположен каталог с php модулями
# php -i | grep extension_dir
extension_dir => /usr/lib/php5/20131226 => /usr/lib/php5/20131226
Копируем .so файл для нашей версии php
# cp ./ioncube_loader_lin_5.6.so /usr/lib/php5/20131226
# chmod 755 /usr/lib/php5/20131226/ioncube_loader_lin_5.6.so
# echo "zend_extension=/usr/lib/php5/20131226/ioncube_loader_lin_5.6.so" >> /etc/php5/mods-available/ioncube.ini
# ln -s /etc/php5/mods-available/ioncube.ini /etc/php5/fpm/conf.d/01-ioncube.ini
# ln -s /etc/php5/mods-available/ioncube.ini /etc/php5/cli/conf.d/01-ioncube.ini
# ln -s /etc/php5/mods-available/ioncube.ini /etc/php5/cgi/conf.d/01-ioncube.ini
# ln -s /etc/php5/mods-available/ioncube.ini /etc/php5/apache2/conf.d/01-ioncube.ini
Перезагружаем веб-сервер Apache или php5-fpm
# service apache2 restart
# service php5-fpm restart
Проверяем загружен ли модуль
# php -m | grep ionCube
Проверяем еще раз ''php -v''
# php -v
PHP 5.6.20-0+deb8u1 (cli) (built: Apr 27 2016 11:26:05)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with the ionCube PHP Loader (enabled) + Intrusion Protection from ioncube24.com (unconfigured) v5.1.2, Copyright (c) 2002-2016, by ionCube Ltd.
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
===== Дополнительная информация =====
==== Thread Safety ====
Внутри каталога ioncube находятся файлы ioncube_loader_lin_5.x.so и ioncube_loader_lin_5.x_**ts**.so
ts версия нужна для режима Thread safety:
[[http://php.net/manual/en/faq.obtaining.php#faq.obtaining.threadsafety|What does thread safety mean when downloading PHP?]] | [[http://php.net/manual/ru/faq.obtaining.php#faq.obtaining.threadsafety|Что означает потокобезопасность при скачке PHP?]]
Если в phpinfo() значение Thread Safety установлено в disable, то берем файл ioncube_loader_lin_5.x.so
Если установлено значение enable, то берем файл ioncube_loader_lin_5.x_ts.so
http://softtime.ru/forum/read.php?id_forum=1&id_theme=85301
Просто модели параллельной обработки в разных операционных системах разные. Где-то параллельные процессы, а где-то параллельные потоки. Если PHP встраивается как модуль, он может выполняться в параллельных потоках. Если же он устанавливается как внешние CGI-приложения, то только как параллельный процесс. В последнем случае по барабану что он внутри своего процесса делает, поэтому он может быть non thread safe php. Если же он выполняется как часть потока или в виде отдельного потока, с среде других параллельных потоков, он должен подчиняться правилам синхронизации при доступе к ресурсам (thread safe php). В UNIX-системах традиционно были сильны именно процессы, часто системы целиком на них выстраивали, в Windows - процесс это просто контейнер, если в нем нет ни одного потока, он ничего не делает и операционная система его быстро уничтожает. Всю работу делают потоки, которых может быть много. В UNIX-же вообще нет таких потоков, там проще процесс создать.
Т.е. фраза " Насколько я понял, thread safe php не создаёт отдельного потока" не совсем корректна - в Windows вы ничего без потоков не сделаете. Просто у вас наличие потоков может играть решающую роль, а может не играть такой роли. Ведь потоки имеют общее адресное пространство, а процессы раздельное. Т.е. одному процессу не так просто записать в память другому процессу информацию - нужно приложить усилия (переменные окружения, сообщения, сигналы, файлы, то что называется межпроцессорным взаимодействием). В потоках же наоборот нужно приложить усилия, чтобы они одновременно в одно и тоже место не обращались.
\\
==== PHP Fatal error ====
=== The ionCube Loader is a Zend-Engine extension and not a module ===
''Please specify the Loader using ‘zend_extension’ in php.ini''
Используйте в ini файле ''zend_extension='' вместо ''extension=''
=== The Loader must appear as the first entry in the php.ini file in Unknown on line 0 ===
ionCube модуль должен загружаться первым, а после него уже opcache и все остальные.