Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP Thread Safe and Non-Thread Safe for Windows

I am downloading PHP for Windows. I got 2 options on the website.

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

Please answer the following questions:

  1. What is the difference between the two? What are the advantages and disadvantages over one another?
  2. I am developing an e-commerce website which will have heavy traffic, which one is more recommended and why?
like image 769
sumit Avatar asked Aug 26 '11 12:08

sumit


People also ask

What is non thread-safe PHP on Windows?

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.

What is thread-safe and not thread-safe?

Conditionally safe: Different threads can access different objects simultaneously, and access to shared data is protected from race conditions. Not thread safe: Data structures should not be accessed simultaneously by different threads.

What is the difference between NTS and TS?

The difference of NTS and TS is in the name itself. TS = Thread Safe. NTS = Non Thread Safe. Though the non checking of thread safty the NTS version is a very little faster.

What is PHP NTS?

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).


2 Answers

From PHP documentation:

Thread Safety means that binary can work in a multithreaded webserver context, such as Apache 2 on Windows. Thread Safety works by creating a local storage copy in each thread, so that the data won't collide with another thread.

So what do I choose? If you choose to run PHP as a CGI binary, then you won't need thread safety, because the binary is invoked at each request. For multithreaded webservers, such as IIS5 and IIS6, you should use the threaded version of PHP.

So it really depends on the way that you want to use PHP:

  • Apache + LoadModule: Thread Safe
  • Apache + FastCGI: Non-Thread Safe
  • IIS: Thread Safe
  • IIS + FastCGI: Non-Thread Safe

PHP manual has nice installation instructions.

AFAIR running PHP with FastCGI is the preferable way, it performs faster and allows for more fine-grained security configuration.

like image 173
piotrp Avatar answered Sep 19 '22 00:09

piotrp


Quick and simple: If you are using Apache edit your Apache24\conf\httpd.conf file and search for "loadmodule". If you see your loadmodule is referencing a .dll something like:

LoadModule php7_module "e:/x64Stack/PHP/php7.1.9/php7apache2_4.dll"
AddHandler application/x-httpd-php .php
PHPIniDir "e:/x64Stack/PHP/php7.1.9"

Then you want Thread Safety enabled or TS - Thread Safe version.

Else if you are using IIS or Apache with CGI then NTS flavor.

I use multiple stacks and within those multiple servers and versions of PHP so don't let the paths / php or server versions throw you.

like image 30
Jim Avatar answered Sep 20 '22 00:09

Jim