MongoDB сбой PHP при сохранении файла, ошибка 500; может восстановить файл, сохраненный без проблем - PullRequest
2 голосов
/ 24 марта 2012

Вчера вечером я отлаживал ситуацию, когда запуск lighttpd и fastcgi вызывал ошибку 500 при загрузке файлов. Более тщательная проверка показала, что файлы действительно загружались и даже сохранялись в серверной части базы данных Mongo, но все равно выдавали ошибку 500.

Итак, сегодня я переключился на apache, который у нас работал в другой системе, но ошибка все равно возникает, и вместо этого отображается «пустой ответ». После небольшого исследования я обнаружил, что это происходит при сохранении файла в базе данных Mongo. Мой код выглядит следующим образом:

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

Кажется, что все в порядке при создании файла, однако при сохранении данных файла кажется без проблем входит в базу данных, но я не думаю, что он возвращается правильно. Глядя на логи Монго, это появляется после каждого сохранения базы данных:

run command my_db.$cmd { getlasterror: 1 }

Так что может показаться, что проблема связана с тем, что MongoDB выдает какую-то форму ошибки при сохранении файла в GridFS - кто-нибудь сталкивался с такой проблемой до того, как это могло бы помешать PHP, вызвав его существенный сбой?

Спасибо

Dan

(Просто упомяну - я использую 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 проходит без проблем, это просто загрузка файла, размер файла составляет 45 КБ, поэтому даже не большой файл.

Это работает на AWS EC2 с PHP 5.3.10 и MongoDB 2.0.4

Дальнейшее обновление:

Просто чтобы попытаться сделать это как можно более кратким и получить ответы, я, похоже, определил, что MongoDB делает что-то «после», файл сохраняется в его базе данных, что вызывает проблему сбоя PHP.

Как только файл был сохранен, я могу восстановить его без каких-либо проблем, просто при первоначальном сохранении его в базе данных происходит сбой PHP и выдается ошибка 500.

Ответы [ 2 ]

2 голосов
/ 29 марта 2012

Я недавно столкнулся с тем, что может быть такая же проблема:

PHP был segfaulting во множестве конфигураций; запуск PHP в режиме FCGI под Lighttpd и под Apache для платформ x86 и x64.

Оказывается, виновником был драйвер php-mongo (установленный из PECL) - версии 1.2.8 и 1.2.9 вызовут ошибку segfault. Я предполагаю, что это было после того, как сохранение в GridFS было завершено, поскольку данные, казалось, были сохранены правильно.

Версия 1.2.7 работает нормально .

1 голос
/ 24 марта 2012

Посмотрите на поддержку PHP для команды getLastError и посмотрите на возвращенный объект, чтобы увидеть, что пошло не так.

Несколько полезных ссылок:

Вы пытались использовать mongofiles из командной строки для вставки файла?

...