Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.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 您如何使用Apache;ScriptExpressorSource注册表严格”的;指令?_Perl_Apache_Cgi - Fatal编程技术网

Perl 您如何使用Apache;ScriptExpressorSource注册表严格”的;指令?

Perl 您如何使用Apache;ScriptExpressorSource注册表严格”的;指令?,perl,apache,cgi,Perl,Apache,Cgi,我在windows上运行ApacheWeb服务器,以便处理一些PerlCGI脚本。在生产环境中,这些脚本在linux机器上运行,在源代码存储库中,它们都有类似的提示:#/usr/bin/perl,但在我的windows机器上,shebang将是#!c:\perl\bin\perl.exe,因此我与源代码库有冲突 输入apachescriptexplorersource指令 我一直在努力使它工作,基于我能谷歌。但到目前为止运气不好。我有: 将这些内容添加到相应的指令中 允许不超过任何值 选项索引跟

我在windows上运行ApacheWeb服务器,以便处理一些PerlCGI脚本。在生产环境中,这些脚本在linux机器上运行,在源代码存储库中,它们都有类似的提示:
#/usr/bin/perl
,但在我的windows机器上,shebang将是
#!c:\perl\bin\perl.exe
,因此我与源代码库有冲突

输入apachescriptexplorersource指令

我一直在努力使它工作,基于我能谷歌。但到目前为止运气不好。我有:

  • 将这些内容添加到相应的指令中 允许不超过任何值
    选项索引跟随SYMLINKS ExecCGI 命令允许,拒绝 通融 ScriptExpressorSource注册表严格

  • 增加: AddHandler cgi script.cgi

  • 编辑了我的注册表并将新字符串添加到

  • 现在,我知道CGI在这个服务器上工作,只要他们有正确的shebang

    但是,当我尝试在不使用shebang的情况下访问CGI时,apache日志会显示:

    找不到的文件的Exec CGI谓词 键入“.cgi”

    任何想法、见解,甚至疯狂的猜测都将不胜感激


    谢谢。

    听起来好像ScriptExplorerSource行被忽略了。如果设置为Registry或Registry Strict,则应忽略shebang行并仅使用Registry

    此外,注册表项的位置略有不同:

    HKEY_CLASSES_ROOT\.cgi\Shell\ExecCGI\Command\(Default) => C:\Perl\bin\perl.exe -wT
    

    <>而不是在单独的CGI进程中运行Perl代码,请考虑使用<强> MODYPerl (参见)。p>
    Mod_perl效率更高,因为perl代码只加载和解析一次,然后直接在Apache进程中运行,而无需启动或与其他进程通信。

    这也适用于Python脚本。我做了以下操作来修复我的Apache安装,以忽略脚本中的shebang需求。如果没有这一点,当前版本的Apache2.4中就需要shebang,至少在我的版本中是这样

    # tell apache to use registry - this requried a registry hack
    # to the following: 
    # [HKEY_CLASSES_ROOT\.py\Shell\ExecCGI\Command] = "c:\\python\\python.exe"
    ScriptInterpreterSource Registry-Strict
    

    用MODYPerl 2.0.4和Perl V5.10 0对Apache 2.2.11(Win32)进行了验证,这解决了我的问题,但是,我发现使用<代码> -t>代码>切换会导致旧代码出现问题(例如,它导致<代码> @ INC >代码不考虑相对路径)。谢谢,这使我发疯了。使用Win2008 Apache 2.2.22和ActivePerl 5.12.4进行工作
    # tell apache to use registry - this requried a registry hack
    # to the following: 
    # [HKEY_CLASSES_ROOT\.py\Shell\ExecCGI\Command] = "c:\\python\\python.exe"
    ScriptInterpreterSource Registry-Strict