perl Apache2 :: Запрос ошибок с использованием методов param () и upload () одновременно - PullRequest
3 голосов
/ 12 января 2012

Я пишу код в среде mod_perl и использую модуль Apache2 :: Request для получения опубликованных данных.Это работает нормально, за исключением случаев, когда я также использую объект Apache2 :: Request также для загрузки файла / получения дескриптора файла.Если использовать методы отдельно, нет проблем.Однако, если я использую их обоих в одной подпрограмме, я получаю эту ошибку в моем файле журнала Apache:

[notice] child pid 27383 exit signal Segmentation fault (11)

Вот мой код:

my $r = shift;
use Apache2::Request;
use Apache2::Upload;
my $req = Apache2::Request->new($r, POST_MAX => 10 * 1024 * 1024,DISABLE_UPLOADS => 0);
my $img_url = $req->param('url');

my $upload = $req->upload('files[]');
my $filename = $upload->filename;
my $upload_filehandle = $upload->fh;
my $file_size = $upload->size;

Apache2 :: Загрузитьвключен, потому что он используется Apache2 :: Request.Как я уже сказал, если я закомментирую либо строку, начинающуюся с «my $ img_url ..», либо раздел загрузки, он работает нормально.Однако, если они оба присутствуют в коде, я получаю 502 Proxy Error и эту ошибку в файле журнала apache.

Заранее спасибо!

1 Ответ

2 голосов
/ 24 января 2014

Я ценю, что это старый вопрос, поэтому мой ответ немного запаздывает, но в случае, если кто-нибудь еще наткнется на эту тему, у меня есть решение.

Проблема в ошибке mod_perl с New ():

my $req = Apache2::Request->New($r);

(в вашем случае у вас есть несколько других вещей, определенных там, но похоже, что это те же ошибки и спорадические симптомы, от которых я страдал).

Apache2 :: Запросить ошибки сегмента, когда $ r не определен, но иногда кажется, что он сегрегируется, даже если вы переместили @_ в $ r (как вы это сделали) Я не могу объяснить, почему это происходит, но я обнаружил простое изменение, которое остановило эту проблему:

my $req = Apache2::Request->New(Apache2::RequestUtil->request);

Таким образом, ваш код будет выглядеть следующим образом:

my $req = Apache2::Request->new(Apache2::RequestUtil->request,
                                POST_MAX => 10 * 1024 * 1024,
                                DISABLE_UPLOADS => 0);
...