由apache重启错误引发的问题

/ 0评 / 0

某日,在安装好apache2.2.11 mysql5.0 php5.2.5 这些软件后,测试phpinfo正确显示信息。

但再重启apache过程中出现了问题。如:

于是使劲的搜apache重启错误。后实在是找不到原因了。又查看应用程序apache的具体错误信息,突然发现出现了一个系统级错误1067。于是再次搜apache 1067错误。终于找到原因了。
如:

说的是不能把某些程序当做正常的服务来启动。不过还是不太懂,到底是哪错了。于是把具体的apache信息“The Apache service named  reported the following error:
>>> httpd.exe: Could not reliably determine the server's fully qualified domain name, using 192.168.1.1 for ServerName.”

再次baidu,找到某个问题也是如此。某牛解答说:

Module 模式运行 PHP,需要线程安全版本的 PHP,你下载的是 None Thread Safe 非线程安全版本的 PHP
如果必须要要使用 NTS 的 PHP,换成 CGI / FastCGI 安装模式即可
另外你的 ServerName 设置有问题,注释掉或者换成 localhost / IP 吧~

然后,就换了个php5.2.9的php包。于是再次试验。

按照配置php非安装版的步骤,一步一步的。

1、把php目录添加到系统环境变量path中,要记得用分号分隔。

2、创建新的php环境变量。名称:PHPRC   值: D:/wamp/php (即你的php目录)

3、修改php.ini文件。查找 extension_dir ,修改为 extension_dir = 'D;/wamp/php/ext';  添加Directory等。

4、让apache支持php。在httpd.conf 文件底部添加
LoadModule php5_module "D:/wamp/php/php2apache2_2.dll"
PHPIniDir "D:/wamp/php"

5、重启apache。

可是ff下一运行,居然phpInfo();函数直接出来了(在ie下运行,是直接弹出下载该文件的对话框) php没有被编译!发现没什么错的啊。一步一步的开始查找,还是没什么错。

第二天,到网上搜了,步骤大同小异,没什么多大区别。但是纠结啊。还是不知道。突然看到某个答案中有这样一句“在AddType application/x-gzip .gz .tgz的下一行加上AddType application/x-httpd-php .php

我想是不是因为掉了这一句呢。 于是加上。重启。真的就出来了!。。。

OMG 。忽略了这一句。 不太懂什么意思。我想应该是和iis中需要添加".php"后缀作为被编译的文件一个道理啊。

以下关于php执行方式及ISAPI/FastCGI的笔记。
====================================

只有在CGI/FastCGI模式下non-thread-safe才会工作。模块化安装方式不起作用,windows下web server大多是多线程的。

non-thread-safe意味着更好的性能,不过差异不大,php内部就已经很高效。无论是否值得这么做,带来的困惑却有很大争议。

从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。

Non Thread Safe就是非线程安全,在执行时不进行线程(Thread)安全检查;
Thread Safe 是线程安全,执行时会进行线程(Thread)安全检查,以防止有新要求就启动新线程的 CGI 执行方式而耗尽系统资源;

Windows下的PHP 主要有两种执行方式:ISAPI 和 FastCGI。

      ISAPI 执行方式是以 DLL 动态库的形式使用,可以在被用户请求后执行,在处理完一个用户请求后不会马上消失,所以需要进行线程安全检查,这样来提高程序的执行效率,所以如果是以 ISAPI 来执行 PHP,建议选择 Thread Safe 版本;

      而 FastCGI 执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以 FastCGI 来执行 PHP,建议选择 Non Thread Safe 版本。

      官方并不建议你将Non Thread Safe 应用于生产环境。

php线程安全与非线程安全的区别

原地址:koda.javaeye.com/blog/662034

   
Windows版的PHP从版本5.2.1开始有Thread Safe(线程安全)和None Thread Safe(NTS,非线程安全)之分,

这两者不同在于何处?到底应该用哪种?这里做一个简单的介绍。 从2000年10月20日发布的第一个Windows

版的PHP3.0.17开始的都是线程安全的版本,这是由于与Linux/Unix系统是采用多进程的工作方式不同的是

Windows系统是采用多线程的工作方式。如果在IIS下以CGI方式运行PHP会

非常慢,这是由于CGI模式是建立在多进程的基础之上的,而非多线程。一般我们会把PHP配置成以ISAPI的方

式来运行,ISAPI是多线程的方式,这样就快多了。但存在一个问题,很多常用的PHP扩展是以Linux/Unix的

多进程思想来开发的,这些扩展在ISAPI的方式运行时就会出错搞垮IIS。因此在IIS下CGI模式才是PHP运行的

最安全方式,但CGI模式对于每个HTTP请求都需要重新加载和卸载整个PHP环境,其消耗是巨大的。

  为了兼顾IIS下PHP的效率和安全,微软给出了FastCGI的解决方案。FastCGI可以让PHP的进程重复利用而

不是每一个新的请求就重开一个进程。同时FastCGI也可以允许几个进程同时执行。这样既解决了CGI进程模

式消耗太大的问题,又利用上了CGI进程模式不存在线程安全问题的优势。

  因此,如果是使用ISAPI的方式来运行PHP就必须用Thread Safe(线程安全)的版本;而用FastCGI模式运

行PHP的话就没有必要用线程安全检查了,用None Thread Safe(NTS,非线程安全)的版本能够更好的提高效

率。

发表评论

您的电子邮箱地址不会被公开。

*