php获取本机mac地址三种方法

 更新时间:2016年11月25日 15:54  点击:1841
 代码如下 复制代码

class getmacaddr
{
        var $return_array = array(); // 返回带有mac地址的字串数组
        var $mac_addr;
       
        function getmacaddr($os_type)
        {
                switch ( strtolower($os_type) )
                {
                        case "linux":
                                $this->forlinux();
                                break;
                        case "solaris":
                                break;
                        case "unix":
                                break;
                        case "aix":
                                break;
                        default:
                                $this->forwindows();
                                break;
                }
               
                $temp_array = array();
                foreach ( $this->return_array as $value )
                {
                        if ( preg_match( "/[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f]/i", $value, $temp_array ) )
                        {
                                $this->mac_addr = $temp_array[0];
                                break;
                        }
                }
                unset($temp_array);
                return $this->mac_addr;
        }

        function forwindows()
        {
                @exec("ipconfig /all", $this->return_array);
                if ( $this->return_array )
                        return $this->return_array;
                else{
                        $ipconfig = $_server["windir"]."system32ipconfig.exe";
                        if ( is_file($ipconfig) )
                                @exec($ipconfig." /all", $this->return_array);
                        else
                                @exec($_server["windir"]."systemipconfig.exe /all", $this->return_array);
                        return $this->return_array;
                }
        }

        function forlinux()
        {
                @exec("ifconfig -a", $this->return_array);
                return $this->return_array;
        }
}
?>
<?
$mac = new getmacaddr(php_os);
echo $mac->mac_addr;

//方法二

 代码如下 复制代码

qstring getlocalmac()

  {

  int sock_mac;

  struct ifreq ifr_mac;

  char mac_addr[30];

  sock_mac = socket( af_inet, sock_stream, 0 );

  if( sock_mac == -1)

  {

  perror("create socket falise...mac ");

  return "";

  }

  memset(&ifr_mac,0,sizeof(ifr_mac));

  strncpy(ifr_mac.ifr_name, "eth0", sizeof(ifr_mac.ifr_name)-1);

  if( (ioctl( sock_mac, siocgifhwaddr, &ifr_mac)) < 0)

  {

  printf("mac ioctl error ");

  return "";

  }

  sprintf(mac_addr,"%02x%02x%02x%02x%02x%02x",

  (unsigned char)ifr_mac.ifr_hwaddr.sa_data[0],

  (unsigned char)ifr_mac.ifr_hwaddr.sa_data[1],

  (unsigned char)ifr_mac.ifr_hwaddr.sa_data[2],

  (unsigned char)ifr_mac.ifr_hwaddr.sa_data[3],

  (unsigned char)ifr_mac.ifr_hwaddr.sa_data[4],

  (unsigned char)ifr_mac.ifr_hwaddr.sa_data[5]);

  printf("local mac:%s ",mac_addr);

  close( sock_mac );

  return qstring( mac_addr );

  }

//用c实现的

 代码如下 复制代码

int getalllocaladaptermacaddr(std::list<std::vector<unsigned char> >& mac)

{

    ncb ncb;

    lana_enum adapterlist;

 

    memset(&ncb, 0, sizeof(ncb));

    ncb.ncb_command = ncbenum;

    ncb.ncb_buffer = (unsigned char *)&adapterlist;

    ncb.ncb_length = sizeof(adapterlist);

    netbios(&ncb);

 

    mac.resize(0);

 

    for (int i = 0; i < adapterlist.length ; ++i )

    {

        struct astat

        {

            adapter_status adapt;

            name_buffer    ps教程z_name[30];

        } adapter;

                  

        // reset the lan adapter so that we can begin querying it

        ncb ncb;

        memset( &ncb, 0, sizeof (ncb));

        ncb.ncb_command  = ncbreset;

        ncb.ncb_lana_num = adapterlist.lana[i];

                  

        if (netbios(&ncb) != nrc_goodret)

            continue;

                  

        // prepare to get the adapter status block

        memset(&ncb, 0, sizeof(ncb)) ;

        ncb.ncb_command = ncbastat;

        ncb.ncb_lana_num = adapterlist.lana[ i ];

        strcpy((char *)ncb.ncb_callname, "*" );

                 

        memset(&adapter, 0, sizeof (adapter));

        ncb.ncb_buffer = (unsigned char *)&adapter;

        ncb.ncb_length = sizeof (adapter);

                 

        // get the adapter's info and, if this works, return it in standard,

        // colon-delimited form.

        if ( netbios( &ncb ) == 0 )

        {

            std::vector<unsigned char> v6;

            v6.resize(6);

            for (int i=0; i<6; i++)

                v6[i] = adapter.adapt.adapter_address[i];

            if (v6[0] == 0)

            {

                std::list<std::vector<unsigned char> >::iterator i = mac.begin();

                for (; i!=mac.end(); i++) if (*i == v6)

                    break;

                if (i==mac.end())

                    mac.push_back(v6);

            }

        }

        else

            break;

    }

    return 0;

}

本教程提供几款获取IP地址的代码,各有各的优点,这里获取用户ip 是利用php的全局变量实现的,下面来看看有没有你要找的。

//最简单的方法

 代码如下 复制代码
$ip = $_server["remote_addr"];
echo $ip;

//最实用获取用户ip地址代码

 代码如下 复制代码
function get_real_ip()  {        
$ip=false;        
if(!empty($_server["http_client_ip"]))        
{             
$ip = $_server["http_client_ip"];       
 }        
 if (!empty($_server['http_x_forwarded_for']))       
  {            
   $ips教程 = explode (", ", $_server['http_x_forwarded_for']);            
    if ($ip)              {
             array_unshift($ips, $ip);
    $ip = false;            
     }        
      for ($i = 0; $i < count($ips); $i++)  
       {         
        if (!eregi ("^(10|172.16|192.168).", $ips[$i]))
      {      
       $ip = $ips[$i]; 
        break;  
         } 
     } 
     }
     return ($ip ? $ip : $_server['remote_addr']); 
     } 
     echo get_real_ip();

//获取ip地址与端口号

 代码如下 复制代码
$ip =$_server["remote_addr"];
$port = $_server['remote_port'];
echo $ip.$port;

//有一点意思

 代码如下 复制代码
if(getenv('http_client_ip'))
{
        $onlineip = getenv('http_client_ip');
}
elseif(getenv('http_x_forwarded_for'))
{
        $onlineip = getenv('http_x_forwarded_for');
}
elseif(getenv('remote_addr'))
{
        $onlineip = getenv('remote_addr');
}
else
{
        $onlineip = $http_server_vars['remote_addr'];
}
echo $onlineip;
echo "
";

//利用qq接口

 代码如下 复制代码
function get_ip_place(){
$ip=file_get_contents("http://fw.qq.com/ipaddress");
$ip=str_replace('"',' ',$ip);
$ip2=explode("(",$ip);
$a=substr($ip2[1],0,-2);
$b=explode(",",$a);
return $b;
}
$ip=get_ip_place();
print_r($ip);

 

下面这款匹配中文字符串正则表达式是一款利用数组,然后 多次for把全是中文字符串的打印出来。

 

 代码如下 复制代码

$str_arr = array(
"iameverysorry",
"快乐编程,快乐生活",
"php教程编程",
"1997年香港回归",
"英语学习abc",
"www.111cn.net"
);

$patt_ch = chr(0xa1) . "-" . chr(0xff);

foreach ($str_arr as $str)
{
    echo "字符串'$str' 是";
    if (preg_match("/^[$patt_ch]+$/", $str))
    {
        echo "<b>完全中文</b>";
        echo "<br>";
        echo "<br>";
    }
    else
    {
        echo "非完全中文";
        echo "<br>";
        echo "<br>";
    }
}

/*
字符串'iameverysorry' 是非完全中文

字符串'快乐编程,快乐生活' 是完全中文

字符串'php编程' 是非完全中文

字符串'1997年香港回归' 是非完全中文

字符串'英语学习abc' 是非完全中文

字符串'123456789' 是非完全中文
*/

这里讲的是列出目录下所有文件以及显示的排序方法,根据文件名来进行排序哦
 代码如下 复制代码

$dir = "d: iles";

$file_list1 = scandir($dir);
//向函数scandir传入第2个参数,如果第2个参数为1,表示按字母降序排列文件名
$file_list2 = scandir($dir,1);

echo "<pre>";
print_r($file_list1);
print_r($file_list2);

//改变目录

 代码如下 复制代码

echo "php当前的工作目录:";

echo "<br/>";
echo getcwd();
echo "<br/>";

chdir("dir_test");  //改变工作目录至当前目录的dir_test目录下

echo "<br/>";
echo "改变工作目录后,工作目录变为:";
echo "<br/>";

echo getcwd();

这是一款简单的php 文件上传简单实例应用哦,适合入门者学习与理解文件上传的原理。

<html>
<head><title>php 文件上传简单实例应用</title></head>
<body>

 代码如下 复制代码

<!-- 表单的enctype属性必须指定为multipart/form-data -->
<form enctype="multipart/form-data" action="3.php" method="post">
    上传此文件: <input name="myfile" type="file" />
    <input type="submit" value="提交上传" />
</form>

</body>
</html>

3.php文件

 代码如下 复制代码

<?php
//将文件移至服务器的根目录的upload目录下,upload事先得建立好
$upload_path = $_server['document_root']."/upload/";
$dest_file = $upload_path.basename($_files['myfile']['name']);

if(move_uploaded_file($_files['myfile']['tmp_name'],$dest_file))
{
 echo "文件已上传至服务器根目录的upload目录下";
}
else
{
 echo "文件上传时发生了一个错误".$_files['myfile']['error']; 
}
?>

 

[!--infotagslink--]

相关文章

  • PHP成员变量获取对比(类成员变量)

    下面本文章来给大家介绍在php中成员变量的一些对比了,文章举了四个例子在这例子中分别对不同成员变量进行测试与获取操作,下面一起来看看。 有如下4个代码示例,你认...2016-11-25
  • php 中file_get_contents超时问题的解决方法

    file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25
  • php抓取网站图片并保存的实现方法

    php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
  • php 获取用户IP与IE信息程序

    php 获取用户IP与IE信息程序 function onlineip() { global $_SERVER; if(getenv('HTTP_CLIENT_IP')) { $onlineip = getenv('HTTP_CLIENT_IP');...2016-11-25
  • php获取一个文件夹的mtime的程序

    php获取一个文件夹的mtime的程序了,这个就是时间问题了,对于这个问题我们来看小编整理的几个例子,具体的操作例子如下所示。 php很容易获取到一个文件夹的mtime,可以...2016-11-25
  • HTTP 408错误是什么 HTTP 408错误解决方法

    相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • ps把文字背景变透明的操作方法

    ps软件是现在非常受大家喜欢的一款软件,有着非常不错的使用功能。这次文章就给大家介绍下ps把文字背景变透明的操作方法,喜欢的一起来看看。 1、使用Photoshop软件...2017-07-06
  • 如何获取网站icon有哪些可行的方法

    获取网站icon,常用最简单的方法就是通过website/favicon.ico来获取,不过由于很多网站都是在页面里面设置favicon,所以此方法很多情况都不可用。 更好的办法是通过google提供的服务来实现:http://www.google.com/s2/favi...2014-06-07
  • intellij idea快速查看当前类中的所有方法(推荐)

    这篇文章主要介绍了intellij idea快速查看当前类中的所有方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02
  • Mysql select语句设置默认值的方法

    1.在没有设置默认值的情况下: 复制代码 代码如下:SELECT userinfo.id, user_name, role, adm_regionid, region_name , create_timeFROM userinfoLEFT JOIN region ON userinfo.adm_regionid = region.id 结果:...2014-05-31
  • js导出table数据到excel即导出为EXCEL文档的方法

    复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ht...2013-10-13
  • mysql 批量更新与批量更新多条记录的不同值实现方法

    批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
  • jquery如何获取元素的滚动条高度等实现代码

    主要功能:获取浏览器显示区域(可视区域)的高度 : $(window).height(); 获取浏览器显示区域(可视区域)的宽度 :$(window).width(); 获取页面的文档高度 $(document).height(); 获取页面的文档宽度 :$(document).width();...2015-10-21
  • ps怎么制作倒影 ps设计倒影的方法

    ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果&#819...2017-07-06
  • js基础知识(公有方法、私有方法、特权方法)

    本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
  • 安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法

    手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21
  • PHP 验证码不显示只有一个小红叉的解决方法

    最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
  • c#中分割字符串的几种方法

    单个字符分割 string s="abcdeabcdeabcde"; string[] sArray=s.Split('c'); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab de...2020-06-25
  • js控制页面控件隐藏显示的两种方法介绍

    javascript控制页面控件隐藏显示的两种方法,方法的不同之处在于控件隐藏后是否还在页面上占位 方法一: 复制代码 代码如下: document.all["panelsms"].style.visibility="hidden"; document.all["panelsms"].style.visi...2013-10-13