如何在线程安全和非线程安全PHP之间做出选择?

p8h8hvxi  于 2022-12-28  发布在  PHP
关注(0)|答案(1)|浏览(119)

我正在Windows 10中开发Laravel 9.x应用。我当前的PHP版本是PHP 8.1.5 (cli) (built: Apr 12 2022 17:38:57) (ZTS Visual C++ 2019 x64)。这是线程安全版本还是非线程安全版本?我如何判断?什么时候我应该更喜欢线程安全版本而不是非线程安全版本?
我曾尝试在StackOverflow上研究这个问题,但我看到的问题/答案似乎都是十年前或更久以前的--就像这样--我强烈怀疑,如果我今天仅仅因为技术在这几年里发生了变化而问这个问题,我可能会得到不同的答案。这是一个合理的假设吗?(至少,我目前的PHP版本显然使用了一个更新的编译器VC++ 2019,而不是VC6或VC 9。
我还不知道我的生产环境会是什么,甚至我正在开发的应用程序是否会进入生产环境,因为它只是一个我正在编写的应用程序,以(重新)学习Laravel。我可能会把它作为一个工作的Laravel应用程序的演示,但它是否会在托管服务或Netlify或其他地方,我只是不知道在这一点上。
只是给予你们一些背景,这个问题出现只是因为我试图学习如何逐步通过我的Laravel源代码来调试问题,这显然需要我添加XDebug到XAMPP。我找到的安装XDebug的说明指向here,并建议我下载我的PHP版本的Windows二进制文件。没有8.1.5的二进制文件,所以我不“我不知道8.1的二进制文件是否可以工作,或者使用8.1线程安全还是8.1非线程安全会更好。如果先将PHP升级到8.2会更好,我仍然不知道线程安全还是非线程安全是一个更好的选择。
有人能给我指点一下这些问题吗?

rkue9o1l

rkue9o1l1#

  • 这是线程安全版本还是非线程安全版本?我如何分辨?*

您可以使用良好的旧phpinfo()函数并查找Thread Safety列。
如果您在PATH环境中安装了PHP,甚至可以通过CLI使用快速命令php -i | grep Thread来获得它

  • 什么时候我应该更喜欢线程安全的版本而不是非线程安全的版本?*

按照PHP official documentation
如果你选择把PHP作为CGI二进制文件运行,那么你就不需要线程安全,因为二进制文件在每次请求时都会被调用。对于多线程Web服务器,比如IIS5和IIS6,你应该使用线程版本的PHP。

  • 我还不知道我的生产环境会是什么样子... *

一般来说,TS或NTS代码执行没有区别,更多的是面向Web服务器。
如果我没记错的话,默认情况下,XAMPP使用Apache Handler,所以它很可能是线程安全的构建。是的,PHP8.1的Xdebug二进制文件可以正常工作。
从技术上讲,NTS应该稍微快一些,因为它不需要满足线程安全性的要求。
就我个人而言,我认为这并不重要,除非你想花更多的时间来修补网络服务器切换到FastCGI或PHP-FPM,因为你仍然处于开发阶段,我认为坚持默认设置,并集中精力让它更有效。

相关问题