我试图从基于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脚本之上?
答案 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让我指向正确的方向!