Вчера вечером я отлаживал ситуацию, когда запуск 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.