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

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

Выбор версии PHP для 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, созданной потоко-небезопасными бинарными пакетами (утверждение, верное на момент написания статьи).

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

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

[1oo%, EoF]

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

  • PHP For Windows

    This site is dedicated to supporting PHP on Microsoft Windows.
    It also supports ports of PHP extensions or features as well as
    providing special builds for the various Windows architectures.

    If you like to build your own PHP binaries, instructions can be found on the
    Wiki.

    PECL For Windows

    Which version do I choose?

    IIS

    If you are using PHP as FastCGI with IIS you should use the Non-Thread Safe (NTS) versions of PHP.

    Apache

    Please use the Apache builds provided by Apache Lounge.
    They provide VC15 and VS16 builds of Apache for x86 and x64.
    We use their binaries to build the Apache SAPIs.

    With Apache, using the apache2handler SAPI, you have to use the Thread Safe (TS) versions of PHP.

    VC15 & VS16

    More recent versions of PHP are built with VC15 or VS16 (Visual Studio 2017 or 2019 compiler respectively) and
    include improvements in performance and stability.

    — The VC15 and VS16 builds require to have the Visual C++ Redistributable for Visual Studio 2015-2019 x64 or x86 installed

    TS and NTS

    TS refers to multithread capable builds. NTS refers to single thread only builds. Use case for TS binaries involves interaction with
    a multithreaded SAPI and PHP loaded as a module into a web server. For NTS binaries the widespread use case is interaction with a web server through
    the FastCGI protocol, utilizing no multithreading (but also for example CLI).

    What is PGO?

    Profile Guided Optimization is an optimization
    feature available in Microsoft’s Visual C++ compiler that allows you to optimize an output file based on profiling data collected during test runs of the application or module.

    Links:

    • PGO on MSDN
    • Visual C++ Team Blog — PGO with PHP
    • PHP PGO build for maximum performance (old)

    amd64 (x86_64) Builds

    PHP 7 provides full 64-bit support. The x64 builds of PHP 7 support native 64-bit integers, LFS, 64-bit memory_limit and much more.

    x64 builds are recommended (almost all Windows installations support x64).

    Long and multibyte path

    PHP 7.1+ supports long and UTF-8 paths. See the manual for details.

    Archives

    Past releases are available from our archives, older versions
    not found there can be found at the Museum.

  • PHP 8.2 (8.2.2)

    Download source code [25.9MB]

    Download tests package (phpt) [15.44MB]

    VS16 x64 Non Thread Safe (2023-Jan-31 22:06:06)

    • Zip
      [30.21MB]
      sha256: b464e94c7022e3df826e001d3837c92542bf89d7e8cacab0ef75835771e77c56
    • Debug Pack
      [24.49MB]
      sha256: 75a089780e1c4e853bccc079112d6d529a0d290d98ffaf4c7107e2e649382b58
    • Development package (SDK to develop PHP extensions)
      [1.23MB]
      sha256: 0f0120b72cd650f48eeaa0e5dcc8039d0833a8e32f4ec6b78ac0d49b2f4d0933

    VS16 x64 Thread Safe (2023-Jan-31 21:56:02)

    • Zip
      [30.32MB]
      sha256: 31c2c009a66ccaae5c39b9aea37ff55ae6fa080c7b48317513699b4df2582e14
    • Debug Pack
      [24.5MB]
      sha256: 1bfd9b4e6b4ac57bcaf515d9183b8e6730796b3dd149f7837bd5b54dc032960b
    • Development package (SDK to develop PHP extensions)
      [1.23MB]
      sha256: 4fb4c958505e8c1578662ead23b3b900fe06f46dabb69e6c884b736cb7e78ddb

    VS16 x86 Non Thread Safe (2023-Jan-31 21:47:40)

    • Zip
      [27.12MB]
      sha256: db7ce99b1fd8ded5bab46f20bad1b8861dd9113c620ac37c7ec6d14375bb449c
    • Debug Pack
      [25.09MB]
      sha256: 434ecf5029bf0f71cdcc7fbb270a91c298312fb5bd011950d778a582a86981a5
    • Development package (SDK to develop PHP extensions)
      [1.23MB]
      sha256: d13cc4750e952997b77796a658a5dba3a29efbea11346ae9884e9b7bd4d35c6c

    VS16 x86 Thread Safe (2023-Jan-31 21:57:38)

    • Zip
      [27.1MB]
      sha256: d48104994da4f0d56c1d5382da4be11af8a9991872b04f7167a98f7182594a75
    • Debug Pack
      [24.73MB]
      sha256: bcfbf756b7bbdb5e70b69b4583b4fff7e2561310ba3664e075a44fd1bc7012cb
    • Development package (SDK to develop PHP extensions)
      [1.23MB]
      sha256: 40c31c809078893667230c305871f5f293dcd5e210e1c7e8cf15c05eed910031

    PHP 8.1 (8.1.15)

    Download source code [25.42MB]

    Download tests package (phpt) [15.19MB]

    VS16 x64 Non Thread Safe (2023-Feb-01 10:02:39)

    • Zip
      [29.26MB]
      sha256: fcc6f9195e8083616dd626177f0f3a25f1ca63fc06b075c7fa988d9c19a708e4
    • Debug Pack
      [23.85MB]
      sha256: 6c87551949755c72702e63c2a1418da8beafda390717dd727f59f3dd3f1a6f1d
    • Development package (SDK to develop PHP extensions)
      [1.21MB]
      sha256: fb0439045cbce3243f9d782506515115980064144609b6cbab0fc795334a12ee

    VS16 x64 Thread Safe (2023-Feb-01 00:27:30)

    • Zip
      [29.36MB]
      sha256: 116b890c0053c28d140d93c699e5c6995944fcc9420ac117f44772b1bb69f9ff
    • Debug Pack
      [23.85MB]
      sha256: d28374f3252a4e124148c4f754127b01c15e9a59c6c08c5c8f0ea196280bcb68
    • Development package (SDK to develop PHP extensions)
      [1.21MB]
      sha256: 093415a4ed5e46a42cdd8554aef8a168be187b88d31cde0c1f8d06ecd640a58c

    VS16 x86 Non Thread Safe (2023-Feb-01 00:34:52)

    • Zip
      [26.32MB]
      sha256: ff793db8badd3d52651bb3a73f45bae095fef25f064c460805ccbe5bb8659e83
    • Debug Pack
      [24.41MB]
      sha256: 336a9428dd9c3e796f7078ec29ead01154ae666e23f35f1e7e8033383bb40044
    • Development package (SDK to develop PHP extensions)
      [1.21MB]
      sha256: 03ec8817ac5318d59a698a5d831e40006f3f6823ae08a0d27e6db4669f6ba465

    VS16 x86 Thread Safe (2023-Feb-01 00:34:52)

    • Zip
      [26.3MB]
      sha256: 000bf25e12c8bafeac2d732f5ea37eff49c50cf12d42ebe3bd95d95028e6086b
    • Debug Pack
      [24.05MB]
      sha256: fa38a832065168a973e5d34cb50ff54933b0232ecfb1a17d4fc4925d379c548b
    • Development package (SDK to develop PHP extensions)
      [1.21MB]
      sha256: bea6610299bf8109cfcc81986975bd63bd3edaf27edb6180a8b4115e10f57d37

    PHP 8.0 (8.0.27)

    Download source code [23.47MB]

    Download tests package (phpt) [13.55MB]

    VS16 x64 Non Thread Safe (2023-Jan-03 17:44:14)

    • Zip
      [25.52MB]
      sha256: 1449c94819fc2d7c58b42e8592307282faaa4eec718268beb82d9524e651adad
    • Debug Pack
      [23.21MB]
      sha256: da9cf0723c567ef54d2db87f1d74bc4372a755f211c158a4286b601dea1dfca9
    • Development package (SDK to develop PHP extensions)
      [1.16MB]
      sha256: bfa1914f3adc47297c658610394dfdce26d70ef33ee791e136cc0a16650d7c89

    VS16 x64 Thread Safe (2023-Jan-03 17:41:52)

    • Zip
      [25.63MB]
      sha256: 54d6cc64856268916f7a3ddaae7d636c9f54dd11b0baf083218baf102fe153fa
    • Debug Pack
      [23.22MB]
      sha256: e61ee5b4bf96c8fe972d80d1d70def1a34d9df253f04ee1089d2fa6643d6192d
    • Development package (SDK to develop PHP extensions)
      [1.16MB]
      sha256: 661c83f05588ebdb754ad2ab5b8f11ba57934fd318425d3d6ef8a3abaff1ca1b

    VS16 x86 Non Thread Safe (2023-Jan-03 17:57:10)

    • Zip
      [23.65MB]
      sha256: f997a883eda473724ca939d929369dd523b887357f60dac52a85f2e83d2e821a
    • Debug Pack
      [23.86MB]
      sha256: f07d9abf7889bf50f8e3ecb15985c0d3c7af0b5843f52aeff57e8e60bdecad52
    • Development package (SDK to develop PHP extensions)
      [1.16MB]
      sha256: bb82627f57c5fc3583b9a9d256bea315723c21470ce8307e249902c6e3aa35ca

    VS16 x86 Thread Safe (2023-Jan-03 17:35:46)

    • Zip
      [23.64MB]
      sha256: c8163879e3e93c87afd63ad287ed2543503abc31be5280122616688146082d54
    • Debug Pack
      [23.52MB]
      sha256: 3dd2171285213c57ebae007e3e9b219a320f55e87234de037187dac3345a7f83
    • Development package (SDK to develop PHP extensions)
      [1.16MB]
      sha256: ae5b51fc67cd7a70800dac23126f95d10247fadcc554e2d2609aef833e88e462

The other answers address SAPIs implementations, and while this is relevant the question asks the difference between the thread-safe vs non thread-safe distributions.

First, PHP is compiled as an embeddable library, such as libphp.so on *NIX and php.dll on Windows. This library can be embedded into any C/CPP application, but obviously it is primarily used on web servers. At it’s core PHP starts up in in two major phases, the module init phase and then request init phase. Module init initializes the PHP core and all extensions, where request init initializes PHP userspace — both native userspace features as well as PHP code itself.

The PHP library is setup to where the module phase only has to be called on once, but the request phase has to be reinitialized for each HTTP request. Note that CLI links to the same library as mod_php ect, and still has to go through these phases internally even though it may not be used in the context of processing HTTP requests. Also, it’s important to note that PHP isn’t literally designed for processing HTTP requests — most accurately, it is designed for processing CGI events. Again, this isn’t just php-cgi, but all SAPI/applications including php-fpm, mod_php, CLI and even the exceedingly rare PHP desktop application.

Webservers (or more typically SAPIs) that link to libphp tend to follow one of four patterns:

  • create a completely new instance of a PHP per request (old CGI pattern, not common and obviously not recommended)
  • create one PHP instance, but go though both initialization phases (together) in separate forked child processes
  • create one PHP instance, do module init once in parent process pre-fork, and then the individual request phase post-fork per HTTP request

Note that in examples 2 and 3 the child process is typically terminated after each request. In example 2 the child process must be terminated at the end of each request.

The forth example is related to threaded implementations

  • call module init once in main thread, then call request init within other threads.

In the threaded case, request handling threads tend to utilize a thread pool, with each thread running in a loop initializing the request phase at the beginning and than destroying the request phase at the end which is more optimal than spawning a new thread per request

Regardless of how threaded implementations utilize libphp, if the module phase is initialized in one thread and request phases are called in different threads (which is the case PHP was designed for) it requires a non-trivial amount of synchronization, not just within the PHP core, but also within all native PHP extensions. Note that this is not just a matter of a “request” at this point, but synchronization that it being called on per PHP OPCODE that relies on any form of resource within the PHP core (or any PHP extension) which exists in a different thread as PHP userspace.

This places a huge demand on synchronization within thread-safe PHP distributions, which is why PHP tends to follow a «share nothing» rule which helps minimize the impact, but there is no such thing as truly «sharing nothing» in this pattern, unless each thread contains a completely separate PHP context, where the module phase and request phase is all done within the same thread per request which is not suggested or supported. If the context built within the module init phase is in a separate thread as the request init phase there will most definitely be sharing between threads. So the best attempt is made to minimize context within the module init phase that must be shared between threads, but this is not easy and in some cases not possible.

This is especially true in more complicated extensions which have their own requirements of how a their own context must be shared between threads, with openssl being a major culprit of of this example which effectually extends outward to any extension that uses it, whether internal such as PHP stream handlers or external such as sockets, curl, database extensions, etc.

If not obvious at this point, thread-safe vs non thread-safe is not just a matter of how PHP works internally as a “request handler” within an SAPI implementation, but a matter of how PHP works internally as an embedded virtual machine for a programming language.

This is all made possible by the TSRM, or the thread safe resource manager, which is well made and handles a very large amount of synchronization with little perceived overhead, but the overhead is definitely there and will grow not just based on how many requests per second that the server must handle (the deciding factor on how may threads the SAPI requires), but also by how much PHP code is used per request (or per execution). In other words, large bloated frameworks can make a real difference when it comes specifically to TSRM overhead. This isn’t to speak of overall PHP performance and resource requirements within thread-safe PHP, but just the additional overhead of TSRM itself within thread-safe PHP.

As such, pre compiled PHP is distributed in two flavors, one built where TSRM is active in libphp (thread-safe) and one where libphp does not use any TSRM features (non thread-safe) and thus does not have the overhead of TSRM.

Also note that the flag used to compile PHP with TSRM (—enable-maintainer-zts or —with-zts in later PHP versions) causes phpize to extend this outward into the compilation of extensions and how they initialize their own libraries (libssl, libzip, libcurl, etc) which will often have their own way of compiling for thread-safe vs non thread-safe implementations, i.e their own synchronization mechanisms outside of TSRM and PHP as a whole. While this not exactly PHP related, in the end will still have effect on PHP performance outside of TSRM (meaning on top of TSRM). As such, PHP extensions (and their dependents, as well as external libraries PHP or extensions link to or otherwise depend on) will often have different attributes in thead-safe PHP distributions.

The other answers address SAPIs implementations, and while this is relevant the question asks the difference between the thread-safe vs non thread-safe distributions.

First, PHP is compiled as an embeddable library, such as libphp.so on *NIX and php.dll on Windows. This library can be embedded into any C/CPP application, but obviously it is primarily used on web servers. At it’s core PHP starts up in in two major phases, the module init phase and then request init phase. Module init initializes the PHP core and all extensions, where request init initializes PHP userspace — both native userspace features as well as PHP code itself.

The PHP library is setup to where the module phase only has to be called on once, but the request phase has to be reinitialized for each HTTP request. Note that CLI links to the same library as mod_php ect, and still has to go through these phases internally even though it may not be used in the context of processing HTTP requests. Also, it’s important to note that PHP isn’t literally designed for processing HTTP requests — most accurately, it is designed for processing CGI events. Again, this isn’t just php-cgi, but all SAPI/applications including php-fpm, mod_php, CLI and even the exceedingly rare PHP desktop application.

Webservers (or more typically SAPIs) that link to libphp tend to follow one of four patterns:

  • create a completely new instance of a PHP per request (old CGI pattern, not common and obviously not recommended)
  • create one PHP instance, but go though both initialization phases (together) in separate forked child processes
  • create one PHP instance, do module init once in parent process pre-fork, and then the individual request phase post-fork per HTTP request

Note that in examples 2 and 3 the child process is typically terminated after each request. In example 2 the child process must be terminated at the end of each request.

The forth example is related to threaded implementations

  • call module init once in main thread, then call request init within other threads.

In the threaded case, request handling threads tend to utilize a thread pool, with each thread running in a loop initializing the request phase at the beginning and than destroying the request phase at the end which is more optimal than spawning a new thread per request

Regardless of how threaded implementations utilize libphp, if the module phase is initialized in one thread and request phases are called in different threads (which is the case PHP was designed for) it requires a non-trivial amount of synchronization, not just within the PHP core, but also within all native PHP extensions. Note that this is not just a matter of a “request” at this point, but synchronization that it being called on per PHP OPCODE that relies on any form of resource within the PHP core (or any PHP extension) which exists in a different thread as PHP userspace.

This places a huge demand on synchronization within thread-safe PHP distributions, which is why PHP tends to follow a «share nothing» rule which helps minimize the impact, but there is no such thing as truly «sharing nothing» in this pattern, unless each thread contains a completely separate PHP context, where the module phase and request phase is all done within the same thread per request which is not suggested or supported. If the context built within the module init phase is in a separate thread as the request init phase there will most definitely be sharing between threads. So the best attempt is made to minimize context within the module init phase that must be shared between threads, but this is not easy and in some cases not possible.

This is especially true in more complicated extensions which have their own requirements of how a their own context must be shared between threads, with openssl being a major culprit of of this example which effectually extends outward to any extension that uses it, whether internal such as PHP stream handlers or external such as sockets, curl, database extensions, etc.

If not obvious at this point, thread-safe vs non thread-safe is not just a matter of how PHP works internally as a “request handler” within an SAPI implementation, but a matter of how PHP works internally as an embedded virtual machine for a programming language.

This is all made possible by the TSRM, or the thread safe resource manager, which is well made and handles a very large amount of synchronization with little perceived overhead, but the overhead is definitely there and will grow not just based on how many requests per second that the server must handle (the deciding factor on how may threads the SAPI requires), but also by how much PHP code is used per request (or per execution). In other words, large bloated frameworks can make a real difference when it comes specifically to TSRM overhead. This isn’t to speak of overall PHP performance and resource requirements within thread-safe PHP, but just the additional overhead of TSRM itself within thread-safe PHP.

As such, pre compiled PHP is distributed in two flavors, one built where TSRM is active in libphp (thread-safe) and one where libphp does not use any TSRM features (non thread-safe) and thus does not have the overhead of TSRM.

Also note that the flag used to compile PHP with TSRM (—enable-maintainer-zts or —with-zts in later PHP versions) causes phpize to extend this outward into the compilation of extensions and how they initialize their own libraries (libssl, libzip, libcurl, etc) which will often have their own way of compiling for thread-safe vs non thread-safe implementations, i.e their own synchronization mechanisms outside of TSRM and PHP as a whole. While this not exactly PHP related, in the end will still have effect on PHP performance outside of TSRM (meaning on top of TSRM). As such, PHP extensions (and their dependents, as well as external libraries PHP or extensions link to or otherwise depend on) will often have different attributes in thead-safe PHP distributions.

Improve Article

Save Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Thread-safe: It is used to ensure that when the shared data structure which is manipulated by different threads are prevented from entering the race condition. Thread-safety is recommended when the web server run multiple threads of execution simultaneously for different requests. In Thread Safety binary can work in a multi-threaded web server context. Thread Safety works by creating a local storage copy in each thread so that the data will not collide with another thread.
    For example:

    • Apache + LoadModule
    • IIS

    Non-thread-safe: It does not check the safety of the threads which makes it faster to run but at the same time, it becomes more unstable and crashes very frequently. It refers to a single thread only builds. In non-thread safe version binaries widespread use in the case of interaction with a web server through the FastCGI protocol, by not utilizing multi-threading.
    For example:

    • Apache + FastCGI
    • IIS + FastCGI

    So it depends on the way that you want to use PHP. AFAIR running PHP with the fastCGI is the preferable way. If you are unknown which version of PHP is installed in your system then there is an easy way to know that.
    Check the version of installed PHP Thread safe or Non Thread Safe:
    Open a phpinfo() and search for the line Thread safety for a thread-safe build you should find enable.

    • On Windows:
      php -i|findstr "Thread"
      
    • On *nix:
      php -i|grep Thread
      
    • In the both cases will display any one
      Thread Safety => enabled
      //or
      Thread Safety => disabled
      

    На чтение 13 мин. Опубликовано 11.03.2021

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

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

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

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

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

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

    Стоит отметить, что если планируется загрузка на ОС 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.

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

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

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

    1. Первым делом пользователь должен распаковать загруженный архив. Сделать это можно в любом месте на диске. В качестве примера будет рассмотрен диск C. Как установить PHP?
    2. Теперь пользователю будет нужно добавить путь к каталогу PHP в переменную PATH. Как установить PHP?
    3. Дождаться момента, когда загрузка будет завершена.
    4. Теперь необходимо убедиться в том, что ПО было установлено правильно. Для этого потребуется запустить командную строку от прав администратора, написать несколько команд: cd c:php и php-S localhost:8000. Первая команда нужна для того, чтобы попасть в папку, где и был установлен язык программирования. вторая команда дает возможность открыть веб-сервер, который в поздних версиях уже встроен в ПО.
    5. Когда сервер будет запущен, на экране появится окно, которое будет свидетельствовать о правильной установке программы и корректной работе веб-сервера. Пользователи должны учитывать, что HTTP-сервер, который встроен в ЯП, применяет для подключения порт 8000. Если речь идет об Apache, в работе потребуется порт TCP 80 или 8000.
    6. Далее необходимо запустить веб-браузер и в адресной строке прописать команду: Http://localhost:8000/. На экране должно появиться сообщение о том, что к данному сайту пользователь не может получить доступ. Далее должно появиться уведомление с кодом ошибки. Пользователю необходимо указать не только каталог, но и сам скрипт, который требуется запустить.
    7. Теперь нужно создать два файла. Один из них будет называться index.php. В нем необходимо прописать только одну кодовую строку: <?php phpinfo ();?>. Данные потребуются сохранить в каталоге. Теперь можно поработать со вторым файлом. Его название будет sample.php. Он также будет содержать всего лишь одну кодовую строку. Она выглядит так — <h1><?php echo «Hello,world!»?></h1>. Чтобы работать с открытыми файлами, пользователю необходимо использовать удобный редактор, который будет поддерживать разные функции. Многие программисты для этих целей советуют применять NetBeans, так как он имеет интеграции со средой разработки PHP. Если такой возможности нет, то следует присмотреться к таким ПО, как HTML Notepad++, Sublime Text3. Можно также воспользоваться бесплатной программой CSS Brackets.
    8. Теперь необходимо зайти в браузер, найти адресную строку и прописать в ней такую команду: Http://localhost:8000/index.php. Скрипт запустится, пользователь получит всю необходимую информацию о работе системы в специальном окне уведомлений. Как установить PHP?
    9. Теперь можно прописать в строке поиска такую команду: Http://localhost:8000/sample.php. Этот скрипт также будет работать. Как установить 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 на компьютер. Как установить PHP?
    3. Теперь пользователю необходимо ознакомиться со структурой папок общего каталога. Сервер будет располагаться на диске С. При этом всегда можно поменять местоположение файла на этапе загрузки. Далее необходимо обратиться к папке PHP. В ней необходимо распаковать архив, который был загружен с официального сайта разработчика. Как установить PHP?
    4. Стоит учитывать тот момент, что связка PHP и Apache будет стабильно функционировать только на операционной системе Windows 7 и выше. Далее пользователю необходимо прописать путь к папке PHP в системную переменную PATH. Путь будет следующим: с:serverphp.
    5. В переменную PATH нужно добавить еще одно значение: с:serverapachebin.
    6. Теперь следует отыскать файл HTTPD.COM. В нем необходимо вписать расположение модуля php и путь к файлу php.ini. Как установить PHP?
    7. В этом же файле пользователь должен найти переменную Directoryindex. Ее значение потребуется изменить на index.html index.php.
    8. Теперь необходимо создать файл <?php phpinfo ()?>. Все данные потребуется сохранить в папке 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, который был сформирован еще на этапе распаковки программного обеспечения.

    Привет, посетитель сайта ZametkiNaPolyah.ru! Продолжаем рубрику Веб-программирование и ее раздел PHP. Эта запись является своеобразной вводной инструкцией для новичка по установке PHP 5.6 на Winodws 10. Причем устанавливать PHP на Windows мы будем без использования Apache, вместо него мы будем использовать встроенный в PHP веб-сервер. Сразу оговорюсь, что устанавливать PHP без Apache на Windows даже в ознакомительных целях я бы не рекомендовал, о причинах мы поговорим в конце данной записи, поэтому считайте данную статью ознакомительной.

    Где скачать и как установить PHP? Инструкция по установке PHP 5.6 на Windows без использования Apache на встроенный в PHP сервер

    Где скачать и как установить PHP? Инструкция по установке PHP 5.6 на Windows без использования Apache на встроенный в PHP сервер

    Итак, аннотация к нашей инструкции для новичка по установки PHP на Windows без Apache:

    1. Мы поговорим о том откуда скачать PHP.
    2. Научимся выбирать версию PHP для установки под наши нужды и технические особенности компьютера: семейство, к которому принадлежит ОС и ее разрядность, заодно посмотрим на разницу между Thread Safe и Non Thread Safe в PHP.
    3. Также мы поговорим про особенности использования PHP для различных целях, а также о базовых принципах работы серверной технологии PHP.
    4. И в заключении мы установим PHP 5.6 на Windows 10 и запустим наши скрипты, написанные на PHP, без использования сервера Apache, воспользовавшись встроенным в PHP веб-сервером и узнаем почему данный подход не самый правильный и удобный даже для знакомства с PHP.

    Где скачать PHP 5.6?

    Содержание статьи:

    • Где скачать PHP 5.6?
    • Разница между Thread Safe и Non Thread Safe в PHP
    • Немного полезной информации о PHP перед его установкой
    • Краткая инструкция по установке PHP на Windows 10 без Apache на встроенный сервер

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

    Страница выбора версии PHP для скачивания и последующей установки

    Страница выбора версии PHP для скачивания и последующей установки

    В данном случае нас интересует версия PHP 5.6 и ее реализация для компьютеров с операционной системой Windows на борту, нажав на кнопку «Download Windows», вы перейдете на страницу, в которой сможете выбрать версию PHP, соответствующую версии вашей ОС и ее разрядности, смотрите скрин ниже.

    Страница, на которой можно выбрать версию PHP, соответствующую версии ОС и ее разрядности для скачивания и последующей установки

    Страница, на которой можно выбрать версию PHP, соответствующую версии ОС и ее разрядности для скачивания и последующей установки

    Я буду скачивать PHP VC11 x64 Thread Safe, так как у меня 64 битная Windows 10. Отмечу: если вы счастливый обладатель Windows XP, то, скорее всего, вы не сможете установить PHP версий 5.5 или 5.6. Скачивать нужно zip архив с файлами PHP, ведь мы же не хотим заниматься еще и компиляцией PHP из исходных файлов.

    Разница между Thread Safe и Non Thread Safe в PHP

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

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

    А теперь о том в чем разница между этими версиями сборки PHP. Вся соль в том, что ОС Windows использует мульти-поточную архитектуру работы, а операционные системы семейства UNIX поддерживают мульти-процессовую архитектуру. Если вы выберете версию PHP, скомпилированную, как мульти-процессовое CGI-приложения, то у вас возникнет много проблем в работе ваших PHP приложений в том случае, если вы будете устанавливать PHP как модуль веб-сервера Apache или IIS.

    Всё дело в том, что HTTP сервер в Windows, в частности веб-сервер Apache работает в несколько потоков и PHP, установленный как модуль сервера Apache, будет являться одним из его потоков. Следовательно, PHP для правильной работы с Apache, как его модуль, должен быть скомпилирован именно в режиме Thread Safe.

    Немного полезной информации о PHP перед его установкой

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

    1. С помощью PHP мы можем создавать различные веб-сайты и веб-приложения.
    2. PHP дает возможность писать скрипты командной строки.
    3. При помощи PHP мы можем создавать приложения с графическим интерфейсом.

    Нас интересует больше всего первая функция данного языка программирования. Для этого нам потребуется:

    • веб-сервер, который, кстати, с недавних пор встроен в PHP и подходит для целей изучения PHP и его возможностей, но никак не подойдет для реальных проектов;
    • браузер, чтобы просматривать результаты наших трудов;
    • СУБД или система управления базами данных, это может быть сервер MySQL, библиотека SQLite, СУБД PostgreSQL;
    • и непосредственно интерпретатор PHP.

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

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

    Отметим, что перед тем, как начать обмениваться сообщениями, браузер и сервер устанавливают HTTP соединение, которое является постоянным. Также у сообщений есть тело или объект HTTP сообщения, который содержит полезную для человека информацию, обычно (но не всегда) в качестве объекта сообщения выступает HTML документ или его фрагмент, со структурой которого мы познакомились ранее.

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

    Ранее мы разобрались с тем, что PHP может работать как модуль сервера, а может быть собран и установлен как обработчик CGI или FastCGI, во втором случае ваш веб-сервер должен исполнять PHP скрипты как CGI-скрипты. Если вы хотите использовать PHP в командной строке вашей ОС, то вам понадобится PHP CLI. Это не входит в рамки данной публикации, поэтому подробно не будем останавливаться, лишь скажем, что в этом случае нам не потребуется ни браузер, ни веб-сервер.

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

    Краткая инструкция по установке PHP на Windows 10 без Apache на встроенный сервер

    Мы разобрались с версиями PHP их особенностями и поговорили о принципах работы серверных технологий, также мы выбрали версию PHP, которую скачали. Самое время поговорить о том, как установить PHP 5.6 на Windows 10. Заметим, что устанавливать PHP мы будем без использования отдельного веб-сервера, так как начиная с PHP 5.4 в PHP есть свой собственный веб-сервер, который подходит для демонстрационных целей и изучения основ интерпретируемого языка PHP. В отдельной публикации мы поговорим про установку PHP как модуль сервера Apache 2.4. В этой же публикации мы установим PHP без Apache на Windows.

    Надеемся, что вы уже скачали нужную вам версию PHP и мы можем начать установку. Установку PHP на Windows мы будем делать по шагам.

    Шаг первый. Нам необходимо распаковать скаченный архив в любое удобное место на диске. В нашем случае это будет: c:PHP.

    Шаг второй. Теперь нам нужно добавить путь к корневому каталогу PHP в переменную PATH. Мы уже подробно рассматривали добавления значения переменной PATH на Windows 7, когда говорили про установку библиотеки SQLite на Windows, а про добавления значения переменной PATH на Windows 10 мы говорили тогда, когда рассматривали установку SASS на Windows. В связи с этим здесь мы этот вопрос рассматривать не будем.

    Шаг третий. На самом деле мы уже закончили установку PHP 5.6 на Windows 10. Но нам нужно убедиться в том, что установка была выполнена правильно и PHP, как и его встроенный сервер, работают. Для этого нам нужно открыть командную строку от имени администратора и написать несколько команд: cd c:php и php -S localhost:8000. Первая позволит нам перейти в папку, в которую мы установили PHP, вторая запускает веб-сервер встроенный в PHP. Дело всё в том, что веб-сервер, который встроен в PHP, будет считать корневым каталогом тот каталог, из которого вы его запустили.

    Шаг четвертый. После запуска сервера, встроенного в PHP вы увидите следующее сообщение в командой строке:

    PHP 5.6.24 Development Server started at Mon Aug 08 20:33:06 2016

    Listening on http://localhost:8000

    Document root is C:WINDOWSsystem32

    Press CtrlC to quit.

    Это значит, что всё работает правильно. Обратите внимание: HTTP сервер, встроенный в PHP, использует для соединения порт 8000, в то время как сервер Apache использует порт TCP порт 80 или 8080.

    Шаг пятый. Откройте браузер и в адресной строке напишите: http://localhost:8000/. Вы должны увидеть сообщение: Not Found или не удается получить доступ к сайту. Это HTTP сообщение с кодом ошибки клиента. Дело всё в том, что нам необходимо помимо каталога указывать скрипт, который мы хотим запустить.

    Шаг шестой. Создадим два файла. Первый назовем index.php, в котором напишем ровно одну строчку кода: <?php phpinfo ();?> и сохраним его в каталог с нашим PHP. Второй назовем sample.php и в нем будет также одна строчка кода: <h1><?php echo «Hellow,world!»?></h1>. Естественно, для создания этих файлов нам нужен удобный и многофункциональный редактор, мы рекомендуем вам присмотреться к интегрированной среде разработки на PHP NetBeans, хотя вы можете попробовать HTML редактор Notepad++, Sublime Text 3 или бесплатный редактор CSS кода Brackets. Каждый из них хорош по-своему.

    Шаг седьмой. Напишите в адресной строке браузера: http://localhost:8000/index.php. Вы увидите, что наш скрипт запустился и получите детальную информации о конфигурации PHP и встроенного веб-сервера, примерно как на рисунке ниже.

    Первая проверка работы PHP и встроенного веб-сервера в Windows

    Первая проверка работы PHP и встроенного веб-сервера в Windows

    Шаг восьмой. Напишите в адресной строке браузера: http://localhost:8000/sample.php. Вы увидите, что и этот скрипт запустился. Пример его работы на рисунке ниже.

    Тест установленного PHP 5.6 и встроенного сервера

    Тест установленного PHP 5.6 и встроенного сервера

    Обратим ваше внимание на то, что установка PHP 5.6 на Windows без Apache и с использованием встроенного сервера – не самый правильный подход, поэтому не рекомендуем вам использовать данный способ работы с PHP. Как минимум он не безопасен, а также вы получаете значительные потери в производительности ваших скриптов.

    Считайте данную инструкцию лишь ознакомительной информацией о том, как установить PHP на Windows без Apache. Инструкцию по правильные установки PHP на Windows вы найдете на этом сайте в скором времени.

    Не забывайте делиться своим мнением в комментариях и оставлять отзывы, это поможет сделать нашу работу лучше, с уважением ZametkiNaPolyah.ru!

    Содержание

    1. Php thread safe или non thread safe для windows
    2. What are the technical differences between the Thread Safe and Non Thread safe PHP Windows Installation Packages?
    3. 2 Answers 2
    4. VC6 vs VC9
    5. Thread Safe vs Non Thread Safe
    6. What is thread safe or non-thread safe in PHP?
    7. 4 Answers 4
    8. Needed background on concurrency approaches:
    9. Needed background on how PHP «integrates» with web servers:
    10. Now, onto your question!
    11. Final notes
    12. PHP: Hypertext Preprocessor
    13. PHP For Windows
    14. PECL For Windows
    15. Which version do I choose?
    16. Apache
    17. VC15 & VS16
    18. TS and NTS
    19. What is PGO?
    20. amd64 (x86_64) Builds
    21. Long and multibyte path
    22. Archives
    23. Каковы технические отличия между безопасными и безопасными потоковыми пакетами для Windows XP?
    24. VC6 vs VC9
    25. Thread Safe vs Non Thread Safe

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

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

    Кроме того, если 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

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

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

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

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

    Источник

    What are the technical differences between the Thread Safe and Non Thread safe PHP Windows Installation Packages?

    I’m currently about to install PHP for an Apache/Windows-based development environment, but it seems I’m about to fall at the first hurdle: Choosing the right package to install.

    What’s the difference between these versions in a practical sense?

    If this wasn’t complicated enough, version 5.3 of PHP is only available in VC9 (with 5.2 coming with the VC6 packages). And yet, according to the PHP site, you should not use VC9 with Apache. So why does Apache get the older version?

    It’s all very confusing and I’d like some help understanding the choices.

    2 Answers 2

    After a lot of research, I’ve managed to find my own answers to this question.

    In its most basic form, the answer is: What version of PHP you should install comes down what webserver you are running.

    Here’s a deeper explanation of the terms used in picking a version of PHP based on what I learned:

    VC6 vs VC9

    Firstly, different versions of Apache for Windows are compiled with different compilers. For example, the versions on Apache.org are designed to be compiled using Microsoft Visual C++ 6, also known as VC6. This compiler is very popular, but also very old. (It dates back to 1998.)

    There are different versions of Apache made for different compilers. For example, the versions available for download from ApacheLounge.com are designed to be compiled with the popular and more much recent compiler, Microsoft Visual C++ 9 from 2008. Also known as VC9.

    (Note: These two compilers are the two most popular options. So while it’s possible to have a VC7, VC8, etc. compiled version of Apache, it’s unlikely that you’ll come across them.)

    The use of this more recent compiler (VC9) is important because the latest versions of PHP are only being distributed in VC9 form (although older versions are still available for VC6).

    On top of that, according to ApacheLounge there are numerous improvements when using a version of Apache compiled with VC9, «in areas like Performance, MemoryManagement and Stability».

    If that wasn’t enough, the developers of PHP made the following statement on their site:

    Windows users: please mind that we do no longer provide builds created with Visual Studio C++ 6 (VC6). It is impossible to maintain a high quality and safe build of PHP for Windows using this unmaintained compiler.

    We recommend the VC9 Apache builds as provided by ApacheLounge.

    All PHP users should note that the PHP 5.2 series is NOT supported anymore. All users are strongly encouraged to upgrade to PHP 5.3.6.

    In all, this is an extremely compelling argument to use VC9 versions of Apache and PHP, if you ask me.

    So if you’re using a version of Apache from the official Apache site, it will be compiled with VC6, and as such, you should use the older version of PHP for that compiler. If you’re using a version of Apache compiled with VC9, like the one available on ApacheLounge.com, you can use the latest version of PHP (for VC9).

    For me, running a local development environment, it would be preferable to have the latest version of PHP, so a VC9 version of Apache is required, so I can use the VC9 version of PHP.

    Thread Safe vs Non Thread Safe

    Once again this comes down to your webserver. By default Apache is installed on Windows as Module, but it can be changed to run as FastCGI. There’s plenty of differences between the two, but essentially FastCGI is more modern, faster, more robust, and more resource hungry. For someone running a local development environment, FastCGI might be overkill, but apparently lots of hosting companies run as FastCGI for the reasons I’ve stated, so there are good arguments for doing so in a development environment.

    If you’re running Apache (or IIS) as FastCGI (or CGI) then you want the Non Thread Safe version of PHP. If you’re running Apache as default (as a Module), then you’ll want the more traditional Thread Safe version.

    Please note: This all only applies to Windows users.

    I’m not going to bother with FastCGI (unless someone convinces me otherwise), so for me, I want the VC9 Thread Safe version of PHP.

    Источник

    What is thread safe or non-thread safe in PHP?

    I saw different binaries for PHP, like non-thread or thread safe?

    What does this mean?

    What is the difference between these packages?

    hujFk

    4 Answers 4

    Needed background on concurrency approaches:

    There are also other completely different concurrency models (using Asynchronous sockets and I/O), as well as ones that mix two or even three models together. For the purpose of answering this question, we are only concerned with the two models above, and taking Apache HTTP server as an example.

    Needed background on how PHP «integrates» with web servers:

    There are other methods for chaining PHP with Apache and other web servers, but mod_php is the most popular one and will also serve for answering your question.

    You may not have needed to understand these details before, because hosting companies and GNU/Linux distros come with everything prepared for us.

    Now, onto your question!

    At this point, you should be thinking «OK, so if I’m using a multi-threaded web server and I’m going to embed PHP right into it, then I must use the thread-safe version of PHP». And this would be correct thinking. However, as it happens, PHP’s thread-safety is highly disputed. It’s a use-if-you-really-really-know-what-you-are-doing ground.

    Final notes

    In case you are wondering, my personal advice would be to not use PHP in a multi-threaded environment if you have the choice!

    Источник

    PHP: Hypertext Preprocessor

    PHP For Windows

    This site is dedicated to supporting PHP on Microsoft Windows. It also supports ports of PHP extensions or features as well as providing special builds for the various Windows architectures.

    If you like to build your own PHP binaries, instructions can be found on the Wiki.

    PECL For Windows

    PECL extensions for Windows is being worked on. Windows DLL can be downloaded right from the PECL website.

    The PECL extension release and snapshot build directories are browsable directly.

    Which version do I choose?

    If you are using PHP as FastCGI with IIS you should use the Non-Thread Safe (NTS) versions of PHP.

    Apache

    Please use the Apache builds provided by Apache Lounge. They provide VC15 and VS16 builds of Apache for x86 and x64. We use their binaries to build the Apache SAPIs.

    With Apache, using the apache2handler SAPI, you have to use the Thread Safe (TS) versions of PHP.

    VC15 & VS16

    More recent versions of PHP are built with VC15 or VS16 (Visual Studio 2017 or 2019 compiler respectively) and include improvements in performance and stability.

    — The VC15 and VS16 builds require to have the Visual C++ Redistributable for Visual Studio 2015-2019 x64 or x86 installed

    TS and NTS

    TS refers to multithread capable builds. NTS refers to single thread only builds. Use case for TS binaries involves interaction with a multithreaded SAPI and PHP loaded as a module into a web server. For NTS binaries the widespread use case is interaction with a web server through the FastCGI protocol, utilizing no multithreading (but also for example CLI).

    What is PGO?

    Profile Guided Optimization is an optimization feature available in Microsoft’s Visual C++ compiler that allows you to optimize an output file based on profiling data collected during test runs of the application or module.

    Links:

    amd64 (x86_64) Builds

    PHP 7 provides full 64-bit support. The x64 builds of PHP 7 support native 64-bit integers, LFS, 64-bit memory_limit and much more.

    x64 builds are recommended (almost all Windows installations support x64).

    Long and multibyte path

    PHP 7.1+ supports long and UTF-8 paths. See the manual for details.

    Archives

    Past releases are available from our archives, older versions not found there can be found at the Museum.

    Источник

    Каковы технические отличия между безопасными и безопасными потоковыми пакетами для Windows XP?

    В настоящее время я собираюсь установить PHP для среды разработки на базе Apache / Windows, но, похоже, я собираюсь упасть на первое препятствие: выбор правильного пакета для установки.

    PHP доступен не менее чем из четырех вариантов :

    В чем разница между этими версиями в практическом смысле?

    Если это не было достаточно сложно, версия 5.3 PHP доступна только в VC9 (с 5.2 поставляется с пакетами VC6). И все же, согласно сайту PHP, вы не должны использовать VC9 с Apache … Итак, почему Apache получает более старую версию?

    Это все очень запутанно, и я хотел бы, чтобы какая-то помощь поняла выбор.

    После многих исследований мне удалось найти собственные ответы на этот вопрос.

    В самой базовой форме ответ: какая версия PHP, которую вы должны установить, – это то, что вы используете на веб-сервере.

    Вот более подробное объяснение терминов, используемых при выборе версии PHP на основе того, что я узнал:

    VC6 vs VC9

    (Примечание. Эти два компилятора являются двумя наиболее популярными опциями. Поэтому, хотя возможно иметь скомпилированную версию Apache VC7, VC8 и т. Д., Маловероятно, что вы столкнетесь с ними.)

    Использование этого более позднего компилятора (VC9) важно, потому что последние версии PHP распространяются только в форме VC9 (хотя старые версии все еще доступны для VC6).

    Кроме того, согласно ApacheLounge, существует множество улучшений при использовании версии Apache, скомпилированной с VC9, «в таких областях, как Performance, MemoryManagement и Stability».

    Если этого было недостаточно, разработчики PHP сделали следующее заявление на своем сайте:

    Пользователи Windows: учтите, что мы больше не предоставляем сборки, созданные с помощью Visual Studio C ++ 6 (VC6). Невозможно поддерживать высококачественную и безопасную сборку PHP для Windows с использованием этого неподдерживаемого компилятора.

    Все пользователи PHP должны заметить, что серия PHP 5.2 больше не поддерживается. Всех пользователей настоятельно рекомендуется обновить до PHP 5.3.6.

    В целом, это чрезвычайно веский аргумент в пользу использования версий Apache и PHP VC9, если вы спросите меня.

    Для меня, запуская локальную среду разработки, было бы желательно иметь последнюю версию PHP, поэтому требуется версия Apache VC9, поэтому я могу использовать версию PHP VC9.

    Thread Safe vs Non Thread Safe

    Обратите внимание: все это относится только к пользователям Windows.

    Дальнейшее чтение:

    Лично я использую виртуализированный сервер LAMP. Каждый хостинг, который я использую, зависит от некоторых особенностей Linux, и между WAMP и LAMP существует слишком много различий. Затем я просто использую сервер LAMP по умолчанию для этой версии Linux.

    Моя фактическая настройка прямо сейчас – с VMWare (Fusion on Mac, Player в Windows). У меня есть 3 виртуальных машины – один для PHP5.3 с Ubuntu 10.04 LTS, а другой для PHP 5.1 на Ubuntu 8.04 LTS. (Один из хостов, которые я использую, находится на RedHat, который в настоящее время поддерживает только PHP 5.1). У меня есть третья виртуальная машина для RubyOnRails dev.

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

    Источник

    Понравилась статья? Поделить с друзьями:
  • Php startup unable to load dynamic library mysqli windows
  • Photo director для windows скачать бесплатно
  • Php mb convert encoding windows 1251 utf 8
  • Photo director для windows как пользоваться
  • Php manager for iis windows server 2012 r2