我一直在使用的編程網站:PHP編程賽格故障
- Zend框架1.11.5(完整的MVC)
- PHP 5.3.6
- 的Apache 2.2.19
- 的CentOS 5.6上VPS的i686的Virtuozzo
- 的cPanel WHM 11.30.1(建立4)
- Mysql的56年5月1日對數
- mysqli的API 56年5月1日
突然對mysql執行一些「SHOW CREATE TABLE」查詢,我得到了這個。
[Wed Jul 20 17:35:23 2011
] [notice] EACCELERATOR(5827): PHP crashed on opline 138 of fetch_fields() at /usr/lib/php/Zend/Db/Statement/Mysqli.php:235
我試圖禁用eAccelerator在沒有成功
[Wed Jul 20 17:45:34 2011] [warn] [client 190.78.208.30] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server
[Wed Jul 20 17:45:34 2011] [error] [client 190.78.208.30] Premature end of script headers: index.php
[Wed Jul 20 17:45:34 2011] [error] mod_fcgid: process /usr/local/cpanel/cgi-sys/php5(11562) exit(communication error), get unexpected signal 11
[Wed Jul 20 17:45:34 2011] [warn] [client 190.78.208.30] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server
[Wed Jul 20 17:45:34 2011] [error] [client 190.78.208.30] Premature end of script headers: index.php
問題的行是這樣的:$行= $ DB-> fetchRow( 「SHOW CREATE TABLE 222AFI」);.如果我在執行之前返回,一切都會好起來。 $ db是Zend_Db_Adapter_Mysqli的實例。最糟糕的是這不是確定性的。該計劃可以通過一些時間,而其他一些則不通過。通常它不會通過該行而不會崩潰的PHP。
<?php
class Admin_DbController extends Controller_BaseController
{
/**
*
*/
public function updateSqlDefinitionsAction()
{
$db = Zend_Registry::get('db');
$row = $db->fetchRow("SHOW CREATE TABLE 222AFI");
}
}
?>
我一直沒有給[email protected]因爲我沒有https://bugs.php.net/bugs-generating-backtrace.php。它可能是愚蠢的,但我嘗試用「--enable-debug」重新編譯apache,(這是一個生產服務器)。然而,「PHP的Apache模塊:運行httpd -X,並訪問崩潰PHP的腳本」是我不工作的部分。服務器告訴我端口80已被使用。
任何人都可以給我一些建議嗎? 如果我瘋了,至少還有其他一些選擇?
我可以嘗試在午夜重新編譯Apache,但它會很高興知道我不會破壞任何東西。你如何看待這對我來說非常重要。
編輯:
我編譯與--enable-調試PHP。這很奇怪,它不像通常那樣崩潰。很難,20次嘗試可能是一次崩潰。如果用-X啓動apache,則更難以讓PHP崩潰,因爲httpd需要很長時間才能響應。
EDIT2:
即使它是20次後的嘗試,我可以使其崩潰,如果我開始的httpd不-X標誌。不過,我模擬了一個腳本,它初始化$ _SERVER變量,以使Zend相信它是通過瀏覽器調用的。當我用「php crash.php」執行這個腳本很多次(比如50)時,一切都正常。我開始相信它與php重用過程有關。我運行的Apache與mod_fcgi和:
Server version: Apache/2.2.19 (Unix)
Server built: Jul 20 2011 19:18:58
Cpanel::Easy::Apache v3.4.2 rev9999
Server's Module Magic Number: 20051115:28
Server loaded: APR 1.4.5, APR-Util 1.3.12
Compiled using: APR 1.4.5, APR-Util 1.3.12
Architecture: 32-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/usr/local/apache"
-D SUEXEC_BIN="/usr/local/apache/bin/suexec"
-D DEFAULT_PIDLOG="logs/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="logs/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"
」服務器告訴我端口80已被使用。「先殺死現有的'httpd'進程。這意味着停止Apache服務,如果您將它配置爲作爲服務運行。 –
可能在這種情況下,FCGI包裝必須轉儲回溯。 – hakre
我假設有一種方法可以將文件從緩存/ optcoded中排除。爲什麼不這樣做,直到你找到一個更持久的解決方案? –