سؤال

لديّ نص مكتوب في بيرل ، وتم إعدامه كـ CGI. أنه يعمل بشكل جيد. لقد قمت مؤخرًا بتثبيت وحدة Mod_perl في Apache ، واستخدمت PerlModule Modperl :: Recistry التوجيه.

PerlModule ModPerl::Registry
PerlModule CGI
PerlSendHeader On

Alias /perl/ /real/path/to/perl/scripts/
<Location /perl>
SetHandler  perl-script
PerlHandler ModPerl::Registry
Options ExecCGI
</Location>

<Files *.perl>
SetHandler  perl-script
PerlHandler ModPerl::Registry
Options ExecCGI
</Files>

لقد قرأت أنه باستخدام هذا لا أحتاج إلى تعديل رمز CGI Perl الخاص بي. (أنا دائمًا أستخدم pragma صارمة ، لذلك لا تقلق بشأن المتغيرات العالمية غير الملموسة وأشياء من هذا القبيل).

لا يزال البرنامج النصي الأصلي الخاص بي يعمل على النحو المقصود ، باستثناء شيء واحد ، لم يعد بالإمكان حل الملفات التي قمت بتضمينها في وظيفة require ().

script.cgi:

#!/usr/bin/perl -w
use strict;
use CGI qw(:standard Vars);
require "includes/functions.cgi";

#blah blah, more stuff

السيناريو

#!/usr/bin/perl -w
use strict;
use CGI qw(:standard Vars);
require "includes/functions.perl"; # <---- Returns error:  Can't locate includes/functions.perl in @INC
#blah blah, more stuff

يعمل هيكل الدليل على هذا النحو:

$ ls

script.cgi script.perl يتضمن/

$ ls يشمل/

وظائف cgi

هل كانت مفيدة؟

المحلول

من: http://perl.apache.org/docs/2.0/api/modperl/registry.html

META: توثيق أننا في الوقت الحالي لا نكون chdir () في dir's script ، لأنه يؤثر على العملية برمتها تحت المواضيع. Modperl :: registryPrefork يجب استخدامه من قبل أولئك الذين يعملون فقط تحت MPM المسبق.

لذلك ، إذا كنت تستخدم MPM المسبق لـ APACH2 ، فيجب عليك محاولة استخدام MODPERL :: RegistryPrefork. إذا كنت تستخدم عاملًا أو حدثًا أو Windows ، فسيتعين عليك تغيير برنامجك حتى لا تفترض أن CWD هو الدليل الذي يجلس فيه Perl.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top