从网站启动的perlscript无法访问PERL5LIB环境变量

时间:2014-02-12 13:51:57

标签: php perl webserver environment-variables

我试图从基于PHP的网站中启动perl脚本。在该perl脚本中,我使用的是安装在非标准位置的软件包。因此,要使该位置上的所有包都可用而不启动perl作为" perl -I / path / to / packages"或将" lib / path / to / packages;"在我制作的每个perl脚本中,我添加了" / path / to / packages"到PERL5LIB环境系统变量,当常规用户执行脚本时一切正常。但是,当从网站启动此perl脚本时,所有环境系统变量似乎都无法访问(使用$ ENV {" PERL5LIB"}和$ ENV {" LOGNAME"}进行测试perl,都是未初始化的),导致perl脚本崩溃,因为它无法在@INC中找到所需的包。

如何在不使用" perl -I / path / to / packages script.pl"的每个perl脚本的情况下,使这些perl包可用于从网站启动。并且没有把" lib / path / to / packages;"在每个perl脚本之上?

3 个答案:

答案 0 :(得分:0)

有两种可能的解决方法:

如果您拥有/访问Web服务器,则可以全局添加变量。

(对于apache) http://www.perlmonks.org/?node_id=844715

<Directory /var/www/>
    SetEnv PERL5LIB /your/lib/path

您可以设置和维护与脚本相关的库的另一种解决方法,然后从perl脚本访问它。请查看FindBin模块。 http://www.perl.com/pub/2002/05/14/mod_perl.html

您可以将脚本./bin/和libs存储在./lib /

如果您使用多个地方的libs,可以将它链接到./lib /.

  #!/usr/bin/perl

  use FindBin ();
  use lib "$FindBin::Bin../lib/";
  use test;
  print "test.pm => $INC{'test.pm'}\n";

答案 1 :(得分:0)

您必须确保在Web服务器启动的环境中设置PER5LIB。

您需要查阅特定Web服务器的手册以查找设置环境变量的配置命令,或者您需要修改启动器脚本(例如apachectl)并添加逻辑以正确设置PERL5LIB。

aaaaannnd ...有人在我发布这个帖子时发布了一些例子......

答案 2 :(得分:0)

我向系统管理员寻求帮助,发现我们没有使用apache(如预期的那样),而是使用nginx。话虽如此,解决方案是将PERL5LIB定义添加到/ etc / nginx / fastcgi_params文件中,如下所示:

sudo echo 'fastcgi_param  PERL5LIB    "custom/path/to/perl/modules";' >> /etc/nginx/fastcgi_params
sudo service nginx reload

感谢@LenJaffe和@ user1126070让我指向正确的方向!