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.
Forum Programmation.php Problème php, passthru et perte de caractère
20
mai
2007
# rectification
Posté par dbbg . Évalué à 1.
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 Toto . Évalué à 2.
- 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.