Home > php教程 > php手册 > PHP has encountered an Access Violation at 解决办法

PHP has encountered an Access Violation at 解决办法

WBOY
Release: 2016-05-27 08:47:47
Original
2723 people have browsed it

今天在iis中使用php环境时发现用了一会运行php文件就提示PHP has encountered an Access xxx错误了,在网上找了很多的解决办法,下面我来给各位总结一下各种解决方法与原理.

iis+php环境,有客户反映在VPS中出现该错误,PHP has encountered an Access Violation at *

根据错误提示,可以用以下办法解决:

1、重启IIS,重启VPS主机即可。

2、关闭eaccelerator扩展

找到php.ini,如果是我帮您配置的,一般在c:/windows/php.ini,去掉:

zend_extension_ts="C:phpextensionseaccelerator_win_xxx.dll" 
eaccelerator.shm_size="16" 
eaccelerator.cache_dir="c:temp" 
eaccelerator.enable="1" 
eaccelerator.optimizer="1" 
eaccelerator.check_mtime="1" 
eaccelerator.debug="0" 
eaccelerator.filter="" 
eaccelerator.shm_max="0" 
eaccelerator.shm_ttl="0" 
eaccelerator.shm_prune_period="0" 
eaccelerator.shm_only="0" 
eaccelerator.compress="1" 
eaccelerator.compress_level="9"
Copy after login

3、session_save_path 需要设定一个实际的物理路径,并且该目录需要everyone的所有权限,类似U主机的0777.

4、您的内存严重不足.

5、ZendOptimizer和php的搭配不是很好,换个版本试试看.

6、这种多属于用win2003的用户,他们在应用池中设定了限制,比如多长时间回收,最大使用内存多少等等.

技术部门推荐,重启IIS即可,因为这个错误出现的几率非常低.

php+apache环境

1、更新到5.2后php版本

2、是否zend所需的dll文件所在目录给的权限不够,必须有读取和运行的权限

3、如果使用的是windows系统,是否设置过应用池,比如池中限制了什么

4、高版本的PHP和Mysql存在兼容性的问题。c:/windows/system32下的libmysql.dll 使用php下的,不要使用mysql下的,因为两个程序下都有

5、php.ini有两个地方没有设置

1) 将;upload_tmp_dir该行的注释符,即前面的分号“;”去掉,使该行在php.ini文档中起作用。

upload_tmp_dir是用来定义上传文件存放的临时路径,在这里你还可以给其定义一个绝对路径 比如:upload_tmp_dir = d:tmp (d:tmp目录必须有读写权限)

2) php.ini中关于session.save_path一项没有设置好,解决的方法是将 session.save_path和session.cookie_path 定义一个绝对路径 

比如:session_save_path = d:temp session.cookie_path = d:temp (d:tmp目录必须有读写权限)

或者因为安装了一些组件导致,都可以参考下.

最近我的windows2003服务器频繁出现“PHP has encountered an Access Violation at ××××××”这样的错误,尝试搜索了下,遇到这样问题的人还真不少。我的原因可以锁定在eaccelerator上面,因为之前php运行效率不大满意,所以装了eaccelerator加速,效果还是不错的,但随着数据库不断加大,查询和更新数据库操作太频繁,出现了“PHP has encountered an Access Violation at ××××××”这个错误。

网上的解决办法无非就是去掉eaccelerator加速,这肯定不行,因为我要用,那就按他们说的配置一下吧,什么临时文件啊、session路径啊,都改了,还是不行,于是就想是不是mysql版本的问题呢?看了下,发现dll的大小和修改日期还真不一致,于是把mysql下的dll覆盖了从php里拷贝到系统目录的dll,重启iis,貌似好了,但是重启服务器后又出现了,看来问题不在这,难道是iis应用程序池的问题?

尝试去除这个站点的所有限制,但是重启服务器后发现又不行,还是这个错误。观察了下,只要重启iis就能临时解决这个问题,但是这不治本啊。仔细想了下,既然我的环境没有问题,是在装了eaccelerator后出现问题,那就从eaccelerator下手。仔细检查每个配置,发现我配置的一点问题都没有,无论eaccelerator的版本、php的版本,还是mysql的版本,都没问题,权限也都够,php.ini配置也正确,但重启iis就好使一阵子,于是把问题定位到应用程序池。

因为我的iis之前配置一点问题都没有,最近看eaccelerator资料是共享内存和硬盘,难道是iis应用程序池和其他站点共享导致这个问题?于是重新建立应用程序池,把这个应用程序池只独立分配给出问题的站点,适当减少对资源的限制,重启iis,好使了,重启服务器,也好使了,做了个简单的压力测试,也好使了。


教程网址:

欢迎收藏∩_∩但请保留本文链接。

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template