php实例,php实例化对象
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在哪里返回,理解递归函数。