我正在尝试在 Windows 7 机器上运行 memcache、fast-cgi 和 apache 2.2 + php。如果我不使用 memcache,一切都会正常。
当我extension=php_memcache.dll
在 php.ini 中禁用它时,一切都恢复正常。
一旦我启动 apache,apache 日志就会显示:
[Wed Jan 12 18:19:23 2011] [notice] Apache/2.2.17 (Win32) mod_fcgid/2.3.6 configured -- resuming normal operations
[Wed Jan 12 18:19:23 2011] [notice] Server built: Oct 18 2010 01:58:12
[Wed Jan 12 18:19:23 2011] [notice] Parent: Created child process 412
[Wed Jan 12 18:19:23 2011] [notice] Child 412: Child process is running
[Wed Jan 12 18:19:23 2011] [notice] Child 412: Acquired the start mutex.
[Wed Jan 12 18:19:23 2011] [notice] Child 412: Starting 64 worker threads.
[Wed Jan 12 18:19:23 2011] [notice] Child 412: Starting thread to listen on port 80.
访问该页面后(该页面刚刚有echo phpinfo()
)我在error.log中收到此错误:
[Wed Jan 12 18:20:54 2011] [warn] [client 127.0.0.1] (OS 109)The pipe has been ended. : mod_fcgid: get overlap result error
[Wed Jan 12 18:20:54 2011] [error] [client 127.0.0.1] Premature end of script headers: index.php
我的 ext 目录中有 php_memcache.dll,并且 httpd.conf 如下:
LoadModule fcgid_module modules/mod_fcgid.so
FcgidInitialEnv PHPRC "c:/php"
FcgidInitialEnv PATH "c:/php;C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/System32/Wbem;"
FcgidInitialEnv SystemRoot "C:/Windows"
FcgidInitialEnv SystemDrive "C:"
FcgidInitialEnv TEMP "C:/WINDOWS/Temp"
FcgidInitialEnv TMP "C:/WINDOWS/Temp"
FcgidInitialEnv windir "C:/WINDOWS"
FcgidIOTimeout 64
FcgidConnectTimeout 32
FcgidMaxRequestsPerProcess 500
<Files ~ "\.php$>"
AddHandler fcgid-script .php
FcgidWrapper "c:/php/php-cgi.exe" .php
</Files>
因此问题肯定与 memcache 有关,因为如果我禁用它,fast-cgi 似乎可以正常工作。这有什么可能的原因吗?
memcache 服务正在运行...我可以通过控制面板->服务来检查它。
答案1
手动运行 PHP(找到 php.exe 并双击它)。经常发生的情况是,PHP 由于某种原因无法加载扩展,并尝试弹出消息框告诉您这一点。由于当它作为服务运行时没有人可以看到消息框,所以没有人知道发生了什么。
答案2
我让它工作了。问题出在 dll 版本和 php 版本上。我将 php 升级到 5.3,现在没问题了。
您还必须小心线程安全和非线程安全版本...任何不兼容性都不会让您运行 memcache。