MongoDB在文件保存时崩溃PHP,500错误;可以检索保存没有问题的文件

时间:2012-03-24 13:10:17

标签: php mongodb amazon-web-services lithium

我昨晚调试了一个情况,当我上传文件时运行lighttpd和fastcgi导致500错误。仔细检查显示文件确实被上传,甚至保存到Mongo数据库后端,但它仍然丢失了500个错误。

所以今天我切换到apache,我们已经在另一个系统上工作了,但错误仍然存​​在,而是出现了“空响应”。经过一番调查后,我发现将文件保存到Mongo数据库时似乎发生了这种情况。我的代码如下:

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

创建文件似乎没问题,但是在保存文件数据时,似乎进入数据库没有问题,但我认为它没有正确返回。查看mongo日志,每次数据库保存后都会显示:

run command my_db.$cmd { getlasterror: 1 }

因此,当文件保存到GridFS时,问题似乎是MongoDB会抛出某种形式的错误 - 有没有人遇到过这样的问题,之前可能会干扰PHP导致它本质上崩溃?

谢谢,

(仅举几例 - 我正在使用Lithium PHP Framework和64位版本的MongoDB)。

更新

为了更彻底地解决发生的事情,在运行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 

在Mongo中保存数据没有问题,只是文件上传,有问题的文件大小是45K,所以甚至不是大文件。

这是在AWS EC2上运行的,包括PHP 5.3.10和MongoDB 2.0.4

进一步更新:

只是尝试尽可能简洁,并获得响应,我似乎确定的是MongoDB在'文件保存在其数据库中之后'正在做某事导致PHP崩溃问题。

一旦文件被保存,我可以毫无问题地检索它,它似乎只是在最初保存到数据库时,它导致PHP崩溃并提供500错误。

2 个答案:

答案 0 :(得分:2)

我最近遇到了同样的问题:

PHP在各种配置中都是分段的;在Lighttpd和Apache下,在x86和x64平台上以FCGI模式运行PHP。

原来是罪魁祸首是php-mongo驱动程序(从PECL安装) - 版本1.2.8和1.2.9会导致段错误。我猜这是在保存到GridFS完成后,因为数据似乎存储正确。

版本1.2.7运行得很好

答案 1 :(得分:1)

查看PHP对getLastError命令的支持,并查看返回的对象以查看出错的地方。

一些有用的链接:

您是否尝试过使用命令行中的mongofiles插入文件?