J'appelle normalement des scripts Perl de PHP comme ci-dessous et passez des variables de cette façon, et cela fonctionne bien, mais je consomme maintenant un composant pour réutiliser où je souhaite également visiter le nom du script Perl que je passe Et cela me donne des maux de tête, alors je me demande si quelqu'un peut signaler une meilleure façon de le faire car mon chemin ne fonctionne pas .. Merci ..
La manière dont cela fonctionne sans le nom de fichier PERL Variablized: P >
$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();
3 Réponses :
Votre chemin ne fonctionne pas car vous concatenez tous les paramètres sans espaces, ce qui en fait efficacement un paramètre.
Essayez p> d'ailleurs, si les paramètres vient d'une source externe, vous forts> doit les désinfecter strong> à l'aide de EscapeShellarg () Code>
. Il en va de même pour $ perlscript code> - s'il provient d'une source externe ou même d'une entrée utilisateur, faites un
escapeshellcmd () code>
dessus. p> p>
ok merci, cela a du sens .. Pour le moment, c'est juste interne, donc ce n'est pas une grosse affaire de les assainir .. Merci pour l'info
Dans votre deuxième code, vous concatéez les variables sans espaces entre eux. Vous devez envisager d'utiliser sprintf code> pour formater cela bien:
Sur un Sidenote, il existe un package CPANE qui vise à fournir un pont entre PHP et Perl, ce qui vous permettrait de faire quelque chose comme ce qui suit dans PHP:
// 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));
Si vous utilisez Apache, vous pouvez également utiliser P>
$perl = Perl::getInstance(); $instance = $perl->new('perlclass', @args);