PHP线程安全和非线程安全版本的区别
先从字面意思上理解,None-Thread Safe就是非线程安全,在执行时不进行线程(thread)安全检查;Thread Safe就是线程安全,执行时会进行线程(thread)安全检查,以防止有新要求就启动新线程的 CGI 执行方式耗尽系统资源。
再来看PHP的两种执行方式:ISAPI和FastCGI。FastCGI执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以 FastCGI(无论搭配 IIS 6 或 IIS 7)执行 PHP ,都建议下载、执行 non-thread safe 的 PHP (PHP 的二?位?n有?煞N包?方式:msi 、zip ,?下? zip 套件)。而线程安全检查正是为ISAPI方式的PHP准备的,因为有许多php模块都不是线程安全的,所以需要使用Thread Safe的PHP。
说到这里,大家应该知道应该如何选择哪个版本的PHP了。None-Thread Safe or Thread Safe,您会选择哪个?
最后总结
1.Non Thread Safe(非线程安全)版本php适用在使用CGI以及fastCGI的web服务器上,如nginx,lighttpd以及IIS的CGI模式下
2.Thread Safe(线程安全)版本php适用在使用ISAPI或者module的web服务器上,如IIS的ISAPI模式或者apache module模式
在写一个简单的程序时碰到Parse error: syntax error, unexpected T_ENDWHILE in www.111cn.net .php文件了,下面我给大家分析一下原因与解决方法。问题现象:
1、同样的代码,在某些机器上运行正常,但在特定机器上运行报错。
2、同一站点部分页面显示正常(例如<?php phpinfo();?>),但打开部分页面时,phpxx_errors.log或者页面显示错误提示“Parse error: syntax error, unexpected T_ENDWHILE in xx.php on line xx”。
错误原因:
该错误有可能是因为编写PHP脚本时丢失一个花括号(“}”),但更常见的原因是php.ini文件中short_open_tag值为Off导致的。
决定是否允许使用 PHP 代码开始标志的缩写形式(<? ?>)。如果要和 XML 结合使用 PHP,可以禁用此选项以便于嵌入使用 <?xml ?>。否则还可以通过 PHP 来输出,例如:<?php echo '<?xml version="1.0"'; ?>。如果禁用了,必须使用 PHP 代码开始标志的完整形式(<?php ?>)。
Note: 本指令也会影响到缩写形式 <?= ,它和 <? echo 等价。使用此缩写需要设置 short_open_tag 的值为 On。不推荐使用短标签,使用<?php ?>才是规范的方法,但因为这种短标签使用的时间比较长(历史原因),为兼容老代码,这种特性才被保存了下来。
解决方案:
将php.ini文件中short_open_tag值设置为On。
相关知识:PHP短标签short_open_tag
名字 | 默认 | 可修改范围 | 更新日志 |
---|---|---|---|
short_open_tag | "1" | PHP_INI_ALL | 在 PHP 4.0.0 时是 PHP_INI_ALL。 在 PHP < 5.3.0 时是 PHP_INI_PERDIR。 |
asp_tags | "0" | PHP_INI_PERDIR | 在 PHP 4.0.0 时是 PHP_INI_ALL。 |
precision | "14" | PHP_INI_ALL | |
serialize_precision | "17" | PHP_INI_ALL | 从 PHP 4.3.2 起可用。在 PHP 5.3.5以前,默认值为 100 |
y2k_compliance | "1" | PHP_INI_ALL | 在 PHP 5.4.0 中移除该选项。 |
allow_call_time_pass_reference | "1" | PHP_INI_PERDIR | 在 PHP 4.0.0 时是 PHP_INI_ALL。 在 PHP 5.4.0 中移除该选项。 |
disable_functions | "" | php.ini only | 从 PHP 4.0.1 起可用。 |
disable_classes | "" | php.ini only | 从 PHP 4.3.2 起可用。 |
exit_on_timeout | "" | PHP_INI_ALL | 从 PHP 5.3.0 起可用。 |
expose_php | "1" | php.ini only | |
zend.multibyte | "0" | PHP_INI_ALL | 从 PHP 5.4.0 起可用 |
zend.script_encoding | NULL | PHP_INI_ALL | 从 PHP 5.4.0 起可用 |
zend.signal_check | "0" | PHP_INI_SYSTEM | 从 PHP 5.4.0 起可用 |
zend.ze1_compatibility_mode | "0" | PHP_INI_ALL | 从 PHP 5.0.0起可用。 在 PHP 5.3.0 中移除该选项 |
detect_unicode | "1" | PHP_INI_ALL | 从 PHP 5.1.0起可用。 本过时特性将肯定会在未来被移除。 |
安装好apache+php+mysql环境之后,安装一个cms提示数据库连接函数不可用,这个明示就是数据库没有配置好,php未支持mysql了,果断进入php.ini进入处理,步骤如下
今天在机器上配好apache2.0.x+php5+mysql5,部署帝国cms系统的时候,结果发现php5默认是不支持mysql的。
于是便打开php.ini文件,查找
extension=php_mysql.dll,把前面的分号去掉,
重启apache,报错找不到php_mysql.dll。这点困难吓不到我,
找到extension_dir指向到ext所在的目录,然后把libmysql.dll拷贝到系统system32目录下,重启apache,成功了。
好了推荐两处文章
Windows环境配置Apache+Mysql+PHP
windows2003配置IIS+FastCGI+PHP5.4.8图解:
利用file_get_contents打开文件或采集远程服务器文件如果文名或url中碰到汉字中文那么会出现failed to open stream:Lnvalid argument in错误。
今天遇到一个很棘手的问题,客户用ftp向服务器传了一个文件,但是却无法被程序识别.查看代码后,没有发现问题,最后重演流程发现,客户上传的文件是中文命名的.于是小做测试发现,file_get_contents函数尽然不支持中文文件名文件.
原有代码如下:
$filename='哈.txt';
echo file_get_contents('./'.$filename);
执行以后显示结果:
悲剧开始.
之后试了不少判断方法,显示怀疑是不是编码问题,文件编码,代码编码一遍遍的排查,可是都是很匹配的啊.
之后查了相关资料却没有找到,于是google了一下发现有人遇到这个问题,说是系统编码的问题,于是开始对文件名进行转码.
文件用的是utf-8编码,但是系统默认为gbk.所以先把文件名转换gbk然后再读取.
$filename='哈.txt';
$filename=iconv('utf-8','gb2312',$filename);
//echo file_get_contents(mb_convert_encoding('./哈.txt', 'gbk', 'utf-8')); (另一种方法)
echo file_get_contents('./'.$filename);
测试结果:
读取成功.
OK,大功告成.
有此在linux系统中使用PHP5.5的朋友会发现安装升级到PHP5.5后出现不能调用json_encode问题,这个不是版本问题是我们操作过程有误,解决办法很简单。在ubuntu13.10上通过apt-get的方式安装了php5.5后,安装drupal,出现无法调用json_encode的错误,很是不解,php老早就内置了json,为何现在这样?
代码如下 | 复制代码 |
sudo aptget php5-json |
重启apache后正常!
相关文章
- 本篇文章主要分享了通过window.navigator来判断浏览器及其版本信息的实例代码。具有一定的参考价值,下面跟着小编一起来看下吧...2017-01-23
- 支付接口现在有第三方的支付接口也有银行的支付接口了,今天我们来介绍php版本银联支付接口开发实例了,这个我估计可以帮助到不少的朋友的哦。 银联支付,首先要注意二...2016-11-25
- 使用 conditional comment 来判断 IE 的版本。嗯,是早早有人提出,但没有认真看代码。昨天刚好在看 CSS3 PIE 的时候看到,觉得是不是不靠谱。今天看到 Paul Irish 也提起,那么,推荐一下吧。这是作者博客上写的:复制代码 代码...2014-05-31
- 作为前端,一直以来都知道HTTP劫持与XSS跨站脚本、CSRF跨站请求伪造。防御这些劫持最好的方法是从后端入手,前端能做的太少。而且由于源码的暴露,攻击者很容易绕过防御手段。但这不代表我们去了解这块的相关知识是没意义的,本文的许多方法,用在其他方面也是大有作用。...2021-05-24
- 普通关闭 我的mysql是自己下载的tar包,自己设定安装目录来安装的。停止mysql服务,说来简单,但不知道的话,还真是挠头。在这和mysql入门的同学们共享:)正确方法是,进入mysql的bin目录下,然后执行./mysqladmin -uroot -p shut...2015-11-24
- 这篇文章主要介绍了C#实现线程安全的简易日志记录方法,比较实用的功能,需要的朋友可以参考下...2020-06-25
- 系统:centos 5.9 环境:apache 2.2.25 tomcat 7.0.42 jdk 1.7.0 1.安装apache 我这里是直接yum安装的,如果你们要编译安装也不是不行. 代码如下 ...2016-01-28
- 这篇文章主要为大家详细介绍了C#如何检测操作系统版本的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
SpringBoot高版本修改为低版本时测试类报错的解决方案
这篇文章主要介绍了SpringBoot高版本修改为低版本时测试类报错的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-18- 在jquery.1.9以前的版本,可以使用$.browser很轻松的判断浏览器的类型和版本,但是在1.9中和以后的版本中,$.browser已经被删除,下面就介绍一下如何实现此功能,希望能够给需要的朋友带来帮助...2016-01-14
永久解决 Intellij idea 报错:Error :java 不支持发行版本5的问题
这篇文章主要介绍了永久解决 Intellij idea 报错:Error :java 不支持发行版本5的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-20- 当你第一次在机器上安装MySQL时,mysql数据库中的授权表是这样初始化的:你可以从本地主机(localhost)上以root连接而不指定口令。root用户拥有所有权限(包括管理权限) 并可做任何事情。...2013-09-19
- open_basedir的作用就是指定目录位置了,意思是将PHP 所能打开的文件限制在指定的目录树,包括文件本身了,并且不受是不是安全模式的影响。 如下是php.ini中的原文...2016-11-25
- 偶这里是针对的WIN平台,现在的站长大部分都用WIN2003,相信没几个站长用低版本儿的操作系统的!...2016-01-27
- 本文章以自己的一些经验来告诉你黑客朋友们会怎么利用你数据库的sql漏洞来把你的数据库下载哦,有需要的同这参考一下本文章。 在数据库中建立一张表: 代码...2016-11-25
- 程序如下: $file_name = "info_check.exe"; $file_dir = "/public/www/download/"; if (!file_exists($file_dir . $file_name)) { //检查文件是否存在 ...2016-11-25
- 收集和分发数据是网络管理的职责之一,而且必须确保这些数据的准确性和安全性。不管它们是什么操作系统,数据库服务器需要特殊的管理以保证操作上的安全性。 良好的安...2016-11-25
- $_SERVER[’PHP_SELF’]在开发的时候常会用到,一般用来引用当前网页地址,并且它是系统自动生成的全局变量,也会有什么问题么?让我们先看看下面的代码吧: <form ac...2016-11-25
- 这篇文章主要介绍了Springcloud实现服务多版本控制的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-05-15
- <?php /** * @name date safe class 0.1 * @author kevin xu * @copyright kenvin E-mail:gincn@cn.cashboxparty.com MSN:gincn@live.cn */ interface dateSa...2016-11-25