apachephp线程安全
❶ Apache加载php模块后,可以正常启动,但php文件仍然不能被解析
PHP配置(php.ini和环境变量设置)没问题吗?vc6和vc9都有两个版本,一个是线程安全(Thread Safe)的,一个是线程不安全(Non Thread Safe)的,Apache
❷ php线程安全和不安全的区别
Windows下的PHP版本分两种:线程安全版本与非线程安全版本。
要论两者的区别,详细论说起来比较麻烦,从使用者的角度,记住什么时候用哪种版本的区别就可以了吧:
1、windows + IIS + FastCGI :使用非线程安全版本。
解释:
以FastCGI方式安装PHP时,PHP拥有独立的进程,并且FastCGI是单一线程的,不存在多个线程之间可能引发的相互干扰(这种干扰通常都是由于全局变量和静态变量导致的)。由于省去了线程安全的检查,因此使用FastCGI方式比ISAPI方式的效率更高一些。
2、windows + IIS + ISAPI :使用线程安全版本。
解释:
PHP以ISAPI方式安装时,PHP没有独立的进程,而是作为DLL被IIS加载运行的,即是依附于Web服务器进程的。当Web服务器运行在多线程模式下(IIS正是这种情况),PHP自然也就运行在多线程模式下。只要是在多线程模式下运行,就可能存在线程安全问题,因此应选择PHP的线程安全版本。
3、windows + Apache + PHP(模块) :使用线程安全版本。
解释:
如果你要在Apache中以模块方式安装PHP,则你应该使用PHP的线程安全的版本。原因是当PHP作为Apache的模块安装时,PHP没有独立的进程,而是作为模块以DLL的形式被加载到Apache中的,是随Apache的启动而启动的,而Windows下的Apache为多线程工作模式,因此PHP自然也就运行在多线程模式下。因此,这种情况下应使用PHP的线程安全版本。
4、windows + Apache + PHP(ISAPI) :使用线程安全版本。
解释:
由于以ISAPI方式来安装PHP时,PHP也没有独立的进程,也是作为模块被加载到Apache中的,因此,同样也需要使用PHP的线程安全版本。
一般不建议在Apache中以ISAPI方式来安装PHP,原因是到目前为止,Apache通过mod_isapi.so模块来实现的ISAPI功能并不完整,并未完整实现微软对ISAPI所制定的全部规范。
5、windows + Apache + PHP(FastCGI) :使用非线程安全版本。
解释:
如果你要在Apache中以FastCGI方式使用PHP,则同在IIS中使用FastCGI的PHP的情况一样,你应该使用PHP的非线程安全的版本。原因是在Apache中以FastCGI方式安装PHP时,PHP拥有独立的进程,并且FastCGI是单一线程的,故应使用PHP的非线程安全版本以提高性能
❸ php5 non-thread-safe和thread-safe这两个版本有何区别
从PHP5.2.10版本开始(现在有PHP5.2.10和5.3两个版本),有None-Thread Safe与Thread Safe两种版本的可供选择,这两种版本有何不同,作为使用者来说又应该如何选择呢?下面聚友将为您讲述。
先从字面意思上理解,None-Thread Safe就是非线程安全,在执行时不进行线程(thread)安全检查;Thread Safe就是线程安全,执行时会进行线程(thread)安全检查,以防止有新要求就启动新线程的 CGI 执行方式耗尽系统资源。
再来看PHP的两种执行方式:ISAPI和FastCGI。FastCGI执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以 FastCGI(无论搭配 IIS 6 或 IIS 7)执行 PHP ,都建议下载、执行 non-thread safe 的 PHP (PHP 的二进位档有两种包装方式:msi 、zip ,请下载 zip 套件)。而线程安全检查正是为ISAPI方式的PHP准备的,因为有许多php模块都不是线程安全的,所以需要使用Thread Safe的PHP。
❹ 为什么php装了nts版本的,phpinfo打开后Thread Safety还是enabled的怎么办快急哭了
php分为线程安全版和非线程安全版,对于Apache的用户应当选择线程安全版,而IIS用户选择非安全版, 这里还存在一个php与Apache的版本的匹配问题,可根据php 中 php5apache2_4.dll文件判断,此为php5.x和Apache2.4.
❺ 为什么apache2.4配置PHP7.1.31线程安全版,无法配置到mysqli模块,也无法配置mysql,也无法连接到mysql
mysql库早在php5.5已经弃用了,从7.0开始移除了这个扩展。
mysqli一直都可以用.
你的截图里面并没有包含mysqli扩展的信息,你需要在phpinfo里看一下mysqli扩展是否正常,如果无法连接,提供一下连接代码,以及报错信息
❻ Apache is running a threaded MPM,but your PHP Modle is not compiled to be t
PHP编译模式错了。如果在windows下,需在php.net上下载 PHP 5.2.13 zip package ,不要下debug pakage 或 Non-thread-safe zip package 。
若在linux下编译,需去掉--with-openssl 参数。
❼ 配置完PHP,apache服务器不能运行,如何解决
php的版本 和你的apach版本不一致。apache不支持。需要重新下载安装php.下载地址:http://windows.php.net/download/
下载注意选择类型,例如:
VC9 x86 Non Thread Safe (2011-Mar-22 13:26:53)
Zip [15MB]
sha1:
Installer [27.26MB]
sha1:
Debug Pack [7.84MB]
sha1:
VC9 x86 Thread Safe (2011-Mar-22 13:27:32)
Zip [15.13MB]
sha1:
Installer [27.38MB]
sha1:
Debug Pack [8.15MB]
sha1:
----------------------------------------------------------------------
第一类是线程不安全的
第二类才是线程安全的。
❽ Nginx下php装什么版本及PHP的线程安全与非线程安全版本的区别
Apache使用线程安全(TS)版本的PHP
IIS以及使用FastCGI方式的服务器使用非线程安全(NTS)版本的PHP
TS为多线程构建,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 mole 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).
❾ VC14 Apache2.4+PHP7.0 VC14 Non Thread Safe怎么配置
新版本的php只有VC9和VC11
老版本的apache只能搭配VC6的PHP
VC9你需要安装Visual C++ Redistributable for Visual Studio 2008 SP1 x86 or x64
VC11你需要安装Visual C++ Redistributable for Visual Studio 2012 x86 or x64
只是使用了不同版本的编译器
Non Thread Safe:使用fastcgi+iis的用这个
Thread Safe:apache+php的用这个
❿ PHP支持多线程吗
PHP语言本身是不支持多线程的。网上关于PHP模拟多线程的方法,都是利用了LINUX和APACHE等本身所具有的多线程能力。既然是模拟的,就不是真正的多线程,其实只是多进程。
1. 利用LINUX操作系统
<?php
for ($i=0;$i<10;$i++) {
echo $i;
sleep(5);
}
?>
上面存成test.php, 然后写一段SHELL代码
#!/bin/bash
for i in 1 2 3 4 5 6 7 8 9 10
do
php -q test.php &
done
2. 利用fork子进程(其实同样是利用LINUX操作系统)
<?php
declare(ticks=1);
$bWaitFlag = FALSE; /// 是否等待进程结束
$intNum = 10; /// 进程总数
$pids = array(); /// 进程PID数组
echo ("Startn");
for($i = 0; $i < $intNum; $i++) {
$pids[$i] = pcntl_fork();/// 产生子进程,而且从当前行之下开试运行代码,而且不继承父进程的数据信息
if(!$pids[$i]) {
// 子进程进程代码段_Start
$str="";
sleep(5+$i);
for ($j=0;$j<$i;$j++) {$str.="*";}
echo "$i -> " . time() . " $str n";
exit();
// 子进程进程代码段_End
}
}
if ($bWaitFlag)
{
for($i = 0; $i < $intNum; $i++) {
pcntl_waitpid($pids[$i], $status, WUNTRACED);
echo "wait $i -> " . time() . "n";
}
}
echo ("Endn");
?>
3. 利用WEB SERVER, PHP不支持多线程, APACHE可是支持的, 呵呵.
假设我们现在运行的是a.php这个文档. 但是我在程式中又请求WEB服务器运行另一个b.php
那么这两个文档将是同时执行的.
<?php
function runThread()
{
$fp = fsockopen('localhost', 80, $errno, $errmsg);
fputs($fp, "GET /a.php?act=brnrn");
fclose($fp);
}
function a()
{
$fp = fopen('result_a.log', 'w');
fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn");
fclose($fp);
}
function b()
{
$fp = fopen('result_b.log', 'w');
fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn");
fclose($fp);
}
if(!isset($_GET['act'])) $_GET['act'] = 'a';
if($_GET['act'] == 'a')
{
runThread();
a();
}
else if($_GET['act'] == 'b') b();
?>
也可以把需要多线程处理的部分交给java去处理,然后在PHP里调用。
<?php
system('java multiThread.java');
?>