2

昨晚我在调试一种情况,当我上传文件时,运行 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 错误。

4

2 回答 2

2

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

PHP 在各种配置中都出现了段错误;在 Lighttpd 和 Apache 下以 FCGI 模式运行 PHP,跨 x86 和 x64 平台。

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

1.2.7 版运行得很好

于 2012-03-29T18:42:22.290 回答
1

查看 PHP 对 getLastError 命令的支持,并查看返回的对象,看看出了什么问题。

一些有用的链接:

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

于 2012-03-24T16:14:20.133 回答