【问题标题】:Calling Perl script from PHP and passing in variables, while also using variablized perl script name从 PHP 调用 Perl 脚本并传入变量,同时还使用可变的 perl 脚本名称
【发布时间】:2011-03-27 04:50:00
【问题描述】:

我通常如下从 PHP 调用 perl 脚本并以这种方式传递变量,它工作正常,但是现在我正在构建一个组件以供重用,我还想在其中可变化我传入的 perl 脚本名称这让我有些头疼,所以我想知道是否有人可以指出更好的方法来做到这一点,因为我的方法不起作用..谢谢..

没有可变 perl 文件名的工作方式:

$file = "/var/www/other_scripts/perl/apps/perlscript.pl $var1 $var2 $var3 $var4";
ob_start();
passthru($file);
$perlreturn = ob_get_contents();
ob_end_clean();

我尝试改变似乎对我不起作用的 perl 文件名,您可以在上面看到它是如何在初始“”中包含 $var(s) 的,我觉得这很奇怪,但这似乎是它工作的唯一方法,我什至不知道如何用可变的 perl 文件名复制它:

$perlscript_file = "/var/www/other_scripts/perl/apps/" . $perlscript .".pl";

$file = $perlscript_file . $var1 . $var2  .$var3 . $var4;
ob_start();
passthru($file);
$perlreturn = ob_get_contents();
ob_end_clean();

【问题讨论】:

    标签: php perl integration


    【解决方案1】:

    您的方法行不通,因为您将所有参数不带空格地连接起来,实际上使它们成为一个参数。

    试试

    $perlscript_file = "/var/www/other_scripts/perl/apps/$perlscript.pl $var1 $var2 $var3 $var4";
    

    顺便说一句,如果参数来自外部来源,您必须使用escapeshellarg() 对其进行清理。 $perlscript 也是如此 - 如果它来自外部来源甚至是用户输入,请在其上执行 escapeshellcmd()

    【讨论】:

    • 好的,谢谢,这是有道理的。现在它只是内部的,所以对它们进行消毒没什么大不了的。谢谢你的信息
    【解决方案2】:

    在旁注中,有一个 CPAN 包旨在提供 PHP 和 Perl 之间的桥梁,它允许您在 PHP 中执行以下操作:

    $perl = Perl::getInstance();
    $instance = $perl->new('perlclass', @args);
    

    但不确定这有多稳定。见

    如果你使用的是Apache,你也可以使用

    // PHP
    apache_note('foo', 'bar');
    virtual("/perl/some_script.pl");
    $result = apache_note("resultdata");
    
    # Perl
    my $r = Apache->request()->main();
    my $foo = $r->notes('foo');
    $r->notes('resultdata', somethingWithFoo($foo));
    

    http://php.net/manual/en/function.apache-note.php

    【讨论】:

      【解决方案3】:

      在您的第二个代码中,您连接的变量之间没有空格。您应该考虑使用sprintf 来很好地格式化它:

      $script = sprintf('/var/www/other_scripts/perl/apps/%s.pl %s %s %s %s', $perlscript, $var1, $var2, $var3, $var4);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-22
        • 1970-01-01
        • 1970-01-01
        • 2012-10-15
        • 1970-01-01
        相关资源
        最近更新 更多