php线程安全 和 非线程安全 的区别 TS和NTS的区别
TS:Thread Safe 线程安全, 执行时会进行线程(Thread)安全检查
NTS:Non Thread Safe 非线程安全, 在执行时不进行线程(Thread)安全检查
我使用Apache+PHP的模式下,一般是把PHP作为一个Module load到apache中,那么以apache父进程-多子进程的工作模式,是需要进行线程安全检查的,所以如果是以这种方式执行php,选择ts版本
那么如果是使用fastcgi,比如说用php-fpm管理php执行,则不需要进行线程安全检查,则选择nts版本的php
PHP配置步骤
1.将C:\www\tools\php-5.6.29-nts-Win32-VC11-x64\php.ini-production 复制一份,并重命名为php.ini;
2.用记事本打开C:\www\tools\php-5.6.29-nts-Win32-VC11-x64\php.ini将; extension_dir = "ext"修改为 extension_dir = "ext" (去掉extension前面的分号)
3.将;extension=php_mbstring.dll 修改为 extension=php_mbstring.dll(去掉extension前面的分号,这是php多字节字符串扩展) 需要用到的ext都可以开起来
extension=php_bz2.dll extension=php_curl.dll ;extension=php_fileinfo.dll extension=php_gd2.dll ;extension=php_gettext.dll ;extension=php_gmp.dll ;extension=php_intl.dll ;extension=php_imap.dll ;extension=php_interbase.dll ;extension=php_ldap.dll extension=php_mbstring.dll ;extension=php_exif.dll ; Must be after mbstring as it depends on it extension=php_mysql.dll extension=php_mysqli.dll ;extension=php_oci8.dll ; Use with Oracle 10gR2 Instant Client ;extension=php_oci8_11g.dll ; Use with Oracle 11gR2 Instant Client ;extension=php_openssl.dll ;extension=php_pdo_firebird.dll extension=php_pdo_mysql.dll ;extension=php_pdo_oci.dll ;extension=php_pdo_odbc.dll ;extension=php_pdo_pgsql.dll extension=php_pdo_sqlite.dll ;extension=php_pgsql.dll ;extension=php_pspell.dll ;extension=php_shmop.dll ;extension=php_pdo_sqlsrv_55_ts.dll ; The MIBS data available in the PHP distribution must be installed. ; See http://www.php.net/manual/en/snmp.installation.php ;extension=php_snmp.dll ;extension=php_soap.dll ;extension=php_sockets.dll extension=php_sqlite3.dll ;extension=php_sybase_ct.dll ;extension=php_tidy.dll ;extension=php_xmlrpc.dll extension=php_xsl.dll
其他设置
4.时间 搜索“date.timezone”,找到:;date.timezone = 先去前面的分号再改为 date.timezone = PRC
测试
date_default_timezone_set('Asia/Shanghai');//'Asia/Shanghai' 亚洲/上海 date_default_timezone_set('Asia/Chongqing');//其中Asia/Chongqing'为“亚洲/重庆” date_default_timezone_set('PRC');//其中PRC为“中华人民共和国”
5.搜索“cgi.force_redirect” ;cgi.force_redirect = 1 先去前面的分号再改为 cgi.force_redirect = 0
; PHP页面的根路径, 只有非空时有效.
; 如果PHP没有使用FORCE_REDIRECT来编译, 如果你将php作为CGI运行在任何web服务器下(除了IIS)的话,你必须设置doc_root
; 针对安全问题查看文档. 一种替代方案是使用下面的cgi.force_redirect
doc_root =
; 在绝大多数web服务器下,cgi.force_redirect 对于提供安全执行PHP作为CGI来说是很有必要的.
; 没有配置的情况下,PHP会默认打开此项.
; 你可以在这里关闭此项并且自己承担风险
; **你可以在IIS安全的关闭此项,事实上,你必须关闭此项.**
; cgi.force_redirect = 1
; 如果 cgi.nph 被打开,就会强制CGI在每个请求时发送Status: 200.
; cgi.nph = 1
; 如果cgi.force_redirect被打开,并且你没有在Apache或者Netscape(iPlanet) web服务器下运行,
; 你也许需要设置一个环境变量名让PHP来查找让其可以获取后继续执行. 设置此变量可能引起安全问题, 在设置之前请先了解可能引起的后果.
6.设置上传文件大小
表单post提交最大内容4G
post_max_size = 4096M
设置最大上传文件大小
upload_max_filesize = 1024M
7.开启代码加速
1、打开php.ini文件
2、找到:[opcache],设置为:
[opcache] ; dll地址 zend_extension=php_opcache.dll ; 开关打开 opcache.enable=1 ; 开启CLI opcache.enable_cli=1 ; 可用内存, 酌情而定, 单位为:Mb opcache.memory_consumption=528 ; Zend Optimizer + 暂存池中字符串的占内存总量.(单位:MB) opcache.interned_strings_buffer=8 ; 对多缓存文件限制, 命中率不到 100% 的话, 可以试着提高这个值 opcache.max_accelerated_files=10000 ; Opcache 会在一定时间内去检查文件的修改时间, 这里设置检查的时间周期, 默认为 2, 定位为秒 opcache.revalidate_freq=1 ; 打开快速关闭, 打开这个在PHP Request Shutdown的时候回收内存的速度会提高 opcache.fast_shutdown=1
8.memcached的配置
Memcached是一个高并发的内存键值对缓存系统,它的主要作用是将数据库查询结果,内容,以及其它一些耗时的计算结果缓存到系统内存中,从而加速Web应用程序的响应速度。
Memcached最开始是作为Linux应用程序被安装在Linux服务器上来使用的,不过自从开源之后,它又被重新编译以适用于Windows环境。Jellycan和Northscale两个站点都提供了Windows的二进制可执行文件下载,下面是下载的地址:
http://code.jellycan.com/files/memcached-1.2.5-win32-bin.zip
http://code.jellycan.com/files/memcached-1.2.6-win32-bin.zip
http://downloads.northscale.com/memcached-win32-1.4.4-14.zip
http://downloads.northscale.com/memcached-win64-1.4.4-14.zip
http://downloads.northscale.com/memcached-1.4.5-x86.zip
http://downloads.northscale.com/memcached-1.4.5-amd64.zip
https://pecl.php.net/package/memcache/3.0.8/windows
5.6 Non Thread Safe (NTS) x86 5.6 Thread Safe (TS) x86 5.6 Non Thread Safe (NTS) x64 5.6 Thread Safe (TS) x64 |
5.5 Non Thread Safe (NTS) x86 5.5 Thread Safe (TS) x86 5.5 Non Thread Safe (NTS) x64 5.5 Thread Safe (TS) x64 |
5.4 Non Thread Safe (NTS) x86 5.4 Thread Safe (TS) x86 |
5.3 Non Thread Safe (NTS) x86 5.3 Thread Safe (TS) x86 |
php7+版本 dll下载 https://github.com/nono303/PHP7-memcache-dll
在1.4.5版本之前,memcached可以被安装成一个服务,但之后的版本中该功能被移除了。因此memcached的安装可以分为两类,第一类是1.4.5之前的版本,另一类是1.4.5之后的版本。
安装memcached < 1.4.5:
1. 将下载的文件解压到任意目录。
2. 1.4.5之前版本的memcached会被安装成一个服务,以administrator打开控制台,运行下面的命令:
c:\memcached\memcached.exe -d install注意将路径c:\memcached\memcached.exe替换成你本地的安装路径。
3. 然后使用下面的命令启动或停止memcached服务:
c:\memcached\memcached.exe -d start c:\memcached\memcached.exe -d stop4. 通过注册表键值来修改memcached的配置项。在运行中输入regedit.exe,然后导航到"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached"。修改其中的键值。例如你想增加memcached所使用的最大内存限制,可以修改ImagePath的值:
"c:\memcached\memcached.exe" -d runservice -m 512* 除了参数'-m 512'之外,你还可以使用其它的参数。通过“c:\memcached\memcached.exe -h”可以查看所有能使用的参数。
5. 如果要卸载memcached服务,可以使用下面的命令:
c:\memcached\memcached.exe -d uninstall安装memcached >= 1.4.5
1. 将下载的文件解压到任意目录。
2. 1.4.5之后版本的memcached不能作为Windows服务来运行,必须使用Windows计划任务来运行它。要将memcached配置成当Windows启动时自动运行,在命令行运行下面的命令:
schtasks /create /sc onstart /tn memcached /tr "'c:\memcached\memcached.exe' -m 512"* 注意将路径c:\memcached\memcached.exe替换成你本地的安装路径。
** 除了参数'-m 512'之外,你还可以使用其它的参数。通过“c:\memcached\memcached.exe -h”可以查看所有能使用的参数。
3. 通过下面的命令将memcached从Windows计划任务中移除:
schtasks /delete /tn memcached
修改php.ini文件 底部追加如下代码
[memcache] extension=php_memcache.dll ;一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表, ;它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。 ;是否在遇到错误时透明地向其他服务器进行故障转移。 memcache.allow_failover = 0 ;接受和发送数据时最多尝试多少个服务器,只在打开memcache.allow_failover时有效。 memcache.max_failover_attempts = 20 ;数据将按照此值设定的块大小进行转移。此值越小所需的额外网络传输越多。 ;如果发现无法解释的速度降低,可以尝试将此值增加到32768。 memcache.chunk_size = 8192 ;连接到memcached服务器时使用的默认TCP端口。 memcache.default_port = 11211 ;控制将key映射到server的策略。默认值"standard"表示使用先前版本的老hash策略。 ;设为"consistent"可以允许在连接池中添加/删除服务器时不必重新计算key与server之间的映射关系。 memcache.hash_strategy = "consistent" ;控制将key映射到server的散列函数。默认值"crc32"使用CRC32算法,而"fnv"则表示使用FNV-1a算法。 ;FNV-1a比CRC32速度稍低,但是散列效果更好。 memcache.hash_function = "crc32" ;以下2个设置见上上面的[session] ;当值为memcache时标记使用memcache作为session处理器 ;session.save_handler = "files" ;定义用于通话存储的各服务器链接的分隔符号,例如:“tcp://host1:11211, tcp://host2:11211” ;每服务器个链接可以包含被接受于该服务器的参数,比较类似使用 Memcache::addServer() 来添加的服务器 ;例如:“tcp://host1:11211?persistent=1&weight=1&timeout=1& amp;retry_interval=15” ;session.save_path = ""重启php
打开cmd 运行 C:\www\tools\php-5.6.29-nts-Win32-VC11-x64\php.exe 看看是否正常