首页 开发编程 正文

php怎么记录ip

php//返回当前IP的城市字符串functionconvertip($ip){//IP数据文件路径$dat_path='QQWry.Dat';$fd=@fopen($dat_path;//获取IP数据索引开始和结束位置$DataBegin=fread($fd;$EndNum=$ipAllNum;$ipNum||$ip2num<...

php怎么记录ip,网站如何实现自动根据IP跳转到当地地址?

PW自身就有根据IP判断所属地区的功能,只要经常更新IP库就没什么问题.至于根据归属地跳转到相应页面就需要你自己去写了。网上帮你找了一个,看是否合适。

。<?php

//返回当前IP的城市字符串

function convertip($ip) {

//IP数据文件路径

$dat_path = 'QQWry.Dat';

//检查IP地址

if(!preg_match("/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/", $ip)) {

return 'IP Address Error';

}

//打开IP数据文件

if(!$fd = @fopen($dat_path, 'rb')){

return 'IP date file not exists or access denied';

}

//分解IP进行运算,得出整形数

$ip = explode('.', $ip);

$ipNum = $ip[0] * 16777216 + $ip[1] * 65536 + $ip[2] * 256 + $ip[3];

//获取IP数据索引开始和结束位置

$DataBegin = fread($fd, 4);

$DataEnd = fread($fd, 4);

$ipbegin = implode('', unpack('L', $DataBegin));

if($ipbegin < 0) $ipbegin += pow(2, 32);

$ipend = implode('', unpack('L', $DataEnd));

if($ipend < 0) $ipend += pow(2, 32);

$ipAllNum = ($ipend $ipbegin) / 7 + 1;

$BeginNum = 0;

$EndNum = $ipAllNum;

//使用二分查找法从索引记录中搜索匹配的IP记录

while($ip1num>$ipNum || $ip2num<$ipNum) {

$Middle= intval(($EndNum + $BeginNum) / 2);

//偏移指针到索引位置读取4个字节

fseek($fd, $ipbegin + 7 * $Middle);

$ipData1 = fread($fd, 4);

if(strlen($ipData1) < 4) {

fclose($fd);

return 'System Error';

}

//提取出来的数据转换成长整形,如果数据是负数则加上2的32次幂

$ip1num = implode('', unpack('L', $ipData1));

if($ip1num < 0) $ip1num += pow(2, 32);

//提取的长整型数大于我们IP地址则修改结束位置进行下一次循环

if($ip1num > $ipNum) {

$EndNum = $Middle;

continue;

}

//取完上一个索引后取下一个索引

$DataSeek = fread($fd, 3);

if(strlen($DataSeek) < 3) {

fclose($fd);

return 'System Error';

}

$DataSeek = implode('', unpack('L', $DataSeek.chr(0)));

fseek($fd, $DataSeek);

$ipData2 = fread($fd, 4);

if(s

服务器linux环境运行php?

以centos7为例,模式为lnmp。(使用root用户登录)

更新阿里云yum源

1、进入源目录

# cd /etc/

yum.repos.d/

2、备份原repo文件

# for name in `ls`; do mv $name ${name}.bak ; done

3、下载阿里云yum源

# curl

http://mirrors.aliyun.com/repo/Centos-7.repo > Centos-7.repo

4、清理并生成缓存并安装epel

nginx安装

1、安装pcre,可以支持rewrite功能。

# yum install pcre*

2、安装openssl,可以支持ssl功能

# yum install openssl*

3、从官网下载稳定版,此时是1.16.1,然后解压(如果没有wget ,请执行yum install wget)

# cd /usr/local/src

# wget http://nginx.org/download/nginx-1.16.1.tar.gz

# tar -zxvf nginx-

1.16.1.tar.gz

# cd nginx-1.16.1

4、安装软件三板斧(./configure , make , make install)。

# ./configure --prefix=/usr/local/nginx-1.16.1 --with-http_ssl_module --with-http_v2_module --with-http_stub_status_module --with-pcre

# make

# make install

5、centos7防火墙打开http, https

# firewall-cmd --zone=public --add-service=http --permanent

# firewall-cmd --zone=public --add-service=https --permanent

# firewall-cmd --reload

6、启动nginx

# /usr/local/nginx-1.16.1/sbin/nginx

当通过你系统的IP地址访问出现如下画面,则安装成功

关闭nginx:

# /usr/local/nginx-1.16.1/sbin/nginx -s stop

当改变了nginx.conf后,要重置:

# /usr/local/nginx-1.16.1/sbin/nginx -s reload

安装php和php-fpm

1、安装php7,这里选择php70w,需更新webtatic源

# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

# yum install php70w

2、安装php扩展,这里以xml扩展示例,你也可以使用yum list php70w*查看所有扩展。

#yum install php70w-xml

3、查看安装结果

#php -v (查看版本)

#php -m (查看扩展)

4、安装php-fpm,(这个与nginx一起使用来解析PHP脚本的)

#yum install php70w-fpm

5、启动php-fpm,并加入开机启动

# systemctl start php-fpm

# systemctl enable php-fpm

6、新建www用户

# useradd www -s /sbin/nologin

7、修改nginx.conf,加入php解析

第2行

第45行

第65-71行改成如下图所示:

8、将html目录所有者改为www,并将权限改为755

# chown -Rf www:www /usr/local/nginx-1.16.1/html

# chmod -Rf 755 /usr/local/nginx-1.16.1/html

9、重启nginx看到如下结果,即配置成功

# /usr/local/nginx-1.16.1/sbin/nginx -s reload

SaspaspnetPHPSQL2000?

AD是域控制器,DHCP是动态分配服务器、DNS是域名服务器、IIS是系统组件、Web网站服务器、Email是邮件服务器、MySQL是数据库。

一次完整的http请求过程是怎样的?

面试中常问的一个问题就是:在浏览器输入 URL 地址回车后,发生了什么?这里简单概述一下。

总体流程图如下:

1. URL 解析

浏览器首先对 URL 解析,解析出协议、域名、端口、资源路径、参数等。

2. DNS 域名解析

一般而言,域名比 IP 地址更好记,因而我们更习惯在浏览器输入域名而不是 IP,而计算机网络通信所识别的计算机标识是 IP 地址,因而首先需要将一个域名转化为相应的 IP 地址,这就是 DNS 协议所要做的事。

DNS 就像我们手机中的通讯录一样,通讯录中备注的是对方的姓名(类似于域名),但是打电话的时候实际需要的是电话号码(类似于 IP 地址),利用通讯录将一个姓名转化为对应的电话号码。

3. 建立 TCP 连接

一般在浏览器输入 URL,应用层的协议为 HTTP/HTTPS,其需要的是可靠的服务,所使用的传输层协议为 TCP。

通过域名解析后,浏览器获得了服务器的 IP,则向服务器发起 TCP 连接,这时候就会发生三次握手行为。

4. 发送 HTTP 请求

当浏览器与服务器建立连接后,就可以进行数据通信过程,浏览器会给服务器发送一个 HTTP 请求报文,请求报文包括请求行、请求头、请求空行和请求体。在请求行中会指定方法、资源路径以及 HTTP 版本,其中资源路径是指定所要操作资源在服务器中的位置,而方法是指定要对这个资源做什么样的操作。

从浏览器输入 URL,资源路径在第一步就已经被解析出来了,而方法为 GET,表明要获取资源,相当于增删改查中的查询。

5. 服务器对请求进行处理并做出响应

当收到浏览器发送的请求报文后,服务器会对此请求报文进行相应的处理,并返回响应报文给浏览器。比如请求报文想要获取(GET) index.html 这个文件,那么服务器就会找到 index.html 文件,然后将此文件作为响应报文中的响应体发送给浏览器。

响应报文包括响应行、响应头、响应空行和响应体。在响应行中会指定 HTTP 版本、状态码和对状态码的解释信息,比如 HTTP/1.1 200 OK ,其中 200 是响应码,指请求被正常处理,也就是成功 OK 的意思。

6. 浏览器解析渲染页面

浏览器收到服务器的响应报文后,从响应体中得到相应资源,如 HTML 文件、图片、视频等,并进行渲染,然后将结果呈现给用户。

7. 断开 TCP 连接

当数据完成请求到返回的过程之后,根据请求/相应头中 Connection 的 Keep-Alive 属性可以选择是否断开 TCP 连接,如果不需要再进行数据通信,即可以关闭连接,此时则会发生四次挥手行为。

注意:

浏览器为了提升性能,在 URL 解析之后,实际会先查询是否有缓存,如果缓存命中,则直接返回缓存资源。如果是 HTTPS 协议,在建立 TCP 连接之后,还需要进行 SSL/TLS 握手过程,以协商出一个会话密钥,用于消息加密,提升安全性。

php该怎样进阶?

对于进阶我们首先需要明白它是建立在PHP基础上而进行升华的,它不单单是高级的内容,而是我们对于PHP开发程序原理的深入理解,再到对网站的性能优化、微服务、网站架构、高并发问题解决方案、团队管理等一系列学习内容。

在不同的时期进阶学习的内容也不一样,所以需要把握当下的基础,然后去针对每个时期应该学习和具备的内容,一步一步的进阶上去,这样才是稳扎稳打的。就像一套军体拳,打出该有的作用就可以,而不是一味的去注重华丽的动作。

初期

在初期我们应该把PHP基础打扎实,下层基础决定上层建筑。在这个时期我们应该注重项目实战、编程思考、开发模式、实用功能开发。

需要学习:PHP基础语法、PHP扩展、面向对象、MySQL操作、linux环境编译安装(例如:lnmp、lamp)、常用框架(例如:laravel、tp)、常用设计模式、PSR开发规范、项目封装等

中期

在这个阶段我们应该开始注重项目开发后的性能,对开发过程的原理分析,对于网络编程要开始学习准备了。自己可尝试重构代码。开发自己需要的组件功能

需要学习:框架的底层原理、缓存数据库的操作Memcache,Redis,Mongodb)、MySQL优化、PHP底层原理实现机制、服务器优化、网络模型、io模型、集群搭建、主从复制与读写分离等

后期

在这个时期,基本上你的技术能力都已经具备的很充分,这个时期我们应该从项目网站的整体架构和公司的业务线,以及人员管理、自身领导力入手。这个时期更加注重管理和规划的能力。

需要学习:微服务的架构设计,高并发的解决方案。项目网站的技术选项、团队人员协调、团队问题解决等。

综上,需要把握每个时期的核心关键要求,切记不要太过的去分散精力,这样你是具备可持续发展的

觉得有感悟,欢迎关注额。(* ̄︶ ̄)

本文转载自互联网,如有侵权,联系删除