Se connecter / S'enregistrer
Votre question

[PHP] Passage de pointeur dans une fonction

Tags :
  • Connexion
  • Programmation
Dernière réponse : dans Programmation
25 Octobre 2010 09:03:50

Bonjour,

je souhaite établir une connexion telnet avec PHP et pour le moment impossible d’établir quoi que se soit. J'utilise pour mes test WAMP. Pour faire un test de connexion j'ai écrit un code très court et simple :
  1. <?php
  2. $fp = fsockopen("monadresse", 23, $errno, $errstr, 50);
  3. if(!$fp)
  4. {
  5. echo "OK <br \>";
  6. echo $errno."<br \>".$errstr;
  7. }else
  8. {
  9. echo "NON <br \>";
  10. echo $errno."<br \>".$errstr;
  11. }
  12.  
  13. ?>


et la réponse est :
NON
0

Quelqu'un aurait-il une meilleure réponse que mon petit WAMP ? :) 
Mercii
@++

Autres pages sur : php passage pointeur fonction

a c 145 L Programmation
25 Octobre 2010 09:08:36

Oui: vérifier ce que tu fais :) 
if (!$fp) { echo "OK"; }
Donc c'est OK si la connexion échoue ?

:D 
m
0
l
25 Octobre 2010 09:32:33

Oh non! je suis vraiment idiot des fois ^^ Merci.

Le problème c'est que maintenant j'aimerai passer $fp a une fonction, mais je n'arrive pas à la transmettre à la fonction. C'est a chaque fois la même erreur à l'appel de la fonction :
Warning: fwrite() expects parameter 1 to be resource, null given in C:\wamp\www\test\req.php on line 4

Et à la ligne 4 il demande $fp que j'ai tenter de transmettre normalement et par référence :
normal :
function doit($cmd, $fic, $fp){...}

ref :
function doit($cmd, $fic, &$fp){...}

Une solution pour ce problème également? ^^
m
0
l
Contenus similaires
a c 145 L Programmation
25 Octobre 2010 09:37:13

Heu, je pourrais voir ce qu'est ce fwrite() qui fait un souci ?
Ou pourquoi pas tout le code, ça m'aidera.
m
0
l
25 Octobre 2010 09:39:58

Voila ce qu'il se passe dans l'ordre, je t'ai épargner le superflus autour :
  1. function doit($cmd, $fic, &$fp)
  2. {
  3. fwrite($fp, $cmd."\r\n");
  4. fputs($fic, ">".$cmd."\n");
  5. receipt($fic, $fp);
  6. }
  7.  
  8. {...}
  9.  
  10. $fp = fsockopen($link, $port);
  11.  
  12. {...}
  13.  
  14. doit($cmd, $fic, $fp);
m
0
l
a c 145 L Programmation
25 Octobre 2010 10:09:44

J'ai un doute sur l'utilisation de fwrite() plutôt que de fputs() avec ta connexion telnet.
Et es-tu sûr que $fp n'est pas fermé quand tu appelles doit() ?
m
0
l
25 Octobre 2010 10:29:31

Je n'ai mis aucun close pour être sur justement. Je te met tout le code avec certaine parties retirées qui ne sont que du HTML :

  1. <?php
  2. function doit($cmd, $fic, &$fp)
  3. {
  4. fwrite($fp, $cmd."\r\n");
  5. fputs($fic, ">".$cmd."\n");
  6. receipt($fic, $fp);
  7. }
  8.  
  9. function receipt($fic, &$fp)
  10. {
  11. stream_set_timeout($fp, 0, 250000); // en microsecondes, dépend de votre équipement
  12. $i = 1;
  13. while ($i<50) //nb max de lignes à récupérer
  14. {
  15. $i++;
  16. $line = fgets($fp);//$line = fgets($fp, 1024);
  17. fputs($fic, $line."\n");
  18. if (preg_match('!--More--!i', $line))
  19. {
  20. fwrite($fp, "\r\n"); // Afficher la page suivante (Detection des --More--) }
  21. $info = stream_get_meta_data($fp);
  22. if($info['timed_out'])
  23. {
  24. echo 'Délai de connexion dépassé';
  25. }
  26. }
  27. }
  28. }
  29.  
  30. if(!isset($_GET['act']))//Si c'est la premiere ouverture de la page
  31. {
  32. if(file_exists('prompt.txt'))//Supression de l'ancien log
  33. {
  34. unlink("prompt.txt");
  35. }
  36. $fic = fopen('prompt.txt', 'a+');
  37. if($fic)
  38. {
  39. fputs($fic, "Connexion...");
  40.  
  41. $link = 'MONADRESSE';
  42. $port = 23;
  43. $fp = fsockopen($link, $port);
  44. sleep(2);
  45. if($fp)
  46. {
  47. fputs($fic, " OK\n");
  48. fseek($fic, 0);
  49. }
  50. }
  51. }else
  52. {
  53. $fic = fopen('prompt.txt', 'a+');
  54. $cmd = $_POST['cmd'];
  55.  
  56. doit($cmd, $fic, $fp);
  57.  
  58. fseek($fic, 0);
  59. }
  60. ?>
  61. <html>
  62. {...}
  63. <body>
  64.  
  65. <form method="post" action="req.php?act=1">
  66. <table width="100%" border="1" cellspacing="1" cellpadding="1">
  67. <tr><td width="98%" align="center">
  68. <textarea name="prompt" rows="30" cols="150" id="prompt">
  69. <?php
  70. while(!feof($fic))
  71. {
  72. $ligne = fgets($fic);
  73. echo $ligne;
  74. }
  75. ?>
  76. </textarea>
  77. </td></tr>
  78. <tr><td width="98%">Command ><input type="text" size="90" name="cmd" id="cmd" /><input type="submit" value="Go!" /></td></tr>
  79. </table>
  80. </form>
  81.  
  82. {...}
  83.  
  84. </body>
  85. </html>


encore merci :) 
m
0
l
25 Octobre 2010 10:49:47

J'ai trouver le probleme, c'etait une fois de plus evident : le $fp se ferme au rechargement de la page. Je sais pas comment je n'ai pas pu y penser avant.... xD

Aurais tu en revanche une solution pour que je puisse faire ce que je veux?
Qui serait en gros :
- connecter
- récupérer la réponse
- envoyer une commande
- récupérer la réponse
- ...
m
0
l
a c 145 L Programmation
25 Octobre 2010 10:53:33

Heu, j'ai un énorme doute là...
Tu n'ouvres le socket que lors du premier chargement de la page ?
Ce qui veut dire que chaque fois que tu soumets ton formulaire, ta connexion n'est plus établie (si je ne me trompe pas)

[edit] Tu as vu ta bétise :)  J'essaye de retrouver un script de ce genre.
m
0
l
25 Octobre 2010 11:07:38

Merci bien, je vais regarder ça en détail
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS