2012-03-24 81 views
2

我昨天在調試一個情況,當我上傳文件時,運行lighttpd和fastcgi導致500錯誤。仔細檢查表明,文件確實正在上傳,甚至保存到Mongo數據庫的後端,但仍然拋出500錯誤。MongoDB在文件保存時崩潰PHP,500錯誤;可以檢索保存的文件沒有問題

所以今天我切換到apache,我們已經在另一個系統上工作,但仍然出現錯誤,而是提供了一個'空的響應'。經過一番調查後,我發現將文件保存到Mongo數據庫時似乎發生了這種情況。我的代碼如下:

$file = File::create(); 
$file->save(array('file'=>$data['file'])); 

它出現在保存文件數據創建的文件時,不過是罰款,這似乎進入沒有問題的數據庫,但我不認爲它會返回正常。看着蒙戈日誌,這似乎每個數據庫後保存:

run command my_db.$cmd { getlasterror: 1 } 

所以這樣看來,問題在於MongoDB的拋出一些形式的錯誤,當一個文件被保存到GridFS的 - 有沒有人碰到過這樣的問題來了在此之前可能會干擾PHP導致它實質上崩潰?

感謝,

(僅舉 - 我使用的是鋰PHP框架,和MongoDB的64位版本)。

更新:

只要能和發生了什麼更徹底,運行的lighttpd當我在上載此錯誤:

2012-03-24 13:14:42: (mod_fastcgi.c.2566) unexpected end-of-file (perhaps the fastcgi process died): pid: 21279 socket: unix:/tmp/php.socket-1 
2012-03-24 13:14:42: (mod_fastcgi.c.3354) response not received, request sent: 51519 on socket: unix:/tmp/php.socket-1 for /index.php?url=campaign/edit/4f6cf84ca8b057ee17000000, closing connection 

在蒙戈保存的數據沒有問題,它只是文件上傳,有問題的文件大小爲45K,所以甚至沒有大文件。

這是AWS EC2上運行,用PHP 5.3.10和MongoDB 2.0.4

進一步更新:

剛開始嘗試做這個儘可能簡明,並得到答覆,我有什麼似乎確定的是,MongoDB在將文件保存在導致PHP崩潰問題的數據庫中後正在做一些事情。

一旦文件被保存,我可以在沒有任何問題的情況下檢索它,它似乎最初將它保存到數據庫,它導致PHP崩潰並提供500錯誤。

回答

2

我最近遇到什麼可能是同樣的問題:

PHP在各種配置的段錯誤;在Lighttpd和Apache下,在x86和x64平臺上以FCGI模式運行PHP。

原來的罪魁禍首是php-mongo驅動程序(從PECL安裝) - 版本1.2.8和1.2.9會導致段錯誤。我猜這是在完成對GridFS的保存之後,因爲數據似乎被正確存儲。

版本1.2.7跑得很好

1

查看PHP對getLastError命令的支持,並查看返回的對象以查看出了什麼問題。

一些有用的鏈接:

您是否嘗試過使用mongofiles從命令行插入一個文件?

+0

感謝您的鏈接 - 但它似乎是在mongo.so PHP擴展中的錯誤。我的登臺服務器上有一個較舊的服務器,這就是爲什麼它正在工作,但已恢復到1.27,所有工作都重新開始:) – Dan 2012-03-27 15:03:47