无法找到来自源 Zend Loader 的事件 ID 5 的描述

作者 happyWang 日期 2013-10-23 Views
无法找到来自源 Zend Loader 的事件 ID 5 的描述

今天在查看windows日志中的应用程序日志时,发现如下错误:

无法找到来自源 Zend Loader 的事件 ID 5 的描述。本地计算机上未安装引发此事件的组件,或者安装已损坏。可以安装或修复本地计算机上的组件。

如果该事件产生于另一台计算机,则必须在该事件中保存显示信息。

以下是包含在事件中的信息: 

C:WINDOWSTEMPZendLoader.MemoryBase@SYSTEM@3391924446 拒绝访问。

系统:windows 8.1 web环境:nginx/1.5.3 PHP/5.3.27

依旧是先Google了一下,在这篇文章里找到了解决方式

看了不是很理解,找了其中的几个关键词:php.ini,upload_tmp_dir,C:WINDOWSTemp,Network Service,IIS_WPG,ZendOptimizer.MemoryBase@SYSTEM和ZendOptimizer.MemoryBase@NETWORK SERVICE。

大体的意思是:在php.ini中upload_tmp_dir的值为C:WINDOWSTemp的时候,在确保ZendOptimizer.MemoryBase@SYSTEM和ZendOptimizer.MemoryBase@NETWORK SERVICE两个文件存在的时候(没有则新建一个命名相同的空文件),给Temp文件夹添加Network Service和IIS_WPG的写入权限,就能解决问题。

然后我根据这个思路,开始着手根据我自己的环境和配置,尝试着解决问题。

首先,我的php.ini中,关于upload_tmp_dir这块如下:

;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;

; Whether to allow HTTP file uploads.
; http://php.net/file-uploads
file_uploads = On

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
; http://php.net/upload-tmp-dir
;upload_tmp_dir =

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 32M

; Maximum number of files that can be uploaded via a single request
max_file_uploads = 20

我的upload_tmp_dir 是被注释掉的,但是file_uploads 是开启的,所以upload_tmp_dir 用的是默认的值。然后在这篇文章中找到如下一句话:

The reason for this is, the uploaded file will inherit the permissions of the directory specified in the directive upload_tmp_dir of php.ini.  If this directive isn't set, the default of C:WindowsTemp is used.

所以我的upload_tmp_dir 在默认值的情况下用的是 C:WindowsTemp 在我的Temp文件夹下是有文件ZendLoader.MemoryBase@SYSTEM@3391924446的,这一点和文章里面说的不太一样,可是我的错误信息里面明确是指定这个文件的,所以暂时不需要添加那两个空文件。

然后就是给Temp文件夹添加权限了,首先得知道Network Service和IIS_WPG分别代表什么?

看MSDN上面的,可以知道Network Service是一个被服务控制管理器(service control manager)使用的本地账号,用来在网络中代表这台计算机。

这篇文章里面找到的针对IIS_WPG的定义是:

There was also a group called IIS_WPG, which was used as a container for all the application pool identities. During IIS setup, all the appropriate resources on the system were granted the correct user rights for the IIS_WPG group so that an administrator only needed to add their identity to that group when they created a new application pool account.

大致的意思是给所有IIS应用管理权限的一个组。

可问题是,我用的不是IIS,所以得找到和Nginx相关的账号.可是看了下,貌似nginx和IIS不一样,它是一个服务,是运行在本地系统账户下的一个服务。所以我不知道该怎么办了。先给Temp账户添加了Network Service的写入权限。然后清空日志,看看明天重启的时候报什么错吧

============== 后续更新 =====================

2013年10月24日 今天开机一段时间之后,查看应用程序日志,没有发现此错误 2013年10月25日 今天开机之后,查看应用程序日志,问题再次出现,分为两种问题状态:

C:WINDOWSTEMPZendLoader.MemoryBase@SYSTEM@3391924446
拒绝访问。

Unable to write base address
拒绝访问。