• PHP获取客户端IP

    有时候我们需要获取客户端的IP去实现一些Web功能,比如天气预报就需要根据访客的IP去算出客户端的地理位置才能显示相应的信息

    在PHP中获取客户端的IP非常简单,主要根据$_SERVER['REMOTE_ADDR']或者$_SERVER['REMOTE_HOST']这几个变量获取

    以下代码是一个获取客户端IP的例子

    // 琼台博客 www.qttc.net
    
    function getClientIP() {
      $ipaddress = '';
      if (isset($_SERVER['HTTP_CLIENT_IP']))
        $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
      else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
      else if(isset($_SERVER['HTTP_X_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
      else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
      else if(isset($_SERVER['HTTP_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_FORWARDED'];
      else if(isset($_SERVER['REMOTE_ADDR']))
        $ipaddress = $_SERVER['REMOTE_ADDR'];
      else
        $ipaddress = 'UNKNOWN';
      return $ipaddress;
    }
    

    ...

    READ ALL

  • MySQL常用命令

    连接

    mysql -h[host] -u[user] -p[pass]

    例如

    mysql -h127.0.0.1 -uroot -p123456
    

    修改密码

    mysqladmin -u[user] -p[old pass] password [new pass]

    例如

    mysqladmin -uroot -p123456 password 654321
    

    添加用户

    grant select on [db].* to [user]@[host] identified by "[pass]"

    ...

    READ ALL

  • PHP fsockopen 用法

    在PHP中有一个函数fsockopen,它可以打开一个网络连接或者一个Unix套接字连接,看看使用方法

    resource fsockopen ( string $hostname [, int $port = -1 [, int &$errno
    [, string &$errstr [, float $timeout = ini_get("default_socket_timeout") ]]]] )

    开启

    要想使用这个函数,首先需要在php.ini配置文件中开启allow_url_open

    GET请求

    // 琼台博客 www.qttc.net
    
    // Open
    $fp = fsockopen("www.qttc.net", 80, $errno, $errstr, 30);
    
    if(!$fp){
      die($errstr);
    }
    
    set_time_limit(0);
    
    // Header
    $http = "GET / HTTP/1.1\r\n";
    $http .= "Host: www.qttc.net\r\n";
    $http .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n";
    $http .= "Connection: Close\r\n\r\n";
    
    // Send
    fwrite($fp, $http);
    
    // Response
    $out = '';
    while (!feof($fp)) {
      $out .= fgets($fp, 128);
    }
    
    echo $out;
    fclose($fp);
    

    ...

    READ ALL

  • Linux curl命令

    curl命令在Linux下可以发起HTTP请求,也可以当作文件下载工具,它不仅可以使用GET方式,也可以发起POST方式请求并且自定义请求头部,十分方便强大的HTTP请求工具

    GET

    要试用curl发起一个GET请求特别简单,直接后边跟一个URL即可

    curl [URL]

    如:

    curl https://www.qttc.net
    

    如果服务器返回是文本的话,它会直接输出内容

    POST

    curl使用POST方式请求也特别简单,格式如下:

    curl -d "{param1:value1,param2:value2}" -H "Content-Type: application/json" -X POST https://www.qttc.net
    

    ...

    READ ALL

  • PHP特定函数foreach的用法

    PHP 4 引入了foreach结构,和Perl以及其他语言很像。这只是一种遍历数组简便方法。foreach仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误。有两种语法,第二种比较次要但却是第一种的有用的扩展。

    // 琼台博客 www.qttc.net
    
    foreach (array_expression as $value)
      statement
    foreach (array_expression as $key => $value)
      statement
    

    第一种格式遍历给定的array_expression数组。每次循环中,当前单元的值被赋给 $value并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。 第二种格式做同样的事,只是除了当前单元的键名也会在每次循环中被赋给变量 $key。

    ...

    READ ALL

  • PHP测试耗时

    关于耗时

    通常对PHP程序的优化首要点就是要知道哪里是瓶颈点,查出瓶颈点是优化程序的必要条件,就好比如你要优化网站程序一样,是加载速度慢还是数据查询返回慢。所以要能掌握程序中的瓶颈点最通俗的做法就是跟踪代码,知道每一步耗时多少,然后把耗时占比最大的或者明显超出它计划耗时这几部分程序列入重点优化目标,程序运行耗时跟服务器实时环境要有关,所以即使同一台机器每次运行结果耗时可能都会与上一次有细微的差别,所以以耗时来判断程序是否是瓶颈主要都是以自我经验去判断。

    统计运行耗时

    如何知道PHP程序运行耗时多少呢?有很多工具都可以协助我们去跟踪我们的程序每一步的耗时,这里也给一个简要版本的代码

    ...

    READ ALL

  • PHP魔术方法介绍

    Prefix

    PHP把所有__开头的方法当做魔术方法,所以任何自定义的方法都不能是__开头 php提供的重载,是指动态的创建属性或方法。重载是通过魔术方法来实现的。这些魔术方法的参数不能饮用传递,__get()__set()__isset()__unset()实现类属性重载。

    __get()

    当访问类中不可访问的属性时,将调用__get()方法

    Rule

    当访问类中不可访问的属性时,根据不同的情况会调用__get()__set()__isset()__unset(),其中当访问属性时,使用函数isset()empty()时,将调用__isset()方法,使用unset()函数时,将调用__unset()方法。

    ...

    READ ALL

  • CentOS网络配置

    修改IP地址

    修改对应网卡的IP地址的配置文件 vi /etc/sysconfig/network-scripts/ifcfg-eth0 修改以下内容

    DEVICE=eth0 #描述网卡对应的设备别名,例如ifcfg-eth0的文件中它为eth0
    BOOTPROTO=static #设置网卡获得ip地址的方式,可能的选项为static,dhcp或bootp,分别对应静态指定的 ip地址,通过dhcp协议获得的ip地址,通过bootp协议获得的ip地址
    BROADCAST=192.168.0.255 #对应的子网广播地址
    HWADDR=00:07:E9:05:E8:B4 #对应的网卡物理地址
    IPADDR=12.168.1.2 #如果设置网卡获得 ip地址的方式为静态指定,此字段就指定了网卡对应的ip地址
    IPV6INIT=no
    IPV6_AUTOCONF=no
    NETMASK=255.255.255.0 #网卡对应的网络掩码
    NETWORK=192.168.1.0 #网卡对应的网络地址
    ONBOOT=yes #系统启动时是否设置此网络接口,设置为yes时,系统启动时激活此设备
    

    ...

    READ ALL

  • MySQL取出随机文章的方法

    随机文章是最常见的应用了,可能看起来比较容易,但实际中还是要回掌握正确的方法会让你省去许多代码量。如果你要随机取出数据库里的文章,有以下三种做法。

    用PHP算出随机ID

    先求得最大ID,然后写一个函数从1到最大ID之间随机取出N个不重复的,然后到数据里取出来,这种方式的前提是你的文章ID要连续。

    取出所有文章ID从中选择

    也是用PHP先从数据库里取出所有文章ID,然后使用PHP的shuffle()函数打乱数组,再取数组的前N个元素达到随机效果。这种比较麻烦,需要先取出ID,然后打乱然后再到数据库里取信息,不推荐。

    使用MySQL函数RAND()

    这个函数跟JS的一样可以产生0到1之间的随机数,但巧妙利用就可以实现取出随机文章的效果。

    ...

    READ ALL

  • JavaScript写的一个随机点名程序

    这个其实是对JavaScript的Math.random函数一个练习方式,先把所有人得名字预先写好在一个数组里,然后让数组里的值快速的显示在区域内,当你按停的时候滚动就会停止达到随机效果。

    DEMO

    思路

    • 定义一个名字数组,作为资源池
    • 有一个每隔20毫秒就随机从资源池里随机获取一个显示在页面上
    • 手动停止后,最后显示在页面上的名字就是随机出来的名字

    Code

    // 琼台博客 www.qttc.net
    
    var isRun = true;
    var a = ["张三", "李四", "王五", "赵六"];
    var a2 = new Array();
    function action (str) {
    var s = document.getElementById("bt").value;
      if(s === "开始"){
        isRun = true;
        run();
        document.getElementById("bt").value = "结束";
      }else{
        isRun = false;
        document.getElementById("bt").value = "开始";
      }
    }
    function run () {
      var i = Math.floor(Math.random() * a.length + 1) - 1;
      document.getElementById("show").innerHTML = a[i];
      if (isRun === false) {
        var b = true;
        for (var j in a2) {
          if (a2[j] === i) {
            b = false;
          }
        }
        if (b) {
          a2[a2.length] = i;
          return;
        }
      }
      setTimeout("run()", 20);
    }
    

    ...

    READ ALL