Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl CGI脚本在库中找不到模块_Perl_Apache_Cgi_Perl Module - Fatal编程技术网

Perl CGI脚本在库中找不到模块

Perl CGI脚本在库中找不到模块,perl,apache,cgi,perl-module,Perl,Apache,Cgi,Perl Module,这是我遇到的Apache/Perl问题 我正在perl CGI应用程序中使用CPAN模块。它是电子表格::ParseExcel 我已经安装了带有tar.gz文件的cpan模块 我已经安装了依赖项 但是,我确实是以非root用户的身份这样做的。包含这些文件的库位于用户文件夹/home/user/lib下 现在,我已经在这个盒子上成功地配置了Apache2。html目录是/var/www/html,cgi文件夹是/var/www/html/cgi-bin。我已经验证了它们的有效性,因为该文件夹中所有

这是我遇到的Apache/Perl问题

我正在perl CGI应用程序中使用CPAN模块。它是电子表格::ParseExcel

我已经安装了带有tar.gz文件的cpan模块

我已经安装了依赖项

但是,我确实是以非root用户的身份这样做的。包含这些文件的库位于用户文件夹/home/user/lib下

现在,我已经在这个盒子上成功地配置了Apache2。html目录是/var/www/html,cgi文件夹是/var/www/html/cgi-bin。我已经验证了它们的有效性,因为该文件夹中所有不需要特殊模块的脚本都可以在我的firefox浏览器中工作,比如hello world、数据转储、简单表单

但是,当我尝试运行使用“电子表格::ParseExcel”的脚本时,我得到一个错误,即在@INC中找不到该模块。但是,我在添加库的脚本开头有一个“use lib”语句

脚本可以在PUTTY中毫无问题地运行。只有在从浏览器运行脚本时,我才会遇到问题

此web应用程序是在另一个框上编写的,在该框上运行良好。因为我当然是在那里发展起来的。我把Apache2放在我的个人Ubuntu机器上,在这里安装了web应用程序和模块,它在我的本地机器上工作

我已经将“chmod-ra+rx”设置为用户库文件夹,所以我认为Apache可以访问该文件夹,除非父目录的设置阻止它?我不必在/home/user文件夹或更糟的/home文件夹上运行它,是吗

对这个问题有什么见解吗

谢谢大家抽出时间

这里有两个想法:

  • 它在关于缺少模块的错误中所说的@INC是什么,它是否包括您通过
    use lib
    添加的路径
  • Apache运行的用户是否有权访问此目录?主目录通常具有拒绝其他帐户遍历的权限。检查模块目录中的所有权限,确保o至少在r-x上有到模块的所有目录和文件的权限

  • 如果Apache用户无权访问/home/user,则无法访问/home/user/lib,即使/home/user/lib上的权限允许它访问它


    例如,如果您在/root中拥有一个文件,如果您没有访问/root的权限,您仍然无法访问该文件。

    在@INC错误中列出的第一个目录是有问题的库目录。我不确定apache使用哪个用户试图访问文件“nobody”或“www user”,但我倾向于权限问题。是的,整个库对所有者、组和用户具有r-x权限,而不仅仅是模块的目录。例如,如果模块为/home/tydel/lib/perl/Net/BoogieTime.pm,则/up中的每个目录至少需要o+rx。这包括/home、/home/tydel、/home/tydel/lib和/home/tydel/lib/perl、/home/tydel/lib/perl/Net,最后/home/tydel/lib/perl/Net/BoogieTime.pm将需要o+r。希望能有帮助。啊哈,我明白了。谢谢你指出这一点。因此,最好将perl模块的库放在像/usr/local/lib这样的东西中@user589905:…或者只需使
    /home/user/
    世界可读/世界可执行(
    drwxr-xr-x
    )。在绝大多数情况下,共享主目录中的数据的能力比将其中的所有内容严格私有化更为重要(特别是因为您可以为通常少量的实际敏感数据创建私有子目录)。我面临类似的问题,此解决方案对您有效吗,因为它不适合我。我检查了所有文件夹权限、用户访问权限,但我仍然面临此问题。