php线程安全和非线程安全
Ⅰ php5 non-thread-safe和thread-safe的区别
PHP5 non-thread-safe和thread-safe的区别
从PHP5.2.10版本开始(现在有PHP5.2.10和5.3两个版本),有None-Thread Safe与Thread Safe两种版本的可供选择,这两种版本有何不同,作为使用者来说又应该如何选择呢?
先从字面意思上理解,None-Thread Safe就是非线程安全,在执行时不进行线程(thread)安全检查;
Ⅱ php如何保证线程安全
线程安全本身在php
的运行原理上就做到了,每个请求重新分配的内存空间,所谓php
的现线程安全,指的是
php扩展,
随着扩展模块的启动,分配的内存可以提供给多个请求调用.
php线程安全通过全局的global_id
,为每个全局变量做了唯一ID的区分.
Ⅲ php的几个版本的区别
PHP5.2 以前:autoload, PDO 和 Mysqli, 类型约束
PHP5.2:JSON 支持
PHP5.3:弃用的功能,匿名函数,新增魔术方法,命名空间,后期静态绑定,Heredoc 和 Nowdoc, const, 三元运算符,Phar
PHP5.4:Short Open Tag, 数组简写形式,Traits, 内置 Web 服务器,细节修改
PHP5.5:yield, list() 用于 foreach, 细节修改
PHP5.6: 常量增强,可变函数参数,命名空间增强
Ⅳ 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).
Ⅳ PHP线程安全与非线程安全的区别:如何选择用哪一个
首先,Linux下的PHP,没有线程安全版和非线程安全版之分。从2000年10月20日发布的第一个Windows版的PHP3.0.17开始的都是线程安全的版本,直至5.2.1版本开始有Thread Safe(TS,线程安全)和None Thread Safe(NTS,非线程安全)之分。
因为,Linux/Unix系统采用的是多进程的工作方式,而Windows系统采用多线程的工作方式。即:Linux系统的任务调度基本单位是进程,Windows系统的任务调度基本单位是线程(本观点来自自学与总结,不能保证百分之百正确)。
所以,在Windows系统的IIS下以CGI方式运行PHP会非常慢,这是由于CGI模式是建立在多进程的基础之上的,而非多线程,且CGI模式对于每个HTTP请求都需要重新加载和卸载整个PHP环境,其消耗是巨大的。
于是,一般我们会把PHP配置成以ISAPI的方式来运行,ISAPI是多线程的方式,这样就快多了。但存在一个问题,很多常用的PHP扩展是以 Linux/Unix的多进程思想来开发的,这些扩展在ISAPI的方式运行时就会出错搞垮IIS。
为了兼顾IIS下PHP的效率和安全,微软给出了FastCGI的解决方案。FastCGI可以让PHP的进程重复利用,而不是每一个新的请求就重开一个进程。同时FastCGI也可以允许几个进程同时执行。这样既解决了CGI进程模式消耗太大的问题,又利用上了CGI进程模式不存在线程安全问题的优势。
因此,如果是使用ISAPI的方式来运行PHP就必须用Thread Safe(TS,线程安全)的版本;而用FastCGI模式运行PHP的话就没有必要用线程安全检查了,用None Thread Safe(NTS,非线程安全)的版本能够更好的提高效率。
名词解析:
IIS:Internet Information Services (互联网信息服务),是由微软公司提供的基于运行Microsoft Windows的互联网基本服务
CGI:Common Gateway Interface (通用网关接口),是外部应用程序(CGI程序)与Web服务器之间的接口标准
ISAPI:Internet Server Application Programming Interface (互联网应用程序接口),是为Microsoft所提的Internet server的API
FastCGI:CGI存在收到每个请求时都开辟一个进程等不足,FastCGI可以理解为是征对CGI的改进版
Ⅵ PHP版本VC6和VC9,Non Thread Safe和Thread Safe的区别
VC6
版本是使用
Visual
Studio
6
编译器编译的,如果你是在windows下使用Apache+PHP的,请选择VC6版本。
VC9
版本是使用
Visual
Studio
2008
编译器编译的,如果你是在windows下使用IIS+PHP的,请选择VC9版本。
Non
Thread
Safe就是非线程安全,在执行时不进行线程(Thread)安全检查;
Non
Thread
Safe
是线程安全,执行时会进行线程(Thread)安全检查,以防止有新要求就启动新线程的
CGI
执行方式而耗尽系统资源;
Windows下的PHP
主要有两种执行方式:ISAPI
和
FastCGI。
ISAPI
执行方式是以
DLL
动态库的形式使用,可以在被用户请求后执行,在处理完一个用户请求后不会马上消失,所以需要进行线程安全检查,这样来提高程序的执行效率,所以如果是以
ISAPI
来执行
PHP,建议选择
Thread
Safe
版本;
FastCGI
执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以
FastCGI
来执行
PHP,建议选择
Non
Thread
Safe
版本。
官方并不建议你将Non
Thread
Safe
应用于生产环境。
Ⅶ php5 NTS和TS版本的区别,所谓的线程安全和非安全
先从字面意思上理解:
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 是线程安全还是非线程安全的
判断PHP 是线程安全还是非线程安全:
1.通过phpinfo(); 查看其中的 Thread Safety 项,这个项目就是查看是否是线程安全,如果是:enabled,一般来说应该是ts版,否则是nts版。
2.命令行:php -i|grep -i thread
结果:Thread Safety => disabled 【disabled表示非线程安全】
如果没有grep命令(windows),那就一个个找吧。
Ⅸ Windows 7 下如何配置PHP网站运行环境
本文适合PHP网站技术开发人员,对普通Windows7用户意义不大,敬请大家注意。一、Apache安装
版本解释:openssl是表示带有openssl模块,利用openssl就可以给Apache配置SSL安全链接的,也就是使用https://方式进行访问。
nossl则表示不带OpenSSL模块,无法用于SSL安全链接,在这里我们下载带OpenSSL的。
选择版本:apache_2.2.14-win32-x86-openssl-0.9.8k.msi (此处以32位为例)
下载地址:http://www.apache.org/dist/httpd/binaries/win32/
首先我们在D盘(盘符根据实际情况自己选择)新建一个目录, 并且命名为“WAMP”其意义为“Wdindows Apache Mysql PhpMyAdmin” 之后安装的一些内容,也都将安装在该目录下。
1.安装说明:
运行apache安装程序,方法非常简单,弹安装界面后一直“next”
接着会出现一个界面,需要填写3个内容,分别为:Network Domain、Server Name、Administrator’s Email Address 随便填写就好,不影响内容。
在下面还有2个选项,默认选择为80端口,第二个为8080端口,根据个人需求选择,一般为默认80端口。
我们继续安装,选择Custom(自定义安装)-“next”
其中有打着红X的组件,我们单击这个组件容,选择“This feature, and all subfeatures, will be
installed on local hard drive.”,即“此部分,及下属子部分内容,全部安装在本地硬盘上”。-“next”
然后选择右下角的“change ”改变安装路径,安装到刚才建立的目录中“D:WAMPApache”-“next”
安装完毕后,电脑右下角会多出一个图标,双击打开,选择start或restart,能正常运行,至此安装完毕。
2.修改配置:
打开安装录下D:WAMPApacheconfhttpd.conf 文件(修改配置文件时,不建议使用记事本,可能会对其造成影响,推荐使用Notepad++或其他编辑软件打开修改)
打开以后Ctrl+F查找所要修改的内容
在#LoadMole vhost_alias_mole moles/mod_vhost_alias.so下添加:
LoadMole php5_mole “D:/WAMP/PHP/php5apache2_2.dll”
PHPIniDir “D:/WAMP/PHP”
AddType application/x-httpd-php .php
AddType application/x-httpd-php .htm
AddType application/x-httpd-php .html
DocumentRoot “E:/WAMP/Apache/htdocs”
修改成(这里的路径和IIS中wwwroot目录一样,用于存放网页,自定义或不做修改默认):DocumentRoot “D:/WAMP/www”
修改成(自定义或不做修改默认):
DirectoryIndex index.html
修改成:DirectoryIndex index.php default.php index.html index.htm default.html default.htm
3.测试
在D:/WAMP/www目录下 建立个index.html页面
在浏览器中输入 http://localhost/
如果能正常显示,Apache配置完毕,已经正常运行。
二、MySql安装
版本解释:The Essentials Package:不包含 embedded server and benchmark suite,有自动安装程序和配置向导,没有MySQL Documentation。
The Complete Package:包含 embedded server and benchmark suite,有自动安装程序和配置向导,有MySQL Documentation。
The Noinstall Archive:包含 embedded server and benchmark suite,没有自动安装程序和配置向导,有MySQL Documentation。
选择版本:mysql-essential-5.1.44-win32.msi
下载地址:http://www.mysql.com/downloads/mysql/
1.安装说明:
打开安装程序,单击“next”
选择custom,组件为默认选择,我们不做改动-“next”
路径设置为“D:WAMPMysql”-“next”
安装好以后点击“finish”
跟着会出现一个配置向导-“next”
选择“Detailed Configuration(详细配置)”-“next”
这里有3个选项:
Developer Machine,将只用尽量少的内存;
Server Machine,将使用中等数量内存;
Dedicated MySQL Server Machine,这台服务器上面只跑mysql数据库,将占用全部的内存。
可以根据自己需求选择,这里我们选择第二种“Server Machine”-“next”
选择数据库用途,同样有3个选项:
Mutltifunctional Database多功能用途,将把数据库优化成很好的innodb存储类型和高效率的myisam存储类型;
Transactional Database Only只用于事务处理类型,最好的优化innodb,但同时也支持myisam;
Non-Transactional Databse Only非事务处理类型,适合于简单的应用,只有不支持事务的myisam类型是被支持的。
一般选择第一种多功能的,同样我们也是。-“next”
选择InnodDB的数据存放位置,一般默认就行,为了统一我填写了“WAMP/MySQL Datafiles”-“next”
选择mysql允许的最大连接数,第一种是最大20个连接并发数,第二种是最大500个并发连接数,最后一种是自定义,自己可以根据需求选择,我选择第二个-“next”
下面是选择数据库监听的端口,一般默认是3306,如果改成其他端口,以后连接数据库的时候都要记住修改的端口,否则不能连接mysql数据库,比较麻烦,这里不做修改,用mysq的默认端口:3306-“next”
这一步设置mysql的默认编码,我们选择第三个,并在Character Set菜单中,选择“gbk”编码-“next”
(注:如果要用原来数据库的数据,最好能确定原来数据库用的是什么编码,如果这里设置的编码和原来数据库数据的编码不一致,在使用的时候可能会出现乱码。)
这一步是是否要把mysql设置成windows的,一般选择设成服务,这样以后就可以通过服务中启动和关闭mysql数据库。下面的复选框也 勾选上,这样,在cmd模式下,不必非到mysql的bin目录下执行命令。也就是把上下2个勾都打上,中间默认-“next”
这一步是设置mysql的超级用户密码,这个超级用户非常重要,对mysql拥有全部的权限,请设置好并牢记超级用户的密码,下面有个复选框是选择是否允
许远程机器用root用户连接到你的mysql服务器上面,如果有这个需求,也请勾选。这里我们使用默认选择,在New root
password和Confirm中输入密码。“next”
点击“execute”进行配置,稍微等待一会,圆点上的勾全部打上,就代表配置完毕。
2.修改配置:
打开D:WAMPMySQLmy.ini
设置datadir为D:/WAMP/MySQL/data/或你所要存放数据位置的目录即可。
三、PHP安装
版本解释:VC9 专门为IIS定值的脚本,使用Visual Studio 2008编译器编译,支持最新的微软组建,从而提高效率。
VC6 是为了其他WEB服务软件提供的脚本 如 Apache。
Thread Safe 现成安全,之星时会进行线程 安全检查,以防止有心要求就启动新线程(Thread)的CGI执行方式而耗尽系统资源。
Non Thread Safe是非线程安全,在执行时不进行线程(Thread)安全检查
选择版本:PHP5.3(5.3.1)中VC6 x86 Thread Safe下 ZIP下载
下载地址:http://windows.php.net/download/
1.安装说明
由于我们下载的的是ZIP压缩包,只需要将文件解压到“D:WAMPPHP”目录下即可
2.修改配置
将E:WAMPPHPphp.ini-development 文件修改成php.ini
打开php.ini
; extension_dir = “ext”
修改成:extension_dir = “E:WAMPPHPext”
将947行下,这些文件前面的“;”去除
extension=php_curl.dll
extension=php_gd2.dll
extension=php_mbstring.dll
extension=php_mysql.dll
extension=php_mysqli.dll
extension=php_pdo_mysql.dll
extension=php_xmlrpc.dll
;date.timezone =
修改成(很多网站没提到这里要修改,默认为美国时间,如果不修改会报错):date.timezone = Asia/Shanghai
3.测试
重启Apache(修改过配置文件 必须重启Apache才会生效)
新建个index.php 页面,代码中输入,保存文件放到“D:WMAPwww”目录下
打开浏览器输入:http://localhost/index.php 如果能正常显示,说明PHP配置完毕,可以查看该页面的PHP信息是否正确。
(注:在改文件中输入函数可输出大量的有关PHP当前状态的信息,如PHP版本,服务器信息和环境等。)
(注:)
接着我们测试下,是否能连接到Mysql
再新建个link.php,下代码中输入
$link=mysql_connect(“127.0.0.1″,”root”,”Mysql安装时填写的密码”);
if(!$link) echo “Mysql数据库连接失败!”;
else echo “Mysql数据库连接成功!”;
mysql_close();
?>
也保存文件放到“D:WMAPwww”目录下
打开浏览器输入:http://localhost/link.php 查看
四、PhpMyAdmin安装
版本解释:phpMyAdmin-3.2.5
选择版本:phpMyAdmin-3.2.5-all-languages.zip
下载地址:http://www.phpmyadmin.net/home_page/downloads.php
1.安装说明
解压到D:WAMPphpMyAdmin
2.修改配置
打开D:WAMPphpMyAdminlibrariesconfig.default.php
$cfg['PmaAbsoluteUri'] = ”;
修改成(填写访问phpMyAdmin的绝对URL):$cfg['PmaAbsoluteUri'] = ‘http://localhost/PHPMyadmin/’;
$cfg['Servers'][$i]['host'] = ‘localhost’;
修改成(填写服务器地址,通常默认,不需要修改):$cfg['Servers'][$i]['host'] = ‘localhost’;
$cfg['Servers'][$i]['user'] = ‘root’;
修改成(填写Mysql用户名,这里我们默认):$cfg['Servers'][$i]['user'] = ‘root’;
$cfg['Servers'][$i]['password'] = ”;
修改成(填写Mysql密码):$cfg['Servers'][$i]['password'] = ‘Mysql PWD;
$cfg['Servers'][$i]['auth_type'] = ‘cookie’;
修改成(设置认证方法,安全因素考虑,填写成cookie):$cfg['Servers'][$i]['auth_type'] = ‘cookie’;
$cfg['blowfish_secret'] = ”;
修改成(设置短语密码,如果上面设置成cookie,那这里不能留空,不然登陆会提示错误):$cfg['blowfish_secret'] = ‘cookie’;
3.测试
打开浏览器输入:http://localhost/phpmyadmin/ 访问和登陆
五、结尾
至此Windows7下的PHP环境搭建完毕,大家尽情的使用吧。
Ⅹ PHP non-thread-safe和thread-safe这两个版本的区别
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)执行 PHP ,都建议下载执行 non-thread safe 的 PHP (PHP 的二进位档有两种包装方式:msi 、zip ,请下载 zip 套件)。
而线程安全检查正是为ISAPI方式的PHP准备的,因为有许多php模块都不是线程安全的,所以需要使用Thread Safe的PHP(搭配apache)。
如果你还搞不清楚,那么只需知道你是php+apache还是php+iis组合
non-thread-safe 非 线程安全与IIS搭配环境
thread-safe 线程安全 与apache搭配环境
另外php还有VC6 VC9版本区分
VC6和VC9一个支持apache一个支持IIS
VC9用在apache上也没问题,如果你用iis就必须用vc9的,如果你用apache vc6和vc9都可以用。