2010-10-28 5 views
1

J'ai deux scripts existants qui fonctionnent bien en tant qu'individus.Comment puis-je passer une URL ou une variable de Perl à PHP?

Le script principal est Perl. Je souhaite exécuter le script PHP à partir d'un sous-script dans le script Perl.

Habituellement, le script PHP est simplement exécuté via l'URL directe, par ex. Je voudrais juste appeler le script PHP à partir du Perl et passer le foo var donc, je n'ai pas besoin de frapper le script PHP avec mon navigateur pour traiter les données.

Je n'ai pas assez de talent pour réécrire le script PHP à Perl.

J'ai essayé exec ("http://me.com/phpscript.php?foo=bar"); et inclure et système en vain.

J'ai lu et cherché mais, trouvé seulement des solutions pour appeler Perl de PHP. J'apprécie vraiment les excellents conseils que j'ai toujours bien ici.

+0

double possible de [Appel script Perl de PHP et en passant dans les variables, tout en utilisant le nom de script perl variablized] (http://stackoverflow.com/questions/3438626/calling-perl-script-from-php -and-pass-in-variables-while-also-using-variabliz) – Gordon

+0

c'est perl-> php, vous donnez php-> perl – nerkn

+0

@nerkn J'ai suggéré un [paquet CPAN] (http: //search.cpan. org/~ aff/PHP-Interpreter-1.0.2 /) là-bas qui fait php-> perl et perl-> php. – Gordon

Répondre

0

Si le script se trouve sur le système de fichiers local, vous devriez pouvoir l'exécuter directement en utilisant l'interpréteur php et le chemin d'accès au fichier. Pour y accéder via le Web, utilisez le package LWP.

Par exemple:

exec('/usr/bin/php', 'myscript.php', @arguments); 

Notez que les arguments de ligne de commande sont traités différemment des arguments d'URL; votre script PHP devra probablement être modifié pour les utiliser correctement.

+0

Oui, ils sont dans le même répertoire même. Tout ce que tu as dit était sur ma tête. Pouvez-vous fournir un exemple détaillé pour moi? – DulcimerDude

+0

Cela semble prometteur. Actuellement le $ _GET ["foo"] est dans le script PHP. C'est le seul var qui a besoin d'être passé. Comment modifier le script PHP et votre exemple pour passer et obtenir foo? – DulcimerDude

0

Vous pouvez directement exécuter un fichier php si vous ajoutez #! PathToPhp

./myscript.php 

dans ce fichier en utilisant argc ou argv ou args vous pouvez obtenir des arguments passés à ce fichier est le plus fondamental args

#!/bin/php 
    <?php 
    foreach($args as $key => $value){ 
    echo "\n".$key.":".$value; 
+0

Merci mais, j'ai tout essayé sur cette page et le script PHP ne s'exécute pas. J'ai besoin d'un exemple complet je suppose. – DulcimerDude

+0

@DulcimerDude: Voir: http://www.php.net/manual/fr/features.commandline.usage.php pour savoir comment appeler des scripts PHP à partir de la ligne de commande. De cette façon, vous pouvez simplement appeler ces scripts PHP à partir de n'importe quel appel système dans vos scripts Perl. –

0

Il y a un paquet CPAN qui vise à jeter un pont entre PHP et Perl:

Cette classe encapsule un inte intégré PHP5 preter. Il fournit des méthodes proxy (via AUTOLOAD) à toutes les fonctions déclarées dans l'interpréteur PHP, une conversion transparente des types de données Perl en PHP (et inversement), et la possibilité pour PHP d'appeler similairement les sous-routines Perl et d'accéder à la table des symboles Perl.

Le but de ce paquet est de construire un pont transaparent pour exécuter du code PHP et du code Perl côte à côte.

Vous ne savez pas à quel point c'est stable. Voir

+0

Je vais essayer ça. J'ai essayé tout ce qui précède et rien ne fonctionne pour moi. Tout cela juste pour passer un var. C'est très difficile pour moi. – DulcimerDude

+0

Non. Je suis perplexe. – DulcimerDude

+0

@Dulcimer bien, qu'est-ce qui ne fonctionne pas exactement? Le script fonctionnera-t-il mais ne recevra pas d'entrée? Si c'est le cas, pourriez-vous essayer d'obtenir 'bar' avec' $ _GET ['foo'] 'au lieu de [' $ argv'] (http://www.php.net/manual/fr/reserved. variables.argv.php)? – Gordon

1

On dirait LWP :: UserAgent devrait fonctionner pour ce scénario.

require LWP::UserAgent; 

my $ua = LWP::UserAgent->new; 
$ua->timeout(10); 
$ua->env_proxy; 

my $response = $ua->get('http://me.com/phpscript.php?foo=bar'); 

if ($response->is_success) { 
    print $response->decoded_content; # or whatever 
} 
else { 
    die $response->status_line; 
} 
Questions connexes