【问题标题】:Does 'use lib' work for UNC paths?'use lib' 是否适用于 UNC 路径?
【发布时间】:2009-04-21 14:58:49
【问题描述】:

我的托管脚本已被移动,不再工作。

指定的 CGI 应用程序 不返回完整的行为不端 一组 HTTP 标头。

我注意到我的托管公司有人修改了我的脚本,以便我以前拥有的地方

use lib 'd:/myorig/LIB';

我现在有

use lib '//newhost/LIB';

这应该有效吗?

我尝试了 1800 INFORMATION 的建议并运行了

的最小脚本
#!perl -w
use lib '//whatever/lib';
print "success";

...给出了相同的结果。

更新:ysth 对 FatalsToBrowser 的建议确实揭示了更多信息。看起来路径(由托管公司的人添加)可能是错误的。

Update2:托管公司现在表示,这些脚本与之前的托管人想法相同,但会引发大量语法错误。 “由于我们无法为您调试脚本,我们建议您联系原始程序员并向他们寻求帮助”。 <grinds teeth>

部分解决:托管公司终于意识到他们没有正确设置权限。他们仍然不对,并且(aargh)他们不允许网站所有者设置文件夹权限n,甚至在他们自己网站中的文件夹上也是如此。

【问题讨论】:

    标签: perl unc


    【解决方案1】:

    我不知道它是否应该起作用,但我的直觉是它会好的。但是,您发布的两条 use lib 行并不相同。

    # go to the 'd' drive and use the 'myorigLIB' directory on that drive
    use lib 'd:/myorigLIB';
    
    # go to the 'newhostLIB' server - no path is specified - this looks invalid to me
    use lib '//newhostLIB';
    

    也许您需要指定服务器上共享的路径?另外,您可能需要查看权限?可能运行 CGI 的用户无法访问该网络路径?

    另外,您可以编写一个简单(非 CGI)程序来测试您的理论并运行它:

    #!perl -w
    use lib '//whatever/lib';
    print "success";
    

    然后,如果可以的话,只需在服务器上运行它,看看会发生什么。

    【讨论】:

      【解决方案2】:

      不,路径不完整,它需要服务器名称和完整路径。这也是一种不好的做法,因为它需要监控两台机器而不是一台机器才能让您的应用程序运行。

      【讨论】:

        【解决方案3】:
        The specified CGI application misbehaved by not returning a complete set of HTTP headers.
        

        这不是错误。如果你幸运的话,你的托管公司会为你提供一个错误日志,它会显示 perl 正在死去的实际错误。如果不, 考虑使用

        use CGI::Carp "fatalsToBrowser";
        

        用于测试。 (如果您是偏执狂(这不是一件坏事),一旦完成测试,您将避免启用它,因为错误通常会提供有关您的代码甚至您的数据库的信息,这可能有助于黑帽利用安全性孔。)

        【讨论】:

          【解决方案4】:

          我知道我在尝试使用来自 apache 的映射驱动器和 unc 路径时遇到了麻烦,因为不允许 apache 用户使用网络驱动器。这很难弄清楚——但有可能做到。这可能是一个相关的问题。

          【讨论】:

            【解决方案5】:
            #!perl -w
            
            print "HTTP/1.0 200 OK\nContent-Type: text/plain\n\n";
            
            my $path = "//whatever/lib";
            print "\nExists ", -e $path;
            print "\nDirectory ", -d $path;
            print "\nReadable ", -r $path;
            print "\nListing:\n";
            print "\t$_\n" for glob "$path/*";
            

            【讨论】:

              猜你喜欢
              • 2012-06-16
              • 2017-07-28
              • 1970-01-01
              • 1970-01-01
              • 2013-11-15
              • 2016-12-14
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多