【问题标题】:Two perl scripts using the same library, in the same folder - One can access it, the other can't两个 perl 脚本使用同一个库,在同一个文件夹中 - 一个可以访问它,另一个不能
【发布时间】:2012-06-29 22:09:53
【问题描述】:

我正在尝试设置一个 apache 服务器以使用 FGMap 显示 FlightGear 的地图。地图页面的所有 Web 服务器文件都在 /var/www/fgmap 中。它调用 fg_server_xml.cgi 脚本,该脚本尝试使用 /var/www/fgmap/sg_perl/blib/lib/sgmath.pm 中的库。 (作为参考,Blib 是指向同一目录中另一个文件夹的符号链接 - 指向 /var/www/fgmap/sg_perl/blibx86-64)

当我尝试访问该页面时,fg_server_xml.cgi 给 ma 一个 500 Internal Server Error,并且 apache 错误日志显示:

[Sat Jun 30 07:59:48 2012] [warn] -T switch is ignored, enable with 'PerlSwitches -T' in httpd.conf\n
[Sat Jun 30 07:59:48 2012] [error] Can't locate sgmath.pm in @INC (@INC contains: /var/www/sg_perl/blib/arch/auto/sgmath 
/var/www/sg_perl/blib/lib /etc/perl /usr/local/lib/perl/5.14.2 
/usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 
/usr/local/lib/site_perl . /etc/apache2) 
at /var/www/fgmap/fg_server_xml.cgi line 14.\nBEGIN failed--compilation aborted at /var/www/fgmap/fg_server_xml.cgi 
line 14.\n

但是,我将另一个 perl 脚本 sg_test.pl 放到同一个目录中,它引用同一个库并从中运行一个函数并打印输出。此脚本运行良好,并且可以找到库。

为什么一个脚本在其库调用中与另一个脚本相同且在完全相同的位置,却无法找到另一个脚本可以轻松访问的文件?

我的一个理论是 Apache 试图以没有权限或其他权限的用户身份访问它,以访问其中包含 sgmath.pm 的文件夹,因此我使 WWW 的每个文件夹/子文件夹/文件都可以访问所有用户。还是没有运气。

Apache 绝对可以使用.cgi,没问题,我做了一个测试.cgi 文件,效果很好。

谢谢!

编辑:有问题的库调用

use lib "/var/www/sg_perl/blib/lib";
use lib "/var/www/sg_perl/blib/arch/auto/sgmath";
use sgmath;

【问题讨论】:

    标签: perl apache ubuntu


    【解决方案1】:

    使用use lib,您添加了

    /var/www/sg_perl/blib/lib
    

    但你说文件在

    /var/www/fgmap/sg_perl/blib/lib
    

    @INC 中不存在后一种路径(通过检查错误消息确认)。

    【讨论】:

    • 天哪,你在开玩笑吧。当我从不起作用的相对路径更改为绝对路径时,我忽略了添加 fgmap 目录。非常感谢。
    • 相对路径可能不起作用,因为它们是相对于 cwd(在 CGI 脚本中通常是 /),而不是相对于 $0 的目录。 use mylib; 通常可以解决问题。否则,您可以使用use lib::findbin '...relpath...';
    • 嗯,好吧,有道理。很高兴知道!再次非常感谢您,对于这么一件小事来说,这是一个非常令人头疼的问题。
    猜你喜欢
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    相关资源
    最近更新 更多