Windows 2008 下 PHP 开启 opcache 后频繁 500 错误解决方式
最近公司后台访问速度下降,操作卡顿,公司后台环境是 windows server 2008 + iis7 + php56,于是在参考网上解决方案后,觉得使用 opcache 最为方便,于是参考几篇配置示例文档后,在线部署了。经过一段时间体验后,发现确实快了很多,但是相应的出现了一个以前几乎没见过的问题,访问后台时经常性 500 错误,但是刷新页面就恢复正常了,将这个现象在网上搜了一番,确实存在这个问题,但是找了许多帖子也没有发现靠谱的解决方案,于是就搁置了这个问题,刷新页面重试也是可以忍受的。
后来,经公司运营反馈发现,500 错误发生的太频繁了,另外有时候刷新也不管用,因为后台有些页面会一次性批量请求后端接口,然后几乎都是 500,这个问题就有些严重了,于是重新开始在网上寻求解决方式。
搜索到两个方案如下:
在 Internet 信息服务(IIS)管理器下的应用程序池中选择应用,右键-高级设置-标识,将 ApplicationPoolIdentity 修改为 LocalSystem,经验证,失败。
在 PHP 手册中有这么一个配置项
另外,在评论中有下面这段话,
大致意思是当我们在 windows 平台下开启 opcache 时,你可能发现运行时出现随机 500 错误,然后在 phpini 中添加一行配置 opcachemmap_base = 0x20000000 可以解决。不幸的是,我不知道值“0x20000000”的意义,我只能告诉你这个值可以解决这个问题。
经过验证,成功解决 500 错误!
下面贴下我自己的 opcache 配置
此问题一般是APACHE的配置或者是在APACHE内的DocumentRoot所指向的目录权限不够所引起的,解决办法是这样的,一般是将主目录的权限设为对所有用户可读可搜索应该就可以的了,若没解决再将APACHE配置文件内的Deny from all 改为 Allow from all试试,
服务器500错误是一个比较常见的错误,但是处理起来并不是很容易。毕竟服务器500错误种类不止一种。为了调试我们最好打开不友好的调试模式:
这个是默认勾选的状态,当你将该状态不勾选后服务器错误会较为详细的显示在前端。
另外服务器错误还有可能是权限问题:
处理这些之后若是仍然没有改观,那么雪饮个人博客今天的话题就引入了。
雪饮个人博客最近正在写一个web聊天室,使用的是ajax+php+xml(雪饮个人博客不喜欢这个程序与数据库交互),好不容易写到了发送消息时发现返回错误500,雪饮个人博客用状态码弹出的结果理论上服务器正确返回状态码应该是200才对。
于是从服务器查,先将程序用另外一个服务器运行一切ok,然后雪饮个人博客就查看该服务器php版本(毕竟雪饮个人博客用的是php语言),发现是php517,而我本地服务器是php512既然是服务器端报错就该查找服务器端php脚本,后来发现当我注释掉一个语句$file_put_content后就会正常,初步估计应该是这个函数在低版本php环境中的一种弊端吧。
也就是说服务器500的错误还会用程序的错误有关的。
500错误一般是权限问题。
国内的虚拟主机一般不支持ini_set, htaccess。可以考虑合租服务器。
php 配置 (通过修改你的php管理软件进行配置):
-php里可以用ini_set来更改php设置
允许URL重写
-apache需要有mod_rewrite, 空间需要支持htaccess
全局性PHP的注册选项关闭(推荐)
-也是PHP的设置,regist_global=off
htaccess的编写可以在网上搜索一下,类似的例子很多的。
500错误在这里指PHP后端出错,500错误码作为友好提示,没有显示错误详情。
解决办法,如果你使用的IIS管理器可以打开IIS点击-》错误页 选择500 右击选择“编辑功能设置”,选择“详细错误”确定,然后打开500错误的错误页,就可以看到是哪一行代码出错了
你看看你的apache的配置文件 是不是虚拟主机的问题,还有可能就是访问的默认页面 一般是indexphp 你的那个网站起得是其他的名字你没有添加到配置文件里。如果你遇见更多不懂的,我推荐你上后盾网经常看看关于php教学视频吧,希望对你有帮助。
0条评论