Page 1 sur 1

Socket quand tu nous tiens

Posté : 09 févr. 2006, 15:07
par CoiKispiCs
Bonjour la communauté :D :D

voilà j'ai un problème :lol: je pense que vous vous en doutez puisque je post dans cet endroit :) :)

voilà le code
<?
flush();

function WakeOnLan($addr, $mac)
{
 $addr_byte = explode('-', $mac);
 $hw_addr = '';

 for ($a=0; $a < 6; $a++) $hw_addr .= chr(hexdec($addr_byte[$a]));

 $msg = chr(255).chr(255).chr(255).chr(255).chr(255).chr(255);

 for ($a = 1; $a <= 16; $a++)    $msg .= $hw_addr;

 // send it to the broadcast address using UDP
 // SQL_BROADCAST option isn't help!!
 $s = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
 if ($s == false)
 {
  echo "Error creating socket!\n";
  echo "Error code is '".socket_last_error($s)."' - " . socket_strerror(socket_last_error($s));
 }
 else
 {
 // setting a broadcast option to socket:
  $opt_ret =  socket_set_option($s, 1, 6, TRUE);
  if($opt_ret < 0)
  {
   echo "setsockopt() failed, error: " . strerror($opt_ret) . "\n";
  }
  $e = socket_sendto($s, $msg, strlen($msg), 0, $addr, 2050);
  socket_close($s);
  echo "Magic Packet sent (".$e.") to ".$addr.", MAC=".$mac;
 }
}
$bdd=mysql_connect("localhost","root","");
mysql_select_db("plop",$bdd);

$requete = "SELECT IP FROM postes WHERE NAME =\"".$_POST['pc']."\" GROUP BY IP";
$result = mysql_query ($requete);
while ($ress = mysql_fetch_array($result)) {
	$adrip = $ress['IP'];
}

$req = "SELECT MAC FROM postes WHERE NAME =\"".$_POST['pc']."\" GROUP BY MAC";
$res = mysql_query ($req);
while ($re = mysql_fetch_array($res)) {
	$adrmac = $re['MAC'];
}

WakeOnLan($adrip, $adrmac)
?>
et voici l'erreur :

Code : Tout sélectionner

Warning: socket_set_option() [function.socket-set-option]: unable to set socket option [0]: Un argument non valide a été fourni. in D:\Program Files\xampp\htdocs\plop\wol2.php on line 36 Magic Packet sent (102) to 172.16.214.3, MAC=00-30-F1-13-56-59
je vois pas du tout le probleme je buche sur ce code depuis un moment et je fais appelle a vous maintenant car j'ai le cerveau en feu :lol: :lol:


merci d'avance

:: CoiKispiCs ::

Posté : 09 févr. 2006, 15:28
par HD
Laquelle est la ligne 36?

Posté : 09 févr. 2006, 15:29
par CoiKispiCs
$opt_ret =  socket_set_option($s, 1, 6, TRUE); 
celle-ci :lol:

Posté : 09 févr. 2006, 15:44
par titerm
c'est pas très pratique de mettre les valeurs au lieu des constantes....
A forciori quand ca marche pas et que d'autre doivent regarder...

Posté : 09 févr. 2006, 15:52
par CoiKispiCs
la fonction WakeOnLan n'est pas de moi je l'ai trouvé sur php.net j'ai beau avoir regardé sous tout les sens je ne vois pas du tout ce qui ne marche pas

Posté : 09 févr. 2006, 16:36
par CoiKispiCs
c'est pas très pratique de mettre les valeurs au lieu des constantes....
A forciori quand ca marche pas et que d'autre doivent regarder...
tu avais raison il fallait mettre les constante plutot que les valeurs donc j'ai changé
$opt_ret =  socket_set_option($s, 1, 6, TRUE);
Par :
  $opt_ret =  socket_set_option($s, SOL_SOCKET, SO_REUSEADDR, TRUE);
et ça marche maintenant :D