导航:首页 > 编程语言 > php实例大全

php实例大全

发布时间:2023-08-30 17:25:03

1. php实现模拟post请求用法实例

本文实例讲述了php实现模拟post请求的方法。分享给大家供大家参考。具体如下:
class
Request{
public
static
function
post($url,
$post_data
=
'',
$timeout
=
5){//curl
$ch
=
curl_init();
curl_setopt
($ch,
CURLOPT_URL,
$url);
curl_setopt
($ch,
CURLOPT_POST,
1);
if($post_data
!=
''){
curl_setopt($ch,
CURLOPT_POSTFIELDS,
$post_data);
}
curl_setopt
($ch,
CURLOPT_RETURNTRANSFER,
1);
curl_setopt
($ch,
CURLOPT_CONNECTTIMEOUT,
$timeout);
curl_setopt($ch,
CURLOPT_HEADER,
false);
$file_contents
=
curl_exec($ch);
curl_close($ch);
return
$file_contents;
}
public
static
function
post2($url,
$data=array()){//file_get_content
$postdata
=
http_build_query(
$data
);
$opts
=
array('http'
=>
array(
'method'
=>
'POST',
'header'
=>
'Content-type:
application/x-www-form-urlencoded',
'content'
=>
$postdata
)
);
$context
=
stream_context_create($opts);
$result
=
file_get_contents($url,
false,
$context);
return
$result;
}
public
static
function
post3($host,$path,$query,$others=''){//fsocket
$post="POST
$path
HTTP/1.1\r\nHost:
$host\r\n";
$post.="Content-type:
application/x-www-form-";
$post.="urlencoded\r\n${others}";
$post.="User-Agent:
Mozilla
4.0\r\nContent-length:
";
$post.=strlen($query)."\r\nConnection:
close\r\n\r\n$query";
$h=fsockopen($host,80);
fwrite($h,$post);
for($a=0,$r='';!$a;){
$b=fread($h,8192);
$r.=$b;
$a=(($b=='')?1:0);
}
fclose($h);
return
$r;
}
}
$url='http://******/con/Inter.php';
$data=Request::post($url,array('api'=>'tag_list'));
$data2=Request::post2($url,array('api'=>'tag_list'));
echo
$data;
希望本文所述对大家的php程序设计有所帮助。

2. php几种排序算法实例详解

四种排序算法的PHP实现:
1)插入排序(InsertionSort)的基本思想是:
每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。

2)选择排序(SelectionSort)的基本思想是:
每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。

3)冒泡排序的基本思想是:
两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。

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

1.sort.php文件如下:

<?php
classSort{
private$arr=array();
private$sort='insert';
private$marker='_sort';
private$debug=TRUE;
/**
*构造函数
*
*@paramarray例如:
$config=array(
'arr'=>array(22,3,41,18),//需要排序的数组值
'sort'=>'insert',//可能值:insert,select,bubble,quick
'debug'=>TRUE//可能值:TRUE,FALSE
)
*/
publicfunctionconstruct($config=array()){
if(count($config)>0){
$this->_init($config);
}
}
/**
*获取排序结果
*/
publicfunctiondisplay(){
return$this->arr;
}
/**
*初始化
*
*@paramarray
*@returnbool
*/
privatefunction_init($config=array()){
//参数判断
if(!is_array($config)ORcount($config)==0){
if($this->debug===TRUE){
$this->_log("sort_init_param_invaild");
}
returnFALSE;
}
//初始化成员变量
foreach($configas$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");
}
returnFALSE;
}
if(FALSE===($this->arr=$this->$method($this->arr)))
returnFALSE;
returnTRUE;
}
/**
*插入排序
*
*@paramarray
*@returnbool
*/
privatefunctioninsert_sort($arr){
//参数判断
if(!is_array($arr)ORcount($arr)==0){
if($this->debug===TRUE){
$this->_log("sort_array(insert)_invaild");
}
returnFALSE;
}
//具体实现
$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;
}
/**
*选择排序
*
*@paramarray
*@returnbool
*/
privatefunctionselect_sort($arr){
//参数判断
if(!is_array($arr)ORcount($arr)==0){
if($this->debug===TRUE){
$this->_log("sort_array(select)_invaild");
}
returnFALSE;
}
//具体实现
$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;
}
/**
*冒泡排序
*
*@paramarray
*@returnbool
*/
privatefunctionbubble_sort($arr){
//参数判断
if(!is_array($arr)ORcount($arr)==0){
if($this->debug===TRUE){
$this->_log("sort_array(bubble)_invaild");
}
returnFALSE;
}
//具体实现
$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;
}
/**
*快速排序
*@bywww.5wx.org
*@paramarray
*@returnbool
*/
privatefunctionquick_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);

returnarray_merge($left_arr,array($key),$right_arr);
}
/**
*日志记录
*/
privatefunction_log($msg){
$msg='date['.date('Y-m-dH:i:s').']'.$msg.' ';
return@file_put_contents('sort_err.log',$msg,FILE_APPEND);
}
}
/*Endoffilesort.php*/
/*Locationhtdocs/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=newSort($config);
//var_mp($config['arr']);
var_mp($sort->display());
/*Endofphp*/

3. PHP8新特性示例

命名参数 :就是具名参数,在调用函数的时候,可以指定参数名称,指定参数名称后,参数顺序可以不安装原函数参数顺序传

示例:

注解 :注解可以将类定义成一个一个低耦合,高内聚的元数据类。在使用的时候通过注解灵活引入,反射注解类实例的时候达到调用的目的。注解类只有在被实例化的时候才会调用

示例

示例:

解释 :在不确定参数类型的场景下,可以使用.

示例:

解释:和 switch case 差不多,但是严格要求 === 匹配

示例:

解释:简化了 is_null 判断

示例:

考虑到 PHP 动态语言类型的特性,现在很多情况下,联合类型都是很有用的。联合类型是两个或者多个类型的集合,表示可以使用其中任何一个类型。

请注意,联合类型中不包含 void ,因为 void 表示的含义是 “根本没有返回值”。 另外,可以使用 |null 或者现有的 ? 表示法来表示包含 nullable 的联合体 :

JIT — just in time — 编译器虽然不总是在 Web 请求的上下文中,但是有望显着地提高性能。目前还没有完成任何准确的基准测试,但是肯定会到来。

属性在其他语言中通常被称为 注解 ,提供一种在无需解析文档块的情况下将元数据添加到类中的方法。

尽管已经可以返回 self,但是 static 直到 PHP 8 才是有效地返回类型 。考虑到 PHP 具有动态类型的性质,此功能对于许多开发人员将非常有用。

有人可能将其称为必要的邪恶: mixed 类型让许多人感觉十分混乱。然而,有一个很好的论据支持去实现它:缺少类型在 PHP 中会导致很多情况:

因为上述原因,添加 mixed 类型是一件很棒的事儿。 mixed 本身代表下列类型中的任一类型:

请注意,mixed 不仅仅可以用来作为返回类型,还可以用作参数和属性类型。因为 mixed 类型已经包括了 null,因此 mixed 类型不可为空。下面的代码会触发致命错误:

已上是整理出来的新特性的变化,后续会继续整理,PHP8的发布会让PHP更上一层楼,相信PHP是世界上最好的语言!

4. PHP典型模块与项目实战大全:PHP文件下载的原理及实现

PHP文件下载的原理及实现

通常文件下载过程是十分简单的 建立一个链接指向到目标文件就可以了 例如下面的链接

<a href=// xxx /xxx rar>点击下载文件</a>

但是 实际情况可能会稍复杂 比如需要用户填写完整注册信息后才可以下载该文件 这时最先想到的是使用Redirect的方式 下面介绍两种方式

( )用Redirect方式 先检查表格是否已经填写完毕和完整 然后将链接指到该文件 这样用户就可以下载 请看下面的示例代码

<?php

/*文件功能 检查变量form是否完整*/

if($form){

//重新定向浏览器指向

Header( Location: // // xxx /xxx rar )

exit;

}

?>

( )根据下载文件的序号来查找 链接的形式如下

<a href= // xxx /download php?id= >点击下载文件</a>

上面的链接使用ID方式接收要下载文件的编号 然后再用Redirect的方式连接到真实的文件链接

以上这两种方法虽然实现了文件的下载功能 但是缺点是直接暴露了文件所属的路径 而且没有防盗链的功能 所以上面的方式是简单直接但存在安全隐患的文件下载方式 在PHP中 通常是利用header()函数和fread()函数来实现安全的文件下载

例如 需要下载的是一个文件名为xxx rar的文件 首先创建文件是download php的PHP文件 通过前面的例子很容易通过文件的ID号从数据库中得到待下载文件的真实位置 在获得文件的真实存储位置后 可缺培悉以通过header()函数的location参数直接重定向到这个文件 但是这样仍然是不安全的 因为某些下载软件还是可以通过重定向分析获得该文件的位置信息 因此需要用另外一种方法 就是PHP的文件处理API函数 它是通过fread()函数把文件直接输出到浏览器提示用户下载 这样所有的处理都是在服务器端完成的 因此用户就无法获得文件具体存储位置信息的 示例代码如下

<?

$file_name = xxx rar ; //下载文件名

$file_dir = /up/ ;中纤 //下载文件存放目录

//检查文件是否存在

if (! file_exists ( $file_dir $file_name )) {

echo 文件找不到 ;

exit ()

} else {

//打开文件

$file = fopen ( $file_dir $file_name r )

//输入文件标签

Header ( Content type: application/octet stream )

Header ( Accept Ranges: bytes )

Header ( Accept Length: filesize ( $file_dir $file_name ) )

Header ( Content Disposition: attachment; filename= $file_name )

//输出文件内容

//读取文件内容并直接输出到浏览器

echo fread ( $file filesize ( $file_dir $file_name ) )

fclose ( $file )

exit ()

}

?>

【代码解读】

上述代码中 程序发送Header信息是用来告诉Apache和浏览器下载文件的相关信息的 content type的含义代表文件MIME类型是文件流格式 如果在Apache配置里面把文件的MIME类型设为application/octet stream(如add application/octet stream xxx rar) 那么浏览器(客户端伏乎)就会知道 这是一个文件流格式的文件并提示用户下载 Accept Ranges是一个响应头标 它允许服务器指明将在给定的偏移和长度处 为资源组成部分的接受请求 该头标的值被理解为请求范围的度量单位 Content Length是指定包含于请求或响应中数据的字节长度 例如 Content Length: Content Disposition:attachment是用来告诉浏览器 文件是可以当做附件被下载 下载后的文件名称为$file_name该变量的值

运行download php文件 效果如图 所示 从图中可以看到文件按照预想的方式被提示下载 单击 保存 按钮将文件保存在本地

图 PHP文件安全下载

返回目录 PHP典型模块与项目实战大全

编辑推荐

Java Web开发详解

PHP Web开发学习实录

lishixin/Article/program/PHP/201311/21519

5. PHP典型模块与项目实战大全:PHP能做什么

PHP能做什么

PHP初学者的一个主要疑问就是 PHP能用来做什么?按照PHP手册上的经典解释就是 PHP能做任何事!

下面为读者具体的介绍PHP主要的应用领域 PHP是运行于服务端的脚本程序 因此可以用其完成任何CGI(Common Gateway Interface)程序能够完成的工作 CGI工作流程如图 所示 CGI主要用于完成在B/S(Browser/Server)模式下的应用开发 例如 动态页面输出 获取表单数据 创建或接收Session/Cookies

图 CGI工作流程示意图

PHP主要应用于以下 个领域

服务端脚本

服务器脚本运行模式需要具备 个条件 PHP解析器(CGI或者服务器模块) Web服务器 Web浏览器

具体执行流程 首先运行Web服务器 然后安装并配置PHP 最后可以用Web浏览器访问PHP程序的输出 即浏览服务端的PHP页面(或数据输出)

命令行脚本

通过命令行模式运行PHP脚本 这种模式下不需要服务器的支持或者依赖浏览器的触发 在命令行脚本模式下仅需要PHP解析器来执行 通常这种方法被用在Windows和Linux平台下做日常运行脚本使用 如某些守护程序等 当然这些脚本也可以用来处理简单的文本

编写桌面应用程序

PHP也许并不完全适合用来做图形界面应用程序 但是开发人员同样可以在客户端程序应用某些PHP的高级特性 通过使用PHP GTK来编写这些程序 PHP GTK是PHP的一个扩展 并不包含在标准的开发包中 开发人员需要单独编译它 通过PHP GTK可以建立独立的GUI(用户图形界面)应用程序 例如 音频播放器 文本编辑器 数据库后台等

返回目录 PHP典型模块与项目实战大全

编辑推荐

Java Web开发详解

PHP Web开发学习实录

lishixin/Article/program/PHP/201311/21535

阅读全文

与php实例大全相关的资料

热点内容
加密货币交易所哪个最好 浏览:816
linux的现状 浏览:926
命令与征服叛逆者修改器 浏览:246
怎么用ios玩安卓全民枪战 浏览:668
程序员入行前后的头发 浏览:711
嵌入式图像算法 浏览:329
服务器如何访问服务器失败 浏览:875
android进度球 浏览:1001
Linux造成xfs文件夹 浏览:457
华为手机怎么修改wifi加密类型 浏览:250
服务器封口是什么意思 浏览:743
有限元分析是算法吗 浏览:901
空气压缩机性能曲线 浏览:22
京城程序员2019 浏览:406
android新系统 浏览:512
安卓80有什么bug 浏览:681
如何做单机服务器 浏览:945
校讯通查成绩怎么显示服务器异常 浏览:885
冰箱压缩机工作压力是多少 浏览:411
程序员20多平米租房 浏览:453