昨晚我在调试一种情况,当我上传文件时,运行 lighttpd 和 fastcgi 导致 500 错误。仔细一看,确实是文件在上传,甚至还保存到Mongo数据库后端,但还是报500错误。
所以今天我切换到 apache,我们已经在另一个系统上工作过,但错误仍然存在,而是出现了“空响应”。经过一番调查,我发现它似乎是在将文件保存到 Mongo 数据库时发生的。我的代码如下:
$file = File::create();
$file->save(array('file'=>$data['file']));
创建文件时似乎很好,但是在保存文件数据时,它似乎可以毫无问题地进入数据库,但我认为它不能正确返回。查看 mongo 日志,每次数据库保存后都会出现:
run command my_db.$cmd { getlasterror: 1 }
因此,问题似乎在于 MongoDB 在将文件保存到 GridFS 时抛出某种形式的错误 - 在此之前是否有人遇到过这样的问题,这可能会干扰 PHP 导致它基本上崩溃?
谢谢,
担
(顺便提一下——我正在使用 Lithium PHP 框架和 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 错误。