Php thread safe или non thread safe для windows

Php thread safe или non thread safe для windows

Прелесть open-source кода в его открытости :)) Т.е. при наличии ума/времени/желания можно разобраться, как именно работает программа. Обратная сторона такого кода — сложность в получении нужных скомпилированных пакетов. Например, PHP можно скачать в виде исходников для Nix-систем с последующей компиляцией/сборкой. Для Windows все уже собрано, но готовых бинарных пакетов много! Варианты с «thread safe/non thread safe«, VC6/VC9 и разные версии самого PHP. Статья создана для прояснения ситуации. В основе — разные источники, частично — перевод с английского. Все для того, чтоб в следующий раз мне опять не разбираться — «че к чему!?».

Нужная версия PHP зависит от версии веб-сервера, на котором он будет использоваться. Например, Apache 1.3.x работает с РНР версии 3.0.х, Apache 2.х работает с РНР версии 4.0 и выше. Но это не такая уж проблема, ориентируйтесь на более новые стабильные релизы и то, что стоит у хостера.

Что за приписки VC6, VC9, VC11? Исходники PHP под Windows компилируются в Visual Studio. VC9 получается при компиляции в VS 2008, VC11 — Visual Studio 2012. Соответственно, чтобы все это дело у вас работало, на компе должны быть установлены библиотеки Visual C++ Redistributable for Visual Studio соответствующего года. Некоторые разъяснения по этому поводу здесь.

Кроме того, если web-сервером у вас будет старенький Apache с сайта apache.org, то нужно качать VC6 версии PHP, для компиляции которых использовался Visual Studio 6. Если же PHP будет работать для IIS или в связке с более новым Apache, то можно собрать что-нибудь посовременнее 😉

Для меня главным ступором в выборе служит хостер. Сейчас есть стабильная версия PHP 5.5.4, а у него до сих пор 5.2.17!

Теперь самая интересная часть: «thread safe or non thread safe?»
Вольный перевод статьи Difference between PHP thread safe and non thread safe binaries (Dominic Ryan, 27.09.2007)

Я настолько ломанного английского еще не видел :(( Хотел по-быстрому перевести статью, но с трудом понимаю, что автор понаписал. Постоянные переходы между «what-is-that» и сложно-составные предложения вообще выносят мОСк. Перевод на русский так же осложняется тем, что у меня не хватает знаний и фантазии как правильно по-русски должно называться то, что обычно пишется только на английском %) Например техническое понятие «multi proccess architecture» я ни разу не видел на русском, а мой перл «потоко-небезопасные» вообще под вопросом здравого смысла. Вообщем, что получилось, то привожу.

Разница между thread safe и non thread safe бинарными пакетами PHP

С тех пор, когда PHP впервые появился под Windows 20 октября 2000 года в версии PHP 3.0.17, его бинарные пакеты всегда были собраны как потоко-безопасные (thread safe, TS). Основание следующее: Windows использует мульти-поточную архитектуру работы, а Nix-системы поддерживают мульти-процессовую архитектуру. Если PHP был скомпилирован как мульти-процессовое CGI-приложение вместо мульти-поточного, то его использование в качестве CGI-модуля под Windows на сервере IIS приводит к сильным тормозам и загрузке процессора. С другой стороны, можно подключить PHP на IIS, как ISAPI-модуль (требуется мульти-поточная сборкаприм. переводчика). Тогда возникает другая проблема: некоторые популярные расширения PHP разработаны с ориентиром на Unix/Linux, т.е. с мульти-процессовой архитектурой, что приводит к краху PHP, подключенному на IIS в качестве ISAPI-модуля. Т.о. создание CGI — наиболее стабильная среда для PHP на IIS с основным недостатком, что это ужасно медленно. Приходится загружать и выгружать всю среду PHP из памяти каждый раз, когда есть запрос.

В то время было несколько вариантов для увеличения производительности PHP на IIS. Первый — использовать кеширование опкода программами типа eAccelerator, которые сохраняют PHP-скрипты в частично скомпилированном состоянии на диске и/или в памяти. Такой подход значительно сокращает время выполнения скрипта. Другой вариант заключался в настройке IIS на использование PHP в режиме FastCGI. При этом PHP-процесс после отработки не закрывался, а получал новое задание с очередным php-запросом. К тому же можно было запустить несколько PHP-процессов одновременно, ощутимо ускоряя обработку запросов, что являлось бонусом CGI-режима PHP. При этом могли быть незначительные проблемы с совместимостью PHP-расширений. Это по-прежнему самый быстрый способ использования PHP, и именно на задание такой конфигурации IIS настроен установщик «IIS Aid PHP Installer».

Бинарники, собранные в потоко-небезопасном режиме (non thread safe, NTS), позволяют сконфигурировать IIS (и другие веб-сервера под Windows) на использование PHP, как стандартный CGI-интерфейс с сильным приростом производительности, т.к. в этом случае (в такой сборке) PHP-процессу не нужно дожидаться синхронизации нитей. При сравнении работы «thread safe» и «non thread safe» бинарных пакетов PHP на IIS в качестве стандартного CGI-интерфейса прирост быстродействия составляет до 40%, но это все равно не так шустро как использование опкода в FastCGI методе. А самый большой косяк в том, что нельзя стабильно использовать потоко-небезопасные бинарники вместе с потоко-безопасными. Это значит, что вы не можете использовать системы кеширования опкода типа eAccelerator в среде PHP, созданной потоко-небезопасными бинарными пакетами (утверждение, верное на момент написания статьи).

Читайте также:  Windows setup tool microsoft

Если потоко-небезопасный PHP нельзя сконфигурировать до такой же скорости, что и потоко-безопасную среду, то зачем он нужен в такой сборке? Возвращаемся к FastCGI и разработкам Microsoft в этой области за последние несколько лет. Кодеры мелкомягких создали свой вариант FastCGI, который позволяет конфигурировать потоко-небезопасные бинарники PHP в режиме FastCGI, что доводит производительность до скорости света 🙂

Из статьи я сделал вывод, что тормоза наблюдаются только при использовании с веб-сервером IIS. В любом случае, тупняков под Windows+Apache я не видел. В ней же сказано, что можно разогнать NTS-сборку на любом веб-сервере, но я не представляю себе такой конфиг Apache.

Понравилась статья? Расскажите о ней друзьям:

PHP Thread Safe и Non-Thread Safe для Windows

Я загружаю PHP для Windows. У меня есть 2 варианта на сайте.

  1. PHP Thread Safe
  2. PHP Non-Thread Safe

Пожалуйста, ответьте на следующие вопросы:

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

3 ответа

Из документации PHP:

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

Так что я выбираю? Если вы решите запустить PHP как бинарный файл CGI, вам не понадобится безопасность потоков, потому что бинарный файл вызывается при каждом запросе. Для многопоточных веб-серверов, таких как IIS5 и IIS6, вы должны использовать многопоточную версию PHP.

Так что это действительно зависит от того, как вы хотите использовать PHP:

  • Apache + LoadModule : Thread Safe
  • Apache + FastCGI: не поддерживающий потоки
  • IIS: потокобезопасный
  • IIS + FastCGI: не поддерживает потоки

Руководство по PHP имеет хорошие инструкции по установке.

AFAIR, использующий PHP с FastCGI, является предпочтительным способом, он работает быстрее и обеспечивает более тонкую настройку безопасности.

Как установить PHP?

PHP — язык программирования (ЯП), на котором пишутся многие популярные программы и приложения. В статье будет рассказано о способах установки PHP, а также обо всех нюансах, с которыми может столкнуться пользователь.

Откуда загрузить PHP?

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

На официальном сайте можно найти разные версии ПО для разных компьютеров и операционных систем. Что нужно сделать пользователю для загрузки:

  1. Зайти на официальный сайт разработчика.
  2. Выбрать программу для своей операционной системы.
  3. Выбрать версию ПО.
  4. Нажать на кнопку загрузки.

Стоит отметить, что если планируется загрузка на ОС Windows XP, у пользователя может не получиться скачать программу более поздних версий. В этом случае необходимо загрузить zip-архив с файлами ПО, а потом перейти к установке PHP.

Thread Safe и Non Thread Safe — есть ли отличие?

Те пользователи, которые хотя бы однажды скачивали PHP, видели, что выбор файла для загрузки зависит не только от особенностей компьютера, но и от таких значений, как Thread Safe и Non Thread Safe. Здесь придется немного углубиться в историю.

В октябре 2000 года вышел PHP 3.0.17. Эта версия ЯП использовалась для работы на машинных кодах, которые управлялись такой операционной системой, как Windows. В этот период произошло разделение версий ЯП на такие ответвления, как Thread Safe и Non Thread Safe.

Операционная система Windows применяет мульти-поточную систему работы. При выборе пользователем версии PHP, скомпилированной как мульти-процессовое CGI-приложение, в процессе работы ПО могут возникнуть дополнительные проблемы и ошибки.

Чаще всего это происходит при установке ЯП в качестве модуля веб-сервера Apache или IIS. Пользователи должны учитывать, что HTTP сервер в ОС Windows (в том числе и Apache) функционирует в несколько потоков PHP. При этом модуль сервера Apache будет считаться одним из его потоков. Таким образом можно сделать вывод о том, что для стабильной работы ПО с Apache потребуется компиляция модуля в режиме Thread Safe.

Установка PHP: общие моменты

Перед установкой ПО необходимо понять в принципе, что представляет из себя PHP. Это популярный язык программирования, который позволяет:

  • Создавать сайты и мобильные приложения.
  • Создавать скрипты командной строки.
  • Писать GUI-приложения.

Главная цель использования ЯП — написание программ. Для этого пользователю необходимо само По PHP, веб-сервер и веб-браузер. Веб-сервер пользователи чаще всего арендуют. Можно также арендовать часть дискового пространства на веб-сервере. Тогда пользователю не потребуется загружать и устанавливать дополнительные программы для работы. Нужно будет только прописывать PHP-скрипты, загружать их на веб-сервер и анализировать результат работы при помощи веб-браузера.

При самостоятельной распаковке и установке PHP и сервера пользователь может воспользоваться двумя способами загрузки. Для большинстве серверов ПО может быть запущено как серверный модуль. Это действие актуально, если речь идет о Apache, Microsoft Internet Information Server.

Если ПО PHP не может взаимодействовать с интерфейсом используемого сервера, можно использовать его в качестве разработчика CGI. Таким образом можно сделать вывод о том, что пользователю потребуется настроить веб-сервер по такому принципу, который позволял бы исполнять все PHP-файлы как CGI-скрипты.

При использовании PHP в командной строке (например, для работы с текстовыми фрагментами) пользователю будет нужен PHP CLI. Для работы в этом случае не нужен будет ни веб-сервер, ни браузер. Если пользователю необходим язык программирования PHP для создания программ с графическим интерфейсом. Для этого в ходе работы потребуется использовать PHP-GTK.

Читайте также:  Zabbix agent windows firewall cmd

В этом случае принцип работы меняется, чем при веб-разработке. Программисты не будут выводить HTML или текст. Им нужно будет управлять окнами за счет PHP. Стоит учитывать, что PHP-GTK не включается в стандартный пакет PHP, который можно найти на официальном сайте разработчика.

Как установить ЯП на Windows без Apache

После скачивания программы ее потребуется установить. В примере будет рассмотрена установка ПО без отдельного веб-сервера. Стоит отметить, что в более поздних версиях программы веб-сервер уже встраивается в PHP. По принципу своей работы он подходит для работы с программами, графическими приложениями. Каким образом установить программу:

  1. Первым делом пользователь должен распаковать загруженный архив. Сделать это можно в любом месте на диске. В качестве примера будет рассмотрен диск C.
  2. Теперь пользователю будет нужно добавить путь к каталогу PHP в переменную PATH.
  3. Дождаться момента, когда загрузка будет завершена.
  4. Теперь необходимо убедиться в том, что ПО было установлено правильно. Для этого потребуется запустить командную строку от прав администратора, написать несколько команд: cd c:\php и php-S localhost:8000. Первая команда нужна для того, чтобы попасть в папку, где и был установлен язык программирования. вторая команда дает возможность открыть веб-сервер, который в поздних версиях уже встроен в ПО.
  5. Когда сервер будет запущен, на экране появится окно, которое будет свидетельствовать о правильной установке программы и корректной работе веб-сервера. Пользователи должны учитывать, что HTTP-сервер, который встроен в ЯП, применяет для подключения порт 8000. Если речь идет об Apache, в работе потребуется порт TCP 80 или 8000.
  6. Далее необходимо запустить веб-браузер и в адресной строке прописать команду: Http://localhost:8000/. На экране должно появиться сообщение о том, что к данному сайту пользователь не может получить доступ. Далее должно появиться уведомление с кодом ошибки. Пользователю необходимо указать не только каталог, но и сам скрипт, который требуется запустить.
  7. Теперь нужно создать два файла. Один из них будет называться index.php. В нем необходимо прописать только одну кодовую строку: . Данные потребуются сохранить в каталоге. Теперь можно поработать со вторым файлом. Его название будет sample.php. Он также будет содержать всего лишь одну кодовую строку. Она выглядит так —

Стоит учитывать, что загрузка программы PHP без Apache — это не всегда правильное решение. Прибегать к нему нужно только в крайних случаях. Этот способ работы может быть опасен для ПК из-за потери производительности скриптов.

Что такое модуль сервера Apache

Сервер Apache состоит из нескольких элементов:

  • Ядро сервера. Оно дает возможность выполнять все главные опции сервера. Ядро работает по протоколу HTML.
  • Конфигурационная часть. Она состоит из текстовых фрагментов, которые необходимы для настройки для выполнения серверных настроек. Конфигурация сервера происходит за счет работы с файлом httpd.conf. При работе с виртуальным хостом используется файл extra/httpd-vhosts.conf.
  • Третья часть архитектуры. Сервер Apache считается платформа зависимым. Он используется для создания мультипроцессорных элементов. Такие элементы чаще всего используются при взаимодействии с операционной системой UNIX.
  • Четвертая часть архитектуры. Сюда можно отнести модули для сервера Apache. Они могут создаваться как непосредственно самими разработчиками apache, так и иными корпорациями. Сегодня существует около 500 различных модулей для данного веб-сервера. Они позволяют расширить его возможности и функционал.
  • Пятый уровень архитектуры сервера является элементом виртуальных хостов apache. Он дает возможность сделать хостинги доступными для всех пользователей всемирной паутины.

Загрузка и установка PHP с Apache

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

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

Если речь идет о статистических сайтах, то им не требуется веб-сервер. В этом случае HTML страницы могут быть открыты в локальном режиме. Это объясняется тем, что браузеры имеют свойство работать с файлами ПК. Однако важно учитывать, что подобный принцип работы не дает возможности взаимодействовать с гостями веб-ресурсов. Больше интереса представляют сайты, на которых можно взаимодействовать с посетителями. Такие сайты называют динамическими.

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

При написании различных программ и разработке приложений больше всего внимания уделяется связке PHP+Apache. Здесь как клиентское приложение будет использовать веб-браузер. Серверным приложением будет PHP+Apache. Стоит отметить, что эта связка может расширяться за счет использования сторонних ПО и технологий.

Реализация всех процессов в интернете происходит через протокол HTTP. Это взаимодействие происходит за счет использования сервера Apache. Сам язык PHP в этом случае служит элементом программирования, который дает возможность делать несколько стандартных моментов:

  • Следить за взаимодействием через протокол HTTP.
  • Пользоваться базой данных для добавления сведений в таблицы. Добавлять информацию может как гость веб-сайта, так и непосредственно сам администратор веб-ресурса.

Стоит отметить, что нет таких браузеров, в которые автоматически будет встроен интерпретатор PHP кода. Отсюда можно сделать вывод, что браузер не может исполнить этот код. При разработке программ и приложений работа с кодом осуществляется на веб-сервере. Браузер в этом случае используется как элемент, который получает результаты работы кода. Процесс работы выглядит так:

  • Обмен данными осуществляется при помощи HTTP уведомлений.
  • Перед началом обмена между браузеров и веб-сервером устанавливается постоянное соединение. Для этого применяется ТСР порт 80.
  • Когда соединение будет налажено, случится обсуждение содержимого HTTP уведомления. По итогу будет решено, каким образом будет происходить обмен данными между браузером и сервером за счет служебных полей.
  • Данные, которые были отправлены с браузера на сервер, станут HTTP запросами. Они будут иметь методы, позволяющие понять, что именно необходимо браузеру.
  • Те данные, которые были отправлены сервером, станут HTTP ответами. Они состоят из кодов состояния, при помощи которых станет ясно, как веб-браузер отреагировал на команду сервера. Все коды состояния включают в себя три числа. Их класс будет зависеть от первой цифры.

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

Программисты должны понимать, что взаимодействие между веб-браузером бывает локальным. Например, когда Apache и PHP загружаются на одно и то же устройство, что и браузер совместно с клиентом. Это дает возможность пользователям настраивать веб-сайты еще до того, как будет приобретено его доменное имя и до того, как он в принципе будет отображаться в сети.

В большинстве случаев установка связки PHP+Apache считается достаточно сложным процессом. Поэтому программисты часто избегают подобных решений. Специально для этого были разработаны готовые серверные сборки. Допустим, AMPPS, Денвер. Это весьма удобные инструменты для работы, которые используются преимущественно новичками в сфере веб-разработки.

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

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

  • HTML NotePad++. Удобное ПО, которое чаще всего используют новички в сфере веб-разработки.
  • CSS Brackets. Бесплатная программа, предназначенная для верстальщиков. Она больше всего ориентирована на фронт-энд разработку.
  • JavaScript Sublime Text3. Это платное ПО, которое отличается широким функционалом и интуитивно понятным интерфейсом.
  • NetBeans. Многофункциональный редактор, который был разработан непосредственно для среды PHP.

Инструкция по установке программного обеспечения:

  1. Изначально пользователю потребуется загрузить PHP и Apache. Сделать это лучше всего на официальном сайте разработчика. Сторонние ресурсы использовать не рекомендуется, так как в этом случае высока вероятность столкнуться с вирусами и вредоносными файлами.
  2. Так как PHP будет использоваться как модуль Apache, должна получиться единая технология. По итогу два загруженных ПО будут применяться как одно целое. Чтобы было удобно пользоваться сервером, лучше всего продумать файловую систему для обеих программ. Этот этап был проделан еще на этапе установки Apache на компьютер.
  3. Теперь пользователю необходимо ознакомиться со структурой папок общего каталога. Сервер будет располагаться на диске С. При этом всегда можно поменять местоположение файла на этапе загрузки. Далее необходимо обратиться к папке PHP. В ней необходимо распаковать архив, который был загружен с официального сайта разработчика.
  4. Стоит учитывать тот момент, что связка PHP и Apache будет стабильно функционировать только на операционной системе Windows 7 и выше. Далее пользователю необходимо прописать путь к папке PHP в системную переменную PATH. Путь будет следующим: с:\server\php.
  5. В переменную PATH нужно добавить еще одно значение: с:\server\apache\bin.
  6. Теперь следует отыскать файл HTTPD.COM. В нем необходимо вписать расположение модуля php и путь к файлу php.ini.
  7. В этом же файле пользователь должен найти переменную Directoryindex. Ее значение потребуется изменить на index.html index.php.
  8. Теперь необходимо создать файл . Все данные потребуется сохранить в папке www. Ее пользователь должен создать предварительно. Файл нужно сохранить под названием index.php.
  9. Если на ПК сервер уже запущен, то потребуется сделать перезагрузку. Это необходимо для того, чтобы Apache начал работать в связке. Если сервер не запущен, то его необходимо запустить, используя ApacheMonitor.
  10. Теперь необходимо запустить браузер, в адресной строке прописать: Http://localhost/index.php. Таким образом пользователь сможет убедиться, что связка языка программирования и веб-сервера запущена и успешно работает, а сама PHP функционирует в качестве модуля Apache.
  11. Далее потребуется приступить к конфигурации PHP. Пользователь должен отыскать элемент Php.ini-development и сменить его название на php.ini.

В завершении установки необходимо перезапустить Apache, чтобы все изменения вступили в силу. Это нужно для того, чтобы ЯП как модуль веб-сервера работал исправно и корректно. Стоит учитывать, что конфигурация PHP будет напрямую зависеть от веб-сервера Apache.

Если пользователю потребуется работа с расширениями, установленными на ПК, то он должен будет выполнить простую команду в строке Windows: php-m. Также можно найти файл index.php, который был сформирован еще на этапе распаковки программного обеспечения.

Читайте также:  Linux cpu temperature monitoring
Оцените статью