我正在 Windows 10 中开发 Laravel 9.x 应用程序。我当前的 PHP 版本是 PHP 8.1.5 (cli) (build: Apr 12 2022 17:38:57) (ZTS Visual C++ 2019 x64)
。这是线程安全版本还是非线程安全版本?我怎么知道?我什么时候应该选择线程安全版本而不是非线程安全版本?
我尝试在 StackOverflow 上研究这个问题,但我看到的问题/答案似乎都有十年或更久了 - 就像这样 - 我强烈怀疑如果我今天问这个问题,我可能会得到不同的答案仅仅是因为技术在这几年里发生了变化。这是一个合理的假设吗? (至少,我当前版本的 PHP 显然使用了更新的编译器 VC++ 2019,而不是 VC6 或 VC9。)
我还不知道我的生产环境会是什么样,甚至不知道我正在开发的应用程序是否会进入生产环境,因为它只是我正在编写的一个用于(重新)学习 Laravel 的应用程序。到时候我可能会把它投入生产,作为 Laravel 应用程序的演示,但它是否会在托管服务、Netlify 或其他东西上,我现在还不知道。
只是为了给您一些背景信息,这个问题只是因为我试图学习如何单步执行 Laravel 源代码来调试问题而出现,这显然需要我将 XDebug 添加到 XAMPP。我找到的安装 XDebug 的说明将我指向此处,并建议我下载适用于我的 PHP 版本的 Windows 二进制文件。没有 8.1.5 的二进制文件,所以我不知道 8.1 的二进制文件之一是否可以工作,或者我是否最好使用 8.1 线程安全或 8.1 非线程安全。如果我的PHP先升级到8.2会更好,我仍然不知道线程安全还是非线程安全是更好的选择。
有人可以告诉我这些问题吗?
这是线程安全版本还是非线程安全版本?我怎么知道?
您可以使用旧的
phpinfo()
函数并查找Thread Safety
列。如果您在 PATH 环境中设置了 PHP,您甚至可以使用快速命令通过 CLI 获取它
php -i | grep 线程
什么时候我应该选择线程安全版本而不是非线程安全版本?
根据PHP官方文档
我还不知道我的生产环境会是什么样......
一般来说,TS 或 NTS 代码执行没有区别。它更多地面向网络服务器。
如果我没记错的话,默认情况下,XAMPP 使用 Apache Handler,因此它可能是线程安全的构建。是的,PHP8.1 的 Xdebug 二进制文件可以正常工作。
从技术上讲,NTS 应该稍微快一些,因为它不需要考虑线程安全。
就我个人而言,我认为这并不重要,除非您想花更多的时间来修改网络服务器,切换到 FastCGI 或 PHP-FPM,因为您仍处于开发阶段,我认为坚持默认设置并专注于完成它会更有效率。