簡體   English   中英

從PHP調用Perl腳本並傳入變量,同時還使用變量化的perl腳本名稱

[英]Calling Perl script from PHP and passing in variables, while also using variablized perl script name

我通常從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();

你的方式不起作用,因為你連接所有參數沒有空格,有效地使它們成為一個參數。

嘗試

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

順便說一句,如果參數來自外部源,你必須使用escapeshellarg()清理它們。 $perlscript - 如果它來自外部源甚至用戶輸入,請在其上執行escapeshellcmd()

在旁注中,有一個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

在第二個代碼中,您將連接變量,它們之間沒有空格。 您應該考慮使用sprintf來很好地格式化:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM