6
votes

Appeler le script PERL de PHP et en passant des variables, tout en utilisant également le nom de script Perl variablized

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


0 commentaires

3 Réponses :


10
votes

Votre chemin ne fonctionne pas car vous concatenez tous les paramètres sans espaces, ce qui en fait efficacement un paramètre.

Essayez xxx

d'ailleurs, si les paramètres vient d'une source externe, vous doit les désinfecter à l'aide de EscapeShellarg () . Il en va de même pour $ perlscript - s'il provient d'une source externe ou même d'une entrée utilisateur, faites un escapeshellcmd () dessus.


1 commentaires

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



4
votes

Dans votre deuxième code, vous concatéez les variables sans espaces entre eux. Vous devez envisager d'utiliser sprintf pour formater cela bien: xxx


0 commentaires

6
votes

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


0 commentaires