0

我正在使用DoctrineMongoDB进行Symfony2项目。至少可以说,一切都很好,直到今天我发现了一个问题。

返回一个或多个记录/文档的查询显然会导致 PHP 进程终止。更具体地说,这只发生在返回“文件”结果的查询中。我没有收到 PHP 错误,也没有错误记录到 apache 错误日志中。

当我点击导致此查询运行的 URL 时,我在 Chrome 中得到net::ERR_EMPTY_RESPONSE。我可以echo 'test';exit()在查询之前输出内容,并在浏览器中看到内容。如果我在查询之后立即放置同一echo 'test';exit();行,则会收到空响应错误。

我的计算机上有一个开发环境设置,其中包括 LAMP 堆栈。但是,我已将其配置为连接到我的远程 MongoDB 实例。使用本地设置查询文件时没有问题。我的计算机和服务器之间的各种服务版本略有不同。基于此观察,似乎不是 MongoDB 服务问题,而可能是 PHP 扩展问题?

我补充说我能够使用服务器上的服务成功存储文件。但我只能在本地设置中查询/检索数据。

当 PHP 像这样死掉时,是否会生成任何日志内容?

我正在运行以下服务版本:

  • 操作系统:Ubuntu 12.04 LTS
  • 阿帕奇:2.2.22
  • PHP: 5.3.10-1ubuntu3.1
  • Mongo PHP 扩展:1.2.10
  • MongoDB-10gen:2.0.5

任何帮助将不胜感激。我已经尝试了我所知道的一切,但还没有找到任何线索来说明究竟是什么导致了这种情况发生。

--

我的模型如下所示:

<?php

namespace Project\Bundle\Document;

use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * @MongoDB\Document
 */
class File {

/**
 * @MongoDB\Id(strategy="auto")
 */
protected $id;

/**
 * @MongoDB\ObjectId
 * @MongoDB\Index
 * @Assert\NotBlank
 */
protected $userId;

/**
 * @MongoDB\ObjectId
 * @MongoDB\Index
 */
protected $commonId;

/**
 * @MongoDB\File
 */
public $file;

/**
 * @MongoDB\String
 */
public $mimeType;

/**
 * @MongoDB\Hash
 */
public $meta;

... getters / setters ...

?>

我为 MongoDB 服务器打开了详细日志记录,查询似乎运行良好:

Wed May  9 20:04:29 [conn1] queryd dbdev.File.files query: { $query: { commonId: ObjectId('4fab01396bd985c215000000'), meta.size: "large" }, $orderby: {} } ntoreturn:1 nreturned:1 reslen:258 0ms
Wed May  9 20:04:29 [conn1] end connection 127.0.0.1:42087
Wed May  9 20:04:30 [DataFileSync] flushing mmap took 0ms  for 5 files
Wed May  9 20:04:30 [DataFileSync] flushing diag log
Wed May  9 20:04:30 [PeriodicTask::Runner] task: WriteBackManager::cleaner took: 0ms
Wed May  9 20:04:30 [PeriodicTask::Runner] task: DBConnectionPool-cleaner took: 0ms
Wed May  9 20:04:30 [PeriodicTask::Runner] task: DBConnectionPool-cleaner took: 0ms
Wed May  9 20:04:30 [clientcursormon] mem (MB) res:46 virt:997 mapped:160

更新

我曾经strace在 Apache 中发现以下分段错误:

en("/opt/dev/app/cache/dev/doctrine/odm/mongodb/Hydrators/ProjectBundleDocumentFileHydrator.php", O_RDONLY) = 28
fstat(28, {st_mode=S_IFREG|0777, st_size=2462, ...}) = 0
fstat(28, {st_mode=S_IFREG|0777, st_size=2462, ...}) = 0
fstat(28, {st_mode=S_IFREG|0777, st_size=2462, ...}) = 0
fstat(28, {st_mode=S_IFREG|0777, st_size=2462, ...}) = 0
mmap(NULL, 2462, PROT_READ, MAP_SHARED, 28, 0) = 0x7fa3ae356000
munmap(0x7fa3ae356000, 2462)            = 0
close(28)                               = 0
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
chdir("/etc/apache2")                   = 0
rt_sigaction(SIGSEGV, {SIG_DFL, [], SA_RESTORER|SA_INTERRUPT, 0x7fa3b3ce4cb0}, {SIG_DFL, [], SA_RESTORER|SA_RESETHAND, 0x7fa3b3ce4cb0}, 8) = 0
kill(5020, SIGSEGV)                     = 0
rt_sigreturn(0x139c)                    = 0
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
Process 5020 detached
4

1 回答 1

1

这听起来像是我在 5 月 3 日修复的错误。我建议你尝试最新版本的 github(v1.2 分支!)。如果您将 phpinfo() 部分包含在“mongodb”中,这也会有所帮助。如果您仍有问题,请在http://jira.mongodb.org/browse/PHP上提交带有可重现的脚本的错误报告。

于 2012-05-10T10:14:12.020 回答