IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Web Perl Discussion :

PHP => PERL Envoyer des valeurs reçues dans $ARGV


Sujet :

Web Perl

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 32
    Points : 19
    Points
    19
    Par défaut PHP => PERL Envoyer des valeurs reçues dans $ARGV
    Bonjour,

    je suis devant un petit problème là...

    J'ai besoin d'envoyer des variables à un fichier perl récupéré par des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $var_perl= $ARGV[0];
    shift;
    dans le fichier PERL.

    Voilà l'extrait de mon fichier PHP que j'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    exec("perl /home/blue4sur/www/cgi-bin/test.pl $ac01 $pay_adress $am54 $c01 $g01", $output, $rc);
    print_r($output);
    print_r($rc);
    J'ai aussi essayé ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    exec("/home/blue4sur/www/cgi-bin/test.pl $ac01 $pay_adress $am54 $c01 $g01", $output, $rc);
    print_r($output);
    print_r($rc);
    Et rien ne marche
    ===> Dans le fichier PERL il y a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ($#ARGV < 4) {
       &command_help;
    }
    et le &command_help, n'apparait qu'en cas d'erreur apparament normalement, apparait tout le temps ....

    En tout cas le code PERL ne se lance pas correctement.

    Je ne connais pas grand chose au PERL.

    Merci de m'aider

    PS: ce post est aussi dans la section PHP, mais comme il n'y avait personne et que je pense qu'il y aura plus de monde je le poste aussi ici.
    Modérateurs si vous devez supprimer, jugez lequel est le meilleur

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    ... En tout cas j'espère que ce second post n'est pas le meilleur, parce qu'il n'est pas très clair.
    Si j'ai bien compris, tu as un script Perl, déjà écrit, dont tu sais qu'il prend un certain nombre d'arguments (s'il a déjà été écrit et utilisé, la façon dont il utilise ses arguments ne nous intéresse pas, sinon il va falloir que tu nous en montre un petit peu plus), tu essaie de l'exécuter à partir de PHP et... rien ne se passe ? Autrement dit tu ne récupère rien dans $output et $rc et le script ne fait rien de ce qu'il est censé faire ?
    Tu n'as aucune erreur dans les logs d'Apache ? Tu ne peux pas tester le retour d'"exec" ($rc) pour savoir si le script s'est bien exécuté ? L'utilisateur Apache a bien les droits nécessaires pour lancer le script ?

    --
    Jedaï

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 32
    Points : 19
    Points
    19
    Par défaut
    Désolé de m'être peut-être mal exprimé...
    Je récapitule donc :
    SCRIPT PHP :
    Connexion (cachée : l'utilisateur ne doit rien voir, mais pour des tests je peux afficher les variables) au script PERL situé dans home/blue4sur/www/cgi-bin/test.pl
    Le script PERL requiert 5 arguments récupérés dans la variable $ARGV (+shift)

    Mon essai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    exec("perl /home/blue4sur/www/cgi-bin/test.pl $ac01 $pay_adress $am54 $c01 $g01", $output, $rc);
    print_r($output);
    print_r($rc);
    SCRIPT PERL :
    Il print des choses quand il y a une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if ($#ARGV < 4) {
       &command_help;
    }
    sub command_help
    {
       print "Le code ne marche apparament pas\n";
       exit 1;
    }
    La variable $rc du script PHP renvoie
    Le code ne marche apparament pas
    J'en déduis donc que le script PERL est bien appelé et que les arguments ne sont pas reconnus

    J'ajoute que je n'y connais rien au PERL et que si j'ai ajouté les arguments à la suite de l'url séparés d'un espace, c'est juste que j'ai vu des exemples du genre sur certains sites.

    Merci

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Peut-être certains arguments sont-ils vides ?

    J'ajoute que je n'y connais rien au PERL et que si j'ai ajouté les arguments à la suite de l'url séparés d'un espace, c'est juste que j'ai vu des exemples du genre sur certains sites.
    Ca n'a rien à voir avec Perl, c'est le shell qui interprète la ligne de commande et ensuite envoie les bons arguments au programme. Il peut être judicieux d'entourer les arguments avec des ' (pour éviter qu'un espace dans la variable perturbe le shell).

    --
    Jedaï

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 32
    Points : 19
    Points
    19
    Par défaut
    Non aucun argument n'est vide ni ne contient d'espace... (test si je remplace les variables par leur valeur normale)
    Mais pour faire plus rapide, je peux modifier le code PERL si besoin (je sais pas si c'est possible d'envoyer du GET à un script PERL et surtout comment le récupérer...)

    PS : pour charger un script PERL il faut bien utiliser en php : exec(perl URL arguments_VARG); ? car j'ai vu sur des forums des gens qui utilisaient ça sans la fonction perl ( exec(URL args); ) bon j'ai essayé mais ça marche pas... mais il faut peut etre utiliser une autre fonction ???

    Edit : Ah si autre chose : j'ai l'impression que si j'ajoute des arguments, en fait ça charge même pas le script (d'erreur), mais uniquement si je fais juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec(perl /home/bref...URL/perl.pl, $output, $rc);
    tout court...

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 75
    Points : 54
    Points
    54
    Par défaut
    je pense savoir ce qu'il souhaite ( je detail vu que j ai deja dans un fichier txt .. )

    Premier fichier En html ou php
    Exemple Formulaire.html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <form action="PAGEPHP.php" method="post">
    Champ1   : <input type="text" name="champ1" />  
    Champ2   : <input type="text" name="champ2" />  
    Champ3   : <input type="text" name="champ3" />  
    Champ4   : <input type="text" name="champ4" />  
    Champ5   : <input type="text" name="champ5" />  
    Champ6   : <input type="text" name="champ6" />  
    Champ7   : <input type="text" name="champ7" />  
    Champ8   : <input type="text" name="champ8" />  
    <input type="submit" value="Valider" />
     
    </form>
    Un fichier php
    exemple PHPPAGE.php mon fichier perl xx.pl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    <php?
    if (isset($_POST['champ1']) AND isset($_POST['champ2'])) // Si  variable existe
             {
    $champ1 = $_POST['champ1'];
    $champ2 = $_POST['champ2'];
    $champ3 = $_POST['champ3'];
    $champ4 = $_POST['champ4'];
    $champ5 = $_POST['champ5'];
    $champ6 = $_POST['champ6'];
    $champ7 = $_POST['champ7'];
    $champ8 = $_POST['champ8'];
    exec ("xx.pl $identifiant $champ1 $champ2 $champ3 $champ4 ");
    }
    else
    {
    echo "Champ manquant" ;
    }
    ?>
    Info
    Attention le script doit etre placé au meme endroit que la page php , y a tjs sinon les commandes dos "../REPERTOIRE/xx.pl" ou bien "/REPERTOIRE/xx.pl"

    En esperant t avoir aidé

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 75
    Points : 54
    Points
    54
    Par défaut
    pour info j ai utilsé perl pour faire de la copie de fichier et des logs
    pense a recuperé l ip si ca tu le souhaite un petit exemple tres simplifié
    coté php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
              $ip = $_SERVER['REMOTE_ADDR'];
              $identifiant = $_POST['identifiant'];
              exec ("xx.pl $identifiant $ip");
    coté perl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #!/usr/bin/perl
    $identifiant = $ARGV[0] ; # recupere l identifiant de la page PHP
    $ip = $ARGV[1] ; # recupere l ip ..
    $LOGID = "log\\$identifiant.txt";  
    open LOGID, ">> $LOGID" ;	
    print LOGID "ip $ip" ;
    close LOGID ;
    print "\a" #bip .. :p
    [/quote]

  8. #8
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 32
    Points : 19
    Points
    19
    Par défaut
    Oui je veux bien... mais... ça marche pas ! (chez moi)

    Je tiens à préciser : je suis chez un hébergeur (acceptant le PERL)
    j'ai mis le fichier dans le dossier cgi-bin (j'ai aussi essayé de le mettre dans le même dossier => pareil)
    Quand j'ouvre le fichier .pl directement depuis un navigateur :
    Internal Server Error
    The server encountered an internal error or misconfiguration and was unable to complete your request.

    Please contact the server administrator, webmaster@******.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.

    More information about this error may be available in the server error log.

    Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
    donc ça m'embête...

  9. #9
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Quel est le code Perl que tu utilises ? Peux-tu nous le poster ?
    De même, as-tu configuré ton serveur web (d'ailleurs quel est-il ?) ?
    As-tu regardé pour les droits d'exécution de ce script ?

    @++

    PS : pour te former au Perl, je te recommande notre FAQ ainsi que mes cours.
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  10. #10
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    As-tu déjà essayé de lancer ce script en ligne de commande pour voir ce que ça donne ?

    --
    Jedaï

  11. #11
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 32
    Points : 19
    Points
    19
    Par défaut
    mhh, dans l'invite de commande de windows on pourrait lançer ce script ?
    Bon je veux bien vous poster ce script qui est autorisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
     
    #!/usr/bin/perl
    #
    # perl script to preview a spend
    # from maintenance release e-gold system
    # version 1.0
    # free for use, modification, redistribution
    #
    #Disclaimer
    #The Author [e-gold Ltd.] accepts no
    #responsibility for damages to persons, property or data incurred
    #through the use of this script(s). To the maximum extent permitted
    #by law, in no event shall the Author [e-gold Ltd.] be
    #liable for any damages whatsoever (including, without limitation,
    #damages for loss of business profits, business interruption, loss of
    #business information, or other pecuniary loss) arising out of the use
    #or inability to use this software, even if the Author has been advised
    #of the possibility of such damages.
    #
    #This product is supplied as-is, with no warranties express or implied.
    #Use this software at your own risk.
    #
    # SECURITY NOTE:
    # the curl system command spawned by this example will probably expose
    # its arguments to any other user on the system that can run a 'ps' 
    # type command. the account passphrase would be visible in that situation.
    # if you must use this script on a shared or untrusted box, which is really
    # not a good idea, consider using the --data @foobar option to read curl
    # arguments from file foobar.
    #
    if ($#ARGV < 4) {
       &command_help;
    }
    # pick up account number we will be spending from...
    $accountfrom = $ARGV[0];
    shift;
    # pick up account number we will be spending to...
    $accountto = $ARGV[0];
    shift;
    # pick up amount
    $amount = $ARGV[0];
    shift;
    # pick up units
    $units = uc($ARGV[0]);
    shift;
    $unitsok = 0;
    if(index($units,"USD") == 0){
    	$units = 1;
    	$unitsok = 1;
    }
    if(index($units,"OZ") == 0){
    	$units = 9999;
    	$unitsok = 1;
    }
    if(index($units,"G") == 0){
    	$units = 8888;
    	$unitsok = 1;
    }
    if(index($units,"CAD") == 0){
    	$units = 2;
    	$unitsok = 1;
    }
    if(index($units,"FFR") == 0){
    	$units = 33;
    	$unitsok = 1;
    }
    if(index($units,"CHF") == 0){
    	$units = 41;
    	$unitsok = 1;
    }
    if(index($units,"GBP") == 0){
    	$units = 44;
    	$unitsok = 1;
    }
    if(index($units,"DEM") == 0){
    	$units = 49;
    	$unitsok = 1;
    }
    if(index($units,"AUD") == 0){
    	$units = 61;
    	$unitsok = 1;
    }
    if(index($units,"JPY") == 0){
    	$units = 81;
    	$unitsok = 1;
    }
    if($unitsok == 0) {
    	die "$units is Invalid, choose oz, g, usd, gbp, aud, jpy, dem, cad, ffr, chr";
    }
    # pick up e-metal type
    $metal = uc($ARGV[0]);
    shift;
    $metalok = 0;
    if(index($metal,"GOLD") == 0){
    	$metal = "Gold";
    	$metalok = 1;
    }
    if(index($metal,"SILVER") == 0){
    	$metal = "Silver";
    	$metalok = 1;
    }
    if(index($metal,"PLATINUM") == 0){
    	$metal = "Platinum";
    	$metalok = 1;
    }
    if(index($metal,"PALLADIUM") == 0){
    	$metal = "Palladium";
    	$metalok = 1;
    }
    if($metalok == 0) {
    	die "$metal is invalid, choose gold, silver, platinum, or palladium";
    }
    sub command_help
    {
       print "Usage: $0 from to amount units metal\n";
       print "  units can be one of oz, g, usd, aud, cad, dem, gbp, jpy, chf, ffr\n";
       print "  metal can be one of gold, silver, platinum, palladium\n";
       print "\nexample:\n";
       print "$0 101574 100998 1 usd gold\n";
       print "to preview a spend of 1 US dollar equivalent of gold from\n";
       print " account 101574 to account 100998\n";
       exit 1;
    }
    # prompt user for password
    print "\nPassphrase for $accountfrom?";
    if ( system('stty -echo') != 0) {
    	die "Error setting terminal to not echo\n";
    }
    $pp = "{password}";
    chop($pp);
    system('stty echo');
    print "\n";
     
     
    #build up the arguments for the preview command
    $curlargs = "Payee_Account=$accountto";
    $curlargs .= "&Amount=$amount";
    $curlargs .= "&PAY_IN=$units";
    $curlargs .= "&WORTH_OF=$metal";
    $curlargs .= "&Memo=automatic spend";
    $curlargs .= "&PassPhrase=$pp";
    $curlargs .= "&AccountID=$accountfrom";
    # print "\n$curlargs\n";
    $sysstring = "curl -s -d ";
    $sysstring .= '"';
    $sysstring .= $curlargs;
    $sysstring .= "&CURPAGE=0";
    $sysstring .= '"';
    $sysstring .= " https://www.e-gold.com/acct/verify.asp";
    #print $sysstring;
    # read everything into one buffer
    undef $/;
    open(foo, "$sysstring|");
    while(<foo>){
      # pull out the hidden fields...the pattern starts with "hidden name=" and
      # ends with ">"
      while( /hidden name=(.*?)>/gs ) {
    	# see if there was some kind of error
    	if(index($1, "ERROR") == 0) {
    		$errstring = $1;
    		$errstring =~ ( /value="(.*)"/ );
    		print "Error on preview is: $1\n";
    		exit -1;
    	}
    	# print out the information we care about from the preview
    	if(index($1, "ACTUAL_PAYMENT_OUNCES") == 0) {
    		$ozstring = $1;
    		$ozstring =~ ( /value="(.*)"/ );
    		print "Successful Preview.\n";
    		print "Weight of this payment would be: $1 oz.\n";
    	}
      }
    }
    close foo;
    # all done
    print "\n";
    Mon serveur web => Hebergement chez agora-systems :
    Version PERL 5.8.7
    PCRE (Perl Compatible Regular Expressions) Support enabled
    je vais pas vous mettre la liste de tous les modules PERL disponibles, yen a beaucoup !

    PS: je voudrais pas m'initier au perl mais juste exécuter ce script lol !

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 75
    Points : 54
    Points
    54
    Par défaut
    dans un premier temp je te conseille de le faire marché en local ... avec easyphp ou autre pour verifié ... sinon comme disait plus haut gldavid pense a verifié les droits ... quand un visiteur se connecte a un site web il a des droits ...verifie les droits .. exemple sous IIS le visiteur est en invité ...

Discussions similaires

  1. Envoyer des valeurs de table SAS dans des cellules Excel
    Par id301077 dans le forum ODS et reporting
    Réponses: 5
    Dernier message: 25/09/2011, 11h34
  2. Réponses: 1
    Dernier message: 22/07/2010, 13h57
  3. [DAO][00]Envoyer des valeurs dans une requete SQL direct
    Par Jeannot2 dans le forum VBA Access
    Réponses: 5
    Dernier message: 17/04/2007, 10h18
  4. Réponses: 18
    Dernier message: 03/03/2006, 18h19
  5. Envoyer des valeurs vers le port série
    Par aliwassem dans le forum Langage
    Réponses: 2
    Dernier message: 30/12/2005, 20h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo