Forum Programmation.php Problème php, passthru et perte de caractère

Posté par  .
Étiquettes : aucune
0
20
mai
2007
Bonjour tout le monde

Voila, je dois développer un site web qui exécute un programme, récupère la sortie et le stocke dans un fichier. Jusqu'ici rien de bien méchant sauf qu'il manque des caractères voire des mots dans le fichier où je stocke la sortie.

Je fais un :

passthru("echo `$cmd_ptr` > $filetmp");

et par exemple au lieu d'obtenir ça :


128.112.139.71
33456
91.121.1.65
33457
udp
exh
13 s


J'ai tout simplement ça :






Si quelqu'un a une explication, je suis preneur :p

Merci d'avance.
  • # rectification

    Posté par  . Évalué à 1.

    Bon je viens de voir que mon message ne veut dire car les balises HTML ne s'affiche pas. Je reposte en choississant cette fois ci les bonnes options :)


    et par exemple au lieu d'obtenir ça :

    <RESULTAT><HEAD>
    <SRC> 128.112.139.71 </SRC>
    <PORTSRC> 33456 </PORTSRC>
    <DEST> 91.121.1.65 </DEST>
    <PORTDEST> 33457 </PORTDEST>
    <PROTOCOL> udp </PROTOCOL>
    <ALGO> exh </ALGO>
    <DURATION> 13 s </DURATION>
    </HEAD>

    J'ai tout simplement ça :

    <RESULTAT>
    <XML>
    <HEAD>
    <FILS>

    J'ai fait une autre version du programme avec un exec dont le code est le suivant :

    $cmd_ptr="./ptr-cli " . $_POST['serveur'] ." ". $_POST['ip'] . "";

    exec($cmd_ptr, $stock);
    $result_client="";
    foreach($stock as $ligne) {
    $result_client=$result_client . $ligne;
    }

    /* On crypte son adresse avec md5. Le résultat obtenu sera utilisé pour nommer les fichier images, xml et texte afin de garantir que chaque utilisateur recevra ses résultats et pas les résultats destinés à un autre utilisateur */
    $nom_util=md5($add_ip);

    $filetmp="tmp-$nom_util.xml";

    //Ouverture du fichier
    if (!$handle_tmp = fopen($filetmp, 'w+')) {
    echo "Impossible d'ouvrir le fichier ($filetmp)";
    exit;
    }

    //On écrit le code
    if (fwrite($handle_tmp, $result_client) === FALSE) {
    echo "Impossible d'écrire dans le fichier ($filetmp)";
    exit;
    }

    //On ferme le fichier
    if (fclose($handle_tmp) === FALSE) {
    echo "Impossible de fermer le fichier ($filetmp)";
    exit;
    }

    Merci d'avance pour l'aide :)
    • [^] # Re: rectification

      Posté par  . Évalué à 2.

      Il peut y avoir plusieurs soucis :
      - passthru n'a pas de variable PATH d'affectée, toute les commandes doivent etre données avec leur path complet
      - tu as des quotes ou autre dans ta commande qui rende ton appel invalide.

      Ensuite, mais ca c'est plutot moi qui suit comme ca, j'aime pas demander au shell d'en faire trop d'un coup sur un serveur WEB. Je prefere lui demander une action à chaque fois et controler que tout est OK. En plus ca permet des debugs plus simple.
      Je ferais donc un $result = exec($cmd); print '$result'; write($myfile, $result);. (pas sur des parametres j'ai pas touchés au php deuis un bail ;)).

      Alors ensuite, ta régle de création de commande me parait très peu sécurisée. Filtre le contenu des variables POST pour etre sur qu'il s'agit d'un 'serveur' et d'une IP.

      Et sinon, regarde aussi du coté de escapeshellcmd et escapeshellargs

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.