Я бачив різні файли бінарних файлів для PHP, як, наприклад, безпека без потоку чи потоку?
Що це означає?
Яка різниця між цими пакетами?
Я бачив різні файли бінарних файлів для PHP, як, наприклад, безпека без потоку чи потоку?
Що це означає?
Яка різниця між цими пакетами?
Відповіді:
Різні веб-сервери реалізують різні методи паралельної обробки вхідних HTTP-запитів. Досить популярною технікою є використання потоків - тобто веб-сервер створить / присвятить один потік для кожного вхідного запиту. Веб-сервер Apache HTTP підтримує декілька моделей для обробки запитів, в одній з яких (званий робочим MPM) використовуються потоки. Але він підтримує іншу модель одночасності під назвою prefork MPM, яка використовує процеси - тобто веб-сервер створить / виділить один процес для кожного запиту.
Існують також інші абсолютно різні моделі одночасності (з використанням асинхронних розеток та вводу / виводу), а також ті, що поєднують дві або навіть три моделі разом. Для того, щоб відповісти на це запитання, ми торкаємося лише двох вищезазначених моделей і беремо HTTP-сервер Apache як приклад.
Сам PHP не відповідає на фактичні запити HTTP - це завдання веб-сервера. Тож ми налаштовуємо веб-сервер для переадресації запитів на PHP для обробки, потім отримуємо результат і відправляємо його назад користувачеві. Існує кілька способів зв’язувати веб-сервер із PHP. Для HTTP-сервера Apache найпопулярнішим є "mod_php". Цей модуль насправді є самим PHP, але складений як модуль для веб-сервера, і тому він завантажується прямо всередині нього.
Існують і інші методи зв’язування PHP з Apache та іншими веб-серверами, але mod_php є найпопулярнішим і також служить для відповіді на ваше запитання.
Можливо, вам не знадобилося раніше розуміти ці деталі, тому що хостинг компаній та дистрибутивів GNU / Linux постачаються з усім, що нам підготовлено.
Оскільки з mod_php PHP завантажується прямо в Apache, якщо Apache збирається обробляти паралельність за допомогою свого Worker MPM (тобто, використовуючи Threads), PHP повинен мати можливість працювати в цьому ж багатопотоковому середовищі - тобто PHP повинен будьте безпечні для ниток, щоб мати можливість грати в м'яч правильно з Apache!
У цей момент вам слід подумати "ОК, тому якщо я використовую багатопотоковий веб-сервер і збираюся вставити PHP прямо в нього, то я повинен використовувати безпечну для потоків версію PHP". І це було б правильне мислення. Однак, як це буває, безпека потоків PHP дуже суперечлива . Це полегшення, якщо ти справді справді знаєш, що ти робиш.
У випадку, якщо вам цікаво, моя особиста порада буде не використовувати PHP у багатопотоковому середовищі, якщо у вас є вибір!
Говорячи лише про середовищі на базі Unix, я б сказав, що, на щастя, ви повинні думати про це лише в тому випадку, якщо ви збираєтеся використовувати PHP з веб-сервером Apache, і в цьому випадку вам рекомендується перейти з форфором MPM Apache (який не використовує потоки, тому безпека потоків PHP не має значення) і всі дистрибутиви GNU / Linux, про які я знаю, приймуть це рішення за вас, коли ви встановлюєте Apache + PHP через їх пакетну систему, навіть не вимагаючи від вас для вибору. Якщо ви збираєтеся використовувати інші веб-сервери, такі як nginx або lighttpd , у вас все одно не буде можливості вставляти PHP. Ви будете дивитись на використання FastCGI або щось рівнозначне, що працює в іншій моделі, де PHP абсолютно позавеб-сервера з декількома процесами PHP, які використовуються для відповіді на запити, наприклад, через FastCGI. У таких випадках безпека ниток також не має значення. Щоб побачити, яку версію використовує ваш веб-сайт, поставте файл, що містить <?php phpinfo(); ?>
ваш сайт, і шукайте Server API
запис. Це може сказати щось на кшталт CGI/FastCGI
або Apache 2.0 Handler
.
Якщо ви також дивитесь на версію PHP командного рядка - безпека теми не має значення.
Нарешті, якщо безпека нитки не має значення, то яку версію ви повинні використовувати - безпечну для потоку чи безпечну для потоку? Чесно кажучи, у мене немає наукової відповіді! Але я б здогадався, що версія, яка не є безпечною для потоків, є швидшою та / або меншою помилкою, інакше вони б просто запропонували безпечну для потоків версію і не потурбувались дати нам вибір!
Для мене я завжди вибираю безпечну версію, що не стосується потоків, оскільки я завжди використовую nginx або запускаю PHP з командного рядка.
Бездротова безпечна версія повинна використовуватися, якщо ви встановлюєте PHP як бінарний CGI, інтерфейс командного рядка або інше середовище, де використовується лише один потік.
Безпечна версія для потоків повинна використовуватися, якщо ви встановлюєте PHP як модуль Apache в робочому MPM (мультиобробна модель) або в іншому середовищі, де одночасно працюють кілька потоків PHP.
Apache MPM prefork з modphp використовується тому, що його легко налаштувати / встановити. Виконання продуктивності - це досить неефективно. Мій кращий спосіб зробити стек, FastCGI / PHP-FPM. Таким чином ви можете використовувати набагато швидший MPM Worker. Весь PHP залишається без потоку, але Apache подається з потоком (як слід).
Так в основному, знизу вгору
Linux
Apache + MPM Worker + ModFastCGI (НЕ FCGI) | (або) | Черокі | (або) | Nginx
PHP-FPM + APC
ModFCGI неправильно підтримує PHP-FPM або будь-які зовнішні програми FastCGI. Він підтримує лише сценарії FastCGI, що не управляються процесом. PHP-FPM - це менеджер процесів PHP FastCGI.
Відповідно до документації PHP ,
Безпека потоку означає, що двійковий файл може працювати в багатопотоковому контексті веб-сервера, наприклад Apache 2 в Windows. Безпека потоку працює, створюючи локальну копію пам’яті у кожному потоці, щоб дані не стикалися з іншим потоком.
Отже, що я вибираю? Якщо ви вирішите запустити PHP як двійковий файл CGI, тоді вам не знадобиться безпека потоку, оскільки двійковий файл викликається при кожному запиті. Для багатопотокових веб-серверів, таких як IIS5 та IIS6, слід використовувати потокову версію PHP.
Наступні бібліотеки не є безпечними для потоків. Вони не рекомендуються для використання в багатопотокових середовищах.