小左闲谈

【摘】PHP Socket编程 之使用fsockopen()函数

当前位置:首页 » PHP
In 学习  @2017-11-07

Socket可以理解为两台计算机相互通信的通道。

用法:使用fsockopen()函数

具体用法详见上篇文章。函数的参数为URL、端口号、一个存放错误编号的变量、一个存放错误信息字符串的变量和超时等待时间。(只有第一个参数是必须的)

常见的端口:

21(FTP)
22(SSH)
23(Telnet)
25(SMTP)
80(Web)
110(POP)
3306(MySql)

其中,组成URl的几个部分为:协议名scheme,主机host,端口号port,文件路径path,查询参数query

当url是http://www.example.com/view.php?week=1#demo时:

Scheme:http
Host:www.example.com
Port:80
Path:View
Query:Week=1
Fragment:#demo

常见的HTTP状态码:

200:OK
204:NO Content
400:Bad Request
401:Unauthorized
403:Forbidden
404:Not Found
408:Time out
5**:Server error

示例

<?PHP  
       function check_url($url){  
              //解析url  
              $url_pieces = parse_url($url);  
              //设置正确的路径和端口号  
              $path =(isset($url_pieces['path']))?$url_pieces['path']:'/';  
              $port =(isset($url_pieces['port']))?$url_pieces['port']:'80';  
              //用fsockopen()尝试连接  
              if($fp =fsockopen($url_pieces['host'],$port,$errno,$errstr,30)){  
                     //建立成功后,向服务器写入数据  
                     $send = "HEAD $path HTTP/1.1\r\n";  
                     $send .= "HOST:$url_pieces['host']\r\n";  
                     $send .= "CONNECTION: CLOSE\r\n\r\n";  
                     fwrite($fp,$send);  
                     //检索HTTP状态码  
                     $data = fgets($fp,128);  
                     //关闭连接  
                     fclose($fp);  
                     //返回状态码和类信息  
                     list($response,$code) = explode(' ',$data);  
                     if(code == 200){  
                            return array($code,'good');  
                     }else{  
                            return array($code,'bad');//数组第二个元素作为css类名  
                     }  
              }else{  
                     //没有连接  
                     return array($errstr,'bad');  
              }  

       }  
       //创建URL列表  
       $urls = array(  
              'http://www.sdust.com',  
              'http://www.example.com'  
       )  
       //调整PHP脚本的时间限制:  
       set_time_limit(0);//无限长时间完成任务  
       //逐个验证url:  
       foreach($urls as $url){  
              list($code,$class) = check_url($url);  
              echo "<p><a href =\"$url\">$url</a>(<span class =\"$class\">$code</span>)</p>";  

       }  
?>

使用fsockopen()函数比fopen()函数的优点:
fopen()只会在PHP中已经将allow_url_fopen设置为真时才能使用,而fsockopen()并没有限制。

本文摘自:http://www.cnblogs.com/baocheng/p/5902560.html

标签: , ,   评论: 抢沙发 

PHP对二维数组按照某个字段的值进行排序的两种方法

当前位置:首页 » PHP
In 笔记  @2017-01-11

用PHP对二维数组进行排序:
第一种方法:遍历生成新数组用array_multisort()方法排序;

/**
 * 二维数组的排序
 * @param  array  $arr       需要排序的二维数组
 * @param  string $field     以这个数组的值来排序
 * @param  string $direction 排序规则  SORT_ASC 升序  SORT_DESC降序
 * @return array            排序后的数组
 * @author http://blog.m1910.com/
 */
function  sort_array($arr, $field, $direction = 'SORT_DESC'){ 
    $arrSort = array();  
    foreach($arr AS $uniqid => $row){  
        foreach($row AS $key=>$value){  
            $arrSort[$key][$uniqid] = $value;
        }
    }
    array_multisort($arrSort[$field], constant($direction), $arr);
    return $arr;
}

第二种方法:利用usort()自定义排序进行排序

/**
 * 二维数组的排序
 * @param  array  $arr       需要排序的二维数组
 * @param  string $field     以这个数组的值来排序
 * @return array            排序后的数组
 * @author http://blog.m1910.com/
 * @备注:默认升序,需要降序把$a和$b调换位置就好了
 */
function  sort_array($arr, $field){ 
    usort( $arr, function( $a, $b ) {
        return ($a[$field] - $b[$field]);
    });
    return $arr;
}
标签: , , ,   评论: 8枚 

PHP去掉字符串中的html字符和空格及中文截取

当前位置:首页 » PHP
In 笔记  @2016-10-20

后台编辑器编辑后的数据经常带有html样式标签,前台有的地方不需要这些样式,我们的输出数据的时候就需要对数据进行一些去除html标签和空格的操作:

//去掉html标签
$str = strip_tags($str)
//去掉空格
$str = preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", "", $str);
//截取中文
$str = mb_substr($str, 0, 30, "utf-8");
标签: , ,   评论: PHP去掉字符串中的html字符和空格及中文截取已关闭评论