php实例,php实例化对象

http://www.itjxue.com  2023-01-05 19:42  来源:未知  点击次数: 

php实现获取局域网所有用户的电脑IP和主机名、及mac地址完整实例

本文所述php实例可以完成获取局域网所有用户的电脑IP和主机名、及mac地址的功能,对于php程序设计人员有一定的参考借鉴价值。完整代码如下:

?php

$bIp

=

gethostbyname($_ENV['COMPUTERNAME']);

//获取本机的局域网IP

echo

"本机IP:",$bIp,"\n";

echo

"本机主机名:",gethostbyaddr($bIp),"\n\n\n";

//gethostbyaddr

函数可以根据局域网IP获取主机名

//默认网关IP

list($ipd1,$ipd2,$ipd3)

=

explode('.',$bIp);

$mask

=

$ipd1

.

"."

.

$ipd2

.

"."

.

$ipd3

;

exec('arp

-a',$aIp);

//获取局域网中的其他IP

foreach(

$aIp

as

$ipv)

{

if(strpos($ipv,'接口')

!==

false)

{//一下显示的IP是否是当前局域网中的

而不是其他的类型

可以在cmd下试一下命令

$bool

=

false;

preg_match('/(?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))/',$ipv,$arr);

if(strcmp($arr[0],$bIp)

==

0)

{

$bool

=

true;

}

}

else

{

if($bool)

{

$str

=

preg_replace('/\s+/',

'|',

$ipv);

$sArr

=

explode('|',$str);

if($sArr[1]

==

'Internet'

||

empty($sArr[1]))

{

continue;

}

//去除默认网关

if(strcmp($mask

.

".1",

$sArr[1])

==

0)

{

continue;

}

//去除同网关下255的IP

if(strcmp($mask

.

".255",

$sArr[1])

==

0)

{

continue;

}

//去除组播IP

list($cIp)

=

explode('.',

$sArr[1]);

if($cIp

=

224

$cIp

=

239)

{

continue;

}

echo

"IP地址:|",$sArr[1],"|\n";

echo

"MAC地址:",$sArr[2],"\n";

echo

"主机名:",gethostbyaddr($sArr[1]),"\n";

echo

"\n\n";

}

}

}

该程序是在cli模式下运行的,在浏览器上应该也可以

php获取局域网中的用户ip功能就完成了,主要用到的是php的exec函数

和window的arp

-a

命令

其中获取本机IP:gethostbyname($_ENV['COMPUTERNAME'])

有别于以往的写法,感兴趣的朋友可以继续深入研究一下。

获取主机名函数:gethostbyaddr(IPd)

这个函数功能也很强大。

php几种排序算法实例详解

四种排序算法的PHP实现:

1)?插入排序(Insertion?Sort)的基本思想是:?

每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。

2)?选择排序(Selection?Sort)的基本思想是:?

每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。

3)?冒泡排序的基本思想是:?

两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。

4)?快速排序实质上和冒泡排序一样,都是属于交换排序的一种应用。所以基本思想和上面的冒泡排序是一样的。

1.?sort.php文件如下:

?php

class?Sort?{

??private?$arr??=?array();?

??private?$sort??=?'insert';

??private?$marker?=?'_sort';

??private?$debug?=?TRUE;

??/**

???*?构造函数

???*

???*?@param??array??例如:

???$config?=?array?(

???'arr'?=?array(22,3,41,18)?,?//需要排序的数组值

???'sort'?=?'insert',?//可能值:?insert,?select,?bubble,?quick

???'debug'?=?TRUE?//可能值:?TRUE,?FALSE

???)

???*/

??public?function?construct($config?=?array())?{

????if?(?count($config)??0)?{

??????$this-_init($config);

????}

??}

??/**

???*?获取排序结果

???*/

??public?function?display()?{

????return?$this-arr;

??}

??/**

???*?初始化

???*

???*?@param??array

???*?@return?bool

???*/

??private?function?_init($config?=?array())?{

????//参数判断

????if?(?!is_array($config)?OR?count($config)?==?0)?{

??????if?($this-debug?===?TRUE)?{

????????$this-_log("sort_init_param_invaild");

??????}

??????return?FALSE;

????}

????//初始化成员变量

????foreach?($config?as?$key?=?$val)?{

??????if?(?isset($this-$key))?{

????????$this-$key?=?$val;

??????}

????}

????//调用相应的成员方法完成排序

????$method?=?$this-sort?.?$this-marker;

????if?(?!?method_exists($this,?$method))?{

??????if?($this-debug?===?TRUE)?{

????????$this-_log("sort_method_invaild");

??????}

??????return?FALSE;

????}

????if?(?FALSE?===?($this-arr?=?$this-$method($this-arr)))

??????return?FALSE;

????return?TRUE;

??}

??/**

???*?插入排序

???*?

???*?@param??array

???*?@return?bool

???*/

??private?function?insert_sort($arr)?{

????//参数判断

????if?(?!?is_array($arr)?OR?count($arr)?==?0)?{

??????if?($this-debug?===?TRUE)?{

????????$this-_log("sort_array(insert)_invaild");

??????}

??????return?FALSE;

????}

????//具体实现

????$count?=?count($arr);

????for?($i?=?1;?$i??$count;?$i++)?{

??????$tmp?=?$arr[$i];

??????for($j?=?$i-1;?$j?=?0;?$j--)?{?

????????if($arr[$j]??$tmp)?{

??????????$arr[$j+1]?=?$arr[$j];

??????????$arr[$j]?=?$tmp;

????????}

??????}

????}

????return?$arr;

??}

??/**

???*?选择排序

???*?

???*?@param??array

???*?@return?bool

???*/

??private?function?select_sort($arr)?{

????//参数判断

????if?(?!?is_array($arr)?OR?count($arr)?==?0)?{

??????if?($this-debug?===?TRUE)?{

????????$this-_log("sort_array(select)_invaild");

??????}

??????return?FALSE;

????}

????//具体实现

????$count?=?count($arr);

????for?($i?=?0;?$i??$count-1;?$i++)?{

??????$min?=?$i;

??????for?($j?=?$i+1;?$j??$count;?$j++)?{

????????if?($arr[$min]??$arr[$j])?$min?=?$j;

??????}

??????if?($min?!=?$i)?{

????????$tmp?=?$arr[$min];

????????$arr[$min]?=?$arr[$i];

????????$arr[$i]?=?$tmp;

??????}

????}

????return?$arr;

??}

??/**

???*?冒泡排序

???*?

???*?@param??array

???*?@return?bool

???*/

??private?function?bubble_sort($arr)?{

????//参数判断

????if?(?!?is_array($arr)?OR?count($arr)?==?0)?{

??????if?($this-debug?===?TRUE)?{

????????$this-_log("sort_array(bubble)_invaild");

??????}

??????return?FALSE;

????}

????//具体实现

????$count?=?count($arr);

????for?($i?=?0;?$i??$count;?$i++)?{

??????for?($j?=?$count-1;?$j??$i;?$j--)?{

????????if?($arr[$j]??$arr[$j-1])?{

??????????$tmp?=?$arr[$j];

??????????$arr[$j]?=?$arr[$j-1];

??????????$arr[$j-1]?=?$tmp;

????????}

??????}

????}

????return?$arr;??

??}

??/**

???*?快速排序

???*?@by?

???*?@param??array

???*?@return?bool

???*/

??private?function?quick_sort($arr)?{

????//具体实现

????if?(count($arr)?=?1)?return?$arr;?

????$key?=?$arr[0];

????$left_arr?=?array();

????$right_arr?=?array();

????for?($i?=?1;?$i??count($arr);?$i++){

??????if?($arr[$i]?=?$key)

????????$left_arr[]?=?$arr[$i];

??????else

????????$right_arr[]?=?$arr[$i];

????}

????$left_arr?=?$this-quick_sort($left_arr);

????$right_arr?=?$this-quick_sort($right_arr);?

??

????return?array_merge($left_arr,?array($key),?$right_arr);

??}

??/**

???*?日志记录

???*/

??private?function?_log($msg)?{

????$msg?=?'date['?.?date('Y-m-d?H:i:s')?.?']?'?.?$msg?.?'\n';

????return?@file_put_contents('sort_err.log',?$msg,?FILE_APPEND);

??}

}

/*End?of?file?sort.php*/

/*Location?htdocs/sort.php?*/

2.?sort_demo.php文件如下:

?php

require_once('sort.php');

$config?=?array?(

??'arr'?=?array(23,?22,?41,?18,?20,?12,?200303,2200,1192)?,

??//需要排序的数组值

??'sort'?=?'select',

??//可能值:?insert,?select,?bubble,?quick

??'debug'?=?TRUE

??//可能值:?TRUE,?FALSE

);

$sort?=?new?Sort($config);

//var_dump($config['arr']);

var_dump($sort-display());

/*End?of?php*/

实现地址自动识别实例(PHP)

文章正文

址自动识别现在普遍,特别是用在快递填写地址,姓名,手机号码的时候,会把这些按照一定的规范填写后,点击自动识别后,会自动填写到各自的input。最近也简单的实现了这个功能,给后台添加用户的时候,自动识别地址。以下是效果图

具体问题具体分析!代码实现基于laravel完成。一个laravel完整的功能得具备这些:路由route,Model, View, Controller, 我这里用的有依赖注入服务容器等功能,当然,用到地址,你首先要有地址库。。。

下面来看看是如何实现的,这里我只贴出核心代码

UsersController控制器

在这里新建构造函数,实现容器的依赖注入 UsersRepository

接下来就新建地址识别的方法, $discernDel 接收的数据是从前端传过来的,后面再贴前端代码。 业务代码处理交给容器 UsersRepository 里的方法 getDiscern 处理

来看看 userRepository容器处理地址识别的各种业务代码

上面的方法处理手机,名称,和地址处理,地址处理有些繁杂,因为有时候填写的地址有不一样的,比如广西省,有些就填写广西壮族自治区,所以 getAddressArrar 方法处理地址匹配信息,根据自己的业务做调整,如下

前端html部分代码

基本上能看得懂的。jquery用到 getDiscern(); 方法,手机号码,姓名,地址等input这里就不一一列出了。大家根据下面的jquery都能想象到

jquery代码部分

ajax post后交给url: getDiscern 处理,这个就是上面controller的方法,success返回的数据后再追加到每个input里,最后再清除掉自动识别地址框的数据

整个过程简单,又清晰明了,以上就是我的代码,分享给大家,觉得哪个地方不对劲的,欢迎留言吐槽!

php实现编辑和保存文件的方法

文章主要介绍了php实现编辑和保存文件的方法,涉及php针对文件的读取、编辑和保存操作的'相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下。

本文实例讲述了php实现编辑和保存文件的方法。分享给大家供大家参考。具体如下:

save_file.php:

?php

session_start();

$handle = fopen($_POST['original_file_name'], "w");

$text = $_POST['file_contents'];

if(fwrite($handle, $text) == FALSE){

$_SESSION['error'] = 'span class="redtxt"There was an error/span';

}else{

$_SESSION['error'] = 'span class="redtxt"File edited successfully/span';

}

fclose($handle);

header("Location: ".$_POST['page']);

?

read_file.php:

!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

""

html xmlns=""

head

meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /

titleUntitled Document/title

/head

form action="savecontents.php" method="post"

textarea name="file_contents" style="width:700px;height:600px;"

?php

$fileName = "location/of/orignal/file/my_file.php";

$handle = fopen($fileName, "r");

while (!feof($handle)){

$text = fgets($handle);

echo $text;

}

?

/textarea

input type="hidden" value=" ? echo $fileName; ? " name="original_file_name" /

/form

body

/body

/html

希望本文所述对大家的php程序设计有所帮助。

PHP多态代码实例

这篇文章主要介绍了PHP多态代码实例,本文用2个代码实例来演示PHP中的多态,需要的朋友可以参考下

多态定义:只关心一个接口或者基类,而不关心一个对象的具体类。(同一类型,不同结果)

这里两个例子:

第一个,我们发现,基类定义了标准,子类进行了自我规则的实现。这是多态的一个要求。同时,这是满足重写;实际上这是不同类的不同表现;没有严格满足一个接口,或者基类编程。因为你调用的时候不是

stu-showGrade()

而是各自自己的方法;

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

class

stu{

public

function

showGrade(){

echo

base

class;

}

}

class

xiaomin

extends

stu{

public

function

showGrade(){

echo

is

son

show

80;

}

}

class

xiaoli

extends

stu{

public

function

showGrade(){

echo

is

son

show

60;

}

}

function

doit($obj){

if(get_class($obj)

!=

stu){

$obj-showGrade();

}

}

doit(new

xiaoli());

doit(new

xiaomin());

第二个例子:dovoice

参数规定了$obj

为animal,意识就是用接口

接受了

实现类对象。了向上转型。这就符合同一类型,不同结果了,这就是多态;

实际上在Java中

会是

animal

a

=

new

dog();这样子的;因为PHP

是若类型语言。没有对象转型机制。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

interface

animal{

public

function

voice();

}

class

cat

implements

animal{

public

function

voice(){

echo

miao~~~br;

}

}

class

dog

implements

animal{

public

function

voice(){

echo

wang

~~~br;

}

}

function

dovoice(animal

$obj){

$obj-voice();

}

dovoice(new

dog());

dovoice(new

cat());

php目录操作实例代码

这篇文章主要介绍了php目录操作实例代码,需要的朋友可以参考下

代码如下:

?php

/**

*

listdir

*/

header("content-type:text/html;charset=utf-8");

$dirname

=

"./final/factapplication";

function

listdir($dirname)

{

$ds

=

opendir($dirname);

while

(false

!==

($file

=

readdir($ds)))

{

$path

=

$dirname.'/'.$file;

if

($file

!=

'.'

$file

!=

'..')

{

if

(is_dir($path))

{

listdir($path);

}

else

{

echo

$file."br";

}

}

}

closedir($ds);

}

listdir($dirname);

核心:递归的经典应用,以及文件和目录的基本操作。

代码如下:

?php

/**

*

copydir

*/

$srcdir

=

"../fileupload";

$dstdir

=

"b";

function

copydir($srcdir,

$dstdir)

{

mkdir($dstdir);

$ds

=

opendir($srcdir);

while

(false

!==

($file

=

readdir($ds)))

{

$path

=

$srcdir."/".$file;

$dstpath

=

$dstdir."/".$file;

if

($file

!=

"."

$file

!=

"..")

{

if

(is_dir($path))

{

copydir($path,

$dstpath);

}

else

{

copy($path,

$dstpath);

}

}

}

closedir($ds);

}

copydir($srcdir,

$dstdir);

核心:copy函数。

代码如下:

?php

/**

*

deldir

*/

$dirname

=

'a';

function

deldir($dirname)

{

$ds

=

opendir($dirname);

while

(false

!==

($file

=

readdir($ds)))

{

$path

=

$dirname.'/'.$file;

if($file

!=

'.'

$file

!=

'..')

{

if

(is_dir($path))

{

deldir($path);

}

else

{

unlink($path);

}

}

}

closedir($ds);

return

rmdir($dirname);

}

deldir($dirname);

核心:注意unlink删除的是带path的file。

代码如下:

?php

/**

*

dirsize

*/

$dirname

=

"a";

function

dirsize($dirname)

{

static

$tot;

$ds

=

opendir($dirname);

while

(false

!==

($file

=

readdir($ds)))

{

$path

=

$dirname.'/'.$file;

if

($file

!=

'.'

$file

!=

'..')

{

if(is_dir($path))

{

dirsize($path);

}

else

{

$tot

=

$tot

+

filesize($path);

}

}

}

return

$tot;

closedir($ds);

}

echo

dirsize($dirname);

核心:通过判断$tot在哪里返回,理解递归函数。

(责任编辑:IT教学网)

更多

推荐CSS教程文章