2010-08-09 14 views
6

Normalde PHP'deki perl betiklerini aşağıdaki gibi çağırıyorum ve değişkenleri bu şekilde geçiyorum, ancak iyi çalışıyor, ancak şimdi yeniden bileşen yapıyorum -kullanmak istediğim de perl betiği isminin değişmesini istiyorum ve bu bana biraz başım ağrıyor, bu yüzden herkesin yolumda çalışmadığı için bunu yapmak için daha iyi bir yol gösterip gösteremeyeceğini merak ediyorum. ..PHP'den Perl betiğinin çağrılması ve değişkenler arasında geçiş yapılması, ayrıca varablized perl betiği adı kullanılarak da

variablized perl dosya adı olmadan Çalışma şekli:

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

doe perl dosya adını variablize My girişimi Benim için çalışıyor gibi görünmüyor, yukarıda gördüğüm kadarıyla başlangıçta "var olan" var olan "varsayı" bile görebiliyorsunuz, ama bu tek çalışma şekli gibi görünüyor ve ben hatta variablized perl dosya ile bu çoğaltmak için nasıl emin değildi:

etkili onlara bir parametre haline boşluksuz tüm parametreleri birleştirerek olduğunuz için yolu çalışmıyor
$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(); 

cevap

9

. parametreler harici bir kaynaktan geliyor eğer

, arada

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

deneyin Eğer MUTLAKA onları escapeshellarg() kullanarak sterilize. Aynı şey $perlscript için de geçerli - harici bir kaynaktan veya hatta kullanıcı girdilerinden geliyorsa, üzerinde escapeshellcmd() yapın.

+0

Tamam teşekkürler bakın

// 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)); 

kullanabilirsiniz gör onun sadece iç, bu yüzden onları sanitizing hakkında büyük bir anlaşma değil .. ben için teşekkürler nfo – Rick

3

İkinci kodunuzda, değişkenleri aralarında boşluk olmadan birleştiriyorsunuz. Sen güzel bu biçimlendirmek için sprintf kullanmayı düşünmelisiniz: Bir dipnot düşmek gerekirse

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