900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > PHP实现局域网或者广域网唤醒笔记本电脑wake on lan/wan

PHP实现局域网或者广域网唤醒笔记本电脑wake on lan/wan

时间:2022-09-17 19:52:30

相关推荐

PHP实现局域网或者广域网唤醒笔记本电脑wake on lan/wan

网上有很多APP或者EXE形式的wake on lan软件,好用,但是得下载安装个软件。

通过PHP网页版的方式则不需要安装任何软件,只要可以上网打开网页即可实现远程唤醒。

第一步:设置电脑网卡的唤醒功能,默认好像已经开启,如果没开启的必须开启

第二步:如果是局域网就不需要设置路由器的端口映射,如果是广域网则还需要设置端口映射

一般来说远程开机都是广域网应用居多吧,所以还是设置下端口(默认是9)

这步很简单,大部分的路由器都支持端口映射

第三步:把这个wol.php文件上传到你的服务器上,接下来,

只要在任意设备上访问你的这个网址(如:/api/wol.php)即可实现远程唤醒开机。

ThinkPad笔记本经测试远程唤醒开机成功

附上wol.php源码,源码来自网络:

<?php/**来源:/blog/cache/detail_1399.html* PHP - 网络唤醒(WOL)功能的实现*/class WOL{private $hostname; // 唤醒设备的url地址private $mac; // 唤醒设备的mac地址private $port; // 唤醒设备的端口private $ip;// 唤醒设备的ip地址(不是必须的,程序会自动根据$hostname来获取对应的ip)private $msg = array(0 => "Allready WakeUp.",1 => "socket_create Error",2 => "socket_set_option Error",3 => "magic packet Success!",4 => "magic packet Success!");function __construct($hostname,$mac,$port,$ip = false){$this->hostname = $hostname;$this->mac= $mac;$this->port= $port;if (!$ip){$this->ip = $this->get_ip_from_hostname();}}public function wake_on_wan(){if ($this->is_awake()){return $this->msg[0]; // 如果设备已经是唤醒的就不做其它操作了}else{$addr_byte = explode(':', $this->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;// 通过 UDP 发送数据包$s = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);if ($s == false){return $this->msg[1]; // socket_create 执行失败}$set_opt = @socket_set_option($s, 1, 6, TRUE);if ($set_opt < 0){return $this->msg[2]; // socket_set_option 执行失败}$sendto = @socket_sendto($s, $msg, strlen($msg), 0, $this->ip, $this->port);if ($sendto){socket_close($s);return $this->msg[3]; // magic packet 发送成功!}return $this->msg[4]; // magic packet 发送失败!}}private function is_awake(){$awake = @fsockopen($this->ip, 80, $errno, $errstr, 2);if ($awake){fclose($awake);}return $awake;}private function get_ip_from_hostname(){return gethostbyname($this->hostname);}}$WOL = new WOL("222.222.222.222","1A:2B:3C:4D:5E:6F","9");$status = $WOL->wake_on_wan();echo $status;?>

欢迎交流:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。