您的位置:首页 > 运维架构 > Apache

Apache + PHP + mysql各种问题分析以及一些解决方案

2011-05-27 15:12 766 查看
在我的前一篇日志中提到,搭建整个Apache+PHP+mysql+eclipse开发环境遇到了很多的问题,问题千奇百怪,网上的解决方案也是形形色色,在介绍了 eclipse下php调试配置后,我总结出了一个整个搭建过程中解决问题的大杀器——Apache日志文件分析。本文通过列举各种各样的问题、错误,并分析如何通过Apache日志文件来最终解决问题。总的思路还是我那篇日志中提到的回归原点,多看文档,多看错误日志,只有知其然,并且知其所以然,才能解决问题。

对于遇到的各种问题,我的感觉是如此:

上次同样的版本这样配置就行,这次就不行了;

网上说把xxx.dll复制到system32下,我复制了还是没解决问题;

刚才重装Apache就解决了那个问题,为什么我现在重装那个问题又出来了;

为什么大家都说加上环境变量问题就解决了,我加了还是没能解决;

……

1.装了apache或者配置PHP后,服务启动不了: The Request opertion has failed! 于是你去Google或者百度了一下,网上的前辈们确实总结的很详细(确实许多人都被这个问题害惨了),有的甚至总结出好多种原因:80端口被占用、软件冲突、httpd.conf配置错误、甚至winsock出错。那么你该怎么办呢,一个一个去试?还是听我的,来看看Apache错误日志吧。

Apache错误日志指的是Apache安装文件夹下logs/error.log文件,里面记录了所有的错误的具体环境,时间、原因等,并且信息、格式还可以自己去配置。

在查看了error.log后,其中我们在文件末尾发现了一句:… make_sock: could not bind to address 0.0.0.0:80…. 你是不是知道了问题所在了,80端口不能绑定,那么你就可以去看一下那些程序占用了80端口(IIS,迅雷,SQL server的某个服务)或者你干脆把Apache端口改成8081,总之这个问题解决了。

2. 还是同样的错误 The Request opertion has failed! 只不过是在你加了LoadModule php5_module C:/php/php5apache2.dll
PHPIniDir “C:/php” 这两句之后,就错了,网上也有各种求助的。来看看error.log中怎么说:Syntax error on line 130 of …httpd.conf: Cannot load C:/php/php5apache2.dll into server: The specified module could not be found…. 你是不是该看看你有没有这个文件了,或者你确实有这个文件,但你是不是添了相对路径而忘了添加环境变量呢。

3.我确实有这个文件,但还是错了,那么log会是:Cannot load C:/Program Files/PHP/php5apache2.dll into server: The specified module could not be found. 那么它没说这个文件没有,而是说模块没找到,那么你是不是把模块文件填错了,本来应该填php5apache2_2.dll的,你填成了 php5apache2.dll,或者是版本错了,那么你可以去搜一下php5apache2.dll这个文件有什么问题,我想范围应该小了不少。

4. Apache启动都正常,但是我在登陆phpmyadmin的时候说没有加载所需要的mysql扩展或者mcrypt扩展,然后明明去掉了这两个扩展 dll那两行的分号,怎么会没有呢,一看error.log他就会告诉你,确实没找到,你的ext就没找到,你是不是该把extension_dir换成绝对路径试一下。

5.phpmyadmin登陆界面可以上去,但是一登陆就没反应IE说Internet Explorer cannot display the webpage, Firefox说连接被重置,看一下错误日志:[Thu Jun 28 21:36:27 2007] [notice] Child 1128: Acquired the start mutex.
[Thu Jun 28 21:36:27 2007] [notice] Child 1128: Starting 250 worker threads.
[Thu Jun 28 21:36:27 2007] [notice] Child 1128: Starting thread to listen on port 80.这怎么办,搜索一下这个总比不知道搜索什么要好吧,终于找到了一个说要把libmysql.dll拷贝到system32下面,照做后终于解决了这个问题。下面我详细说一下这个问题,我解决它的经历或者有人为什么没有遇到这个问题有人遇到了,我们需要知道为什么拷贝到system32后才能工作:相比我们肯定会产生这样的想法,肯定是环境变量错了,拷贝到system32下面他找到了,而原来没找到这个文件,但是明明我是添加了PHP环境变量的呀,为什么呢:因为mysql下面也有这个文件,Apache加载了mysql下面的这个libmysql.dll文件,它和PHP不一致,所以始终错了,拷贝到system32之后是因为system32在环境变量path里面在最前面,而mysql和php的环境变量在后面,发生错误的原因也就是 mysql的环境变量在php的前面,所以优先找到了mysql下的libmysql.dll. 有的人没错,是因为他先添加了php的环境变量,mysql的环境变量是后面加上去的或者根本就没有。于是有人有试了一下,现在我错了,我把php的环境变量放在path的最前面,怎么还是找到的是mysql下的libmysql.dll呢,稍微一想就知道你换过之后系统并没有生效,那么重启一下吧。

5. 在加载zend debugger插件时,时钟不成功。phpinfo里面一直没有,不知道问什么,那么你也可以看一下error.log文件了,它会告诉你failed loading zenddebugger.dll或者not found, 那么你就知道了你写了相对路径是不合适的,或者是你把ts或者nts搞错了(参考上一篇日志),那么写上正确的路径或者换上相对的版本就正确了。

另外提醒一下error.log,有时候你会发现error.log根本没有记录这个错误,那么怎么办,你可以先错误的配置去掉,启动起来 apache,然后加上错误的配置,然后restart服务,那么就会有错误日志了,因为从stop的启动,失败了是不会记录错误日志的。当然 apache有个工具叫test configuration你也可以使用这个工具找出很明显的错误,然后先把apache启动起来,对于不明显的错误就去分析错误日志好了。

当然这种方法并不是万能的,因为问题很多,千奇百怪,你想都想不到,我在这里说出我的解决问题的思路,希望对有问题而解决不了的人一些思路,或许你会想出更简单的解决办法,那么也可以分享出来,我们大家来交流。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: