关于PHP has encountered an Access Violation(PHP已经遇到了一个访问冲突在xxxx)问题的解决,问题描述:服务器系统为windows2003.先重启一下IIS就能当时解决这个问题,但是后面还会时不时发生PHP has encountered an Access Violation错误。下面是一些解决办法的总结。
一、去掉 php中 eaccelerator 的扩展 这样做能够解决您的问题
不过可能会加重系统负担 因为eaccelerator主要是为了节省系统资源的东西具体做法是找到php.ini 如果是我帮您配置的,一般在c:/php/php.ini或者 c:/winnt/php.ini 或者c:/windows/php.ini
去掉
zend_extension_ts="C:/php/extensions/eaccelerator_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"
eaccelerator主要是在unix环境下开发的,但是作者忽略到windows实际上不像unix主机那样,是没有unix主机的那种内存共享机制的 这个bug已经提交给他们了,希望能够解决.当然,如果您的机器这个问题不严重,建议还是保留,ea是一块非常优秀的Php缓存+加速软件 配合zo使用,将会降低系统负担 50%-80%左右,提高负载能力、速度和效率 200%左右。
二、session_save_path 需要设定一个实际的物理路径,并且该目录需要everyone的所有权限。
三、 c:/winnt/temp 或者 c:/windows/temp 也需要everyone的所有权限
四、您的内存严重不足,查看一下,如果有问题,请加内存。
五、第五种可能 ZendOptimizer和php的搭配不是很好 换个版本试试看
六、这种多属于用win2003的用户 他们在应用池中设定了限制 比如多长时间回收,最大使用内存多少等等 这些设置势必造成这个经典的php错误
1、定时重启应用程序池
综合参考以上解决方法,我们服务器是win2003的,所以我想加一个定时重启IIS应用程序池的功能,就是每天晚上12点重启一下IIS里网站应用程序池,我想这样就是双保险了,应该没有什么问题.
以下是我定时重启iis应用程序池的批处理程序:
首先:在c :/window/system32目录下新建一个iispoolrestar.vbs文件,内容如下:
set WebAppPool = GetObject("IIS://LocalHost/w3svc/AppPools/DefaultAppPool")
WebAppPool.Stop
WebAppPool.Start
其中DefaultAppPool是IIS网站下的应用程序池的名称(我的应用程序池名是这个,根据实际的修改)
然后:新建一个bat处理文件。如:iispoolrestart.bat,内容如下:
cscript c:/windows/system32/iispoolrestar.vbs
如果服务器是windows的,可以使用系统自带的任务计划 定时执行该iispoolrestart.bat程序,我目前是每天晚上12点执行一次重启应用程序池。
2、对出现错误的网站单独建立应用程序池。
3、设置IIS多个工作进程
临时解决方法就是:
w3wp.exe是在IIS与应用程序池相关联的一个进程,用两个工作进程(w3wp.exe)运行,在web站点属性中把1设为2
具体方法如下:
①打开 Internet 信息服务(IIS)管理器
②展开 应用程序池 找到你站点应用的程序池 右击---属性---性能---把web园最大工作进程数(w):改为3
七、问题出在libmysql.dll上.
因为PHP和MYSQL都有libmysql.dll,并且是不一样的文件,我在配置IIS+PHP环境时是按照Chinaz的一文章,那文中说安装完 Mysql后再把libmysql.dll 复制到C:\Windows\system32下,结果这步就是导致问题的原因了。
解决问题方法很简单,把C:\Windows\system32 下的libmysql.dll换成PHP目录下的就OK了。
当然可以不用复制到系统目录下,直接在PHP.INI中指定extension_dir就可以啦,并且要增加系统环境变量 D:\PHP;D:\php\ext
- 本文固定链接: http://ttfde.top/index.php/post/248.html
- 转载请注明: admin 于 TTF的家园 发表
来逛逛