PHP获取HTTP状态和响应时间

本文介绍了一个PHP函数,用于获取指定URL的HTTP响应状态码及请求所花费的时间。该函数支持HTTP和HTTPS协议,并能处理常见的URL结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

function get_http_code( $url = "localhost" , $port =80, $fsock_timeout =10){
     set_time_limit(0);
     ignore_user_abort(true);
  
     // 记录开始时间
     list( $usec , $sec ) = explode ( " " , microtime(true));
     $timer [ 'start' ] = (float) $usec + (float) $sec ;
  
     // 校验URL
     if (!preg_match( "/^https?:\/\//i" , $url )){
         $url = "http://" . $url ;
     }
     // 支持HTTPS
     if (preg_match( "/^https:\/\//i" , $url )){
         $port = 443;
     }
  
     // 解析URL
     $urlinfo = parse_url ( $url );
     if ( empty ( $urlinfo [ 'path' ])){
         $urlinfo [ 'path' ] = '/' ;
     }
     $host = $urlinfo [ 'host' ];
     $uri = $urlinfo [ 'path' ] . ( empty ( $urlinfo [ 'query' ])? '' : $urlinfo [ 'query' ]);
  
     // 通过fsock打开连接
     if (! $fp = fsockopen ( $host , $port , $errno , $error , $fsock_timeout )){
         list( $usec , $sec ) = explode ( " " , microtime(true));
         $timer [ 'end' ] = (float) $usec + (float) $sec ;
         $usetime = (float) $timer [ 'end' ] - (float) $timer [ 'start' ];
  
         return array ( 'code' =>-1, 'usetime' => $usetime );
     }
  
     // 提交请求
     $status = socket_get_status( $fp );
     $out = "GET {$uri} HTTP/1.1\r\n" ;
     $out .= "Host: {$host}\r\n" ;
     $out .= "Connection: Close\r\n\r\n" ;
     $write = fwrite( $fp , $out );
     if (! $write ){
         list( $usec , $sec ) = explode ( " " , microtime(true));
         $timer [ 'end' ] = (float) $usec + (float) $sec ;
         $usetime = (float) $timer [ 'end' ] - (float) $timer [ 'start' ];
  
         return array ( 'code' =>-2, 'usetime' => $usetime );
     }
  
     $ret = fgets ( $fp , 1024);
     preg_match( "/http\/\d\.\d\s(\d+)/i" , $ret , $m );
     $code = $m [1];
     fclose( $fp );
  
     list( $usec , $sec ) = explode ( " " , microtime(true));
     $timer [ 'end' ] = (float) $usec + (float) $sec ;
     $usetime = (float) $timer [ 'end' ] - (float) $timer [ 'start' ];
  
     return array ( 'code' => $code , 'usetime' => $usetime );
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值