2012-03-24 79 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