总结工作中常用的PHP代码
【目录】
【Apache设置二级域名和虚拟主机,在httpd.conf的最后】
----------------《开始》-----------------
◆PHP常用的代码
date_default_timezone_set(PRC); //时区设置
header("Content-type: text/html; charset=utf-8");
error_reporting(E_ALL & ~E_DEPRECATED & ~E_NOTICE & ~E_WARNING);
ini_set ('memory_limit', '1280M');
◆ HTML常用代码
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<script type="text/javascript" src="jquery-1.3.1.js"></script>
<meta charset="UTF-8"> <meta http-equiv ="refresh" content ="60"> #定时刷新页面 body{-webkit-user-select:none;} #CSS控制页面文字不能复制
【值传递和引用传递】
$p=213;
function ddd(&$q){
$q=314;
}
ddd($p);
echo $p; //不加&符号的时候,输出为213,加上后输出为314
【单例模式】
<?php
class demo{
private static $obj; //保存对象的静态属性
private function __construct(){} //私有化构造函数
private function __clone(){} //禁止克隆
public static function getInstance(){
if(!(self::$obj instanceof self)){
self::$obj = new self;
}
return self::$obj;
}
}
?>
【魔术常量】
class moshu{
function __construct(){
echo "<br>".__LINE__; //当前的行数
echo "<br>".__FILE__; //当前文件绝对路径及文件名
echo "<br>".__DIR__; //当前文件绝对路径
echo "<br>".__CLASS__;//当前的类名
echo "<br>".__FUNCTION__; //当前的函数(方法)名
echo "<br>".__METHOD__; //类的方法名
echo "<br>".__NAMESPACE__; //命名空间[不常用]
}
}
$ms=new moshu();
【代码调试(自定义一个简单的debug函数)】
function debug(){
$num_args = func_num_args(); //实参个数
$arg_list = func_get_args(); //返回某一个实参,必须是实参数组的索引;
for($i=0;$i<$num_args;$i++){
echo "第 $i 个变量的值为:".$arg_list[$i]."<br>";
}
echo "当前所处的文件名为:".__FILE__."<br><br>";
}
【thinkphp多表查询】
$table="tb_user a,tb_info b";
$field="a.id,a.name,a.sex,b.img";
$order="a.id desc,b.create_time desc";
$map['a.is_del']=0;
$limit=(($_GET['page']-1)*$_GET['limit']).','.$_GET['limit'];
$list = M('')->table($table)->field($field)->where($map)->order($order)->limit($limit)->select();
$sql_res = M('')->getLastSql();
【获取客户端IP地址】
function getIP(){
$ip=getenv('REMOTE_ADDR');
$ip_ = getenv('HTTP_X_FORWARDED_FOR');
if (($ip_ != "") && ($ip_ != "unknown")){
$ip=$ip_;
}
return $ip;
}
【PHP json_encode中文乱码解决方法】
$testJSON=array('name'=>'中文字符串','value'=>'test');
foreach ( $testJSON as $key => $value ) {
$testJSON[$key] = urlencode ( $value );
}
echo urldecode ( json_encode ( $testJSON ) );
【Apache设置二级域名和虚拟主机,在httpd.conf的最后】
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.a.com
DocumentRoot "D:/www"
</VirtualHost>
<Directory "D:/www" >
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
Options FollowSymLinks 表示不列出目录下的文件,如果要列出文件列表,则使用 Options Indexes FollowSymLinks。C:\Windows\System32\drivers\etc 目录下hosts文件中(Ubuntu 系统下,是在 /etc/hosts 文件中):最后添加一行:127.0.0.1 www.a.com。
----------------《CURL》-----------------
【CURL 获取远程网页数据】
$curl = curl_init(); curl_setopt($curl, CURLOPT_URL, "http://www.baidu.com"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 0); //第三个参数是1表示不输出,0允许输出 $data = curl_exec($curl); curl_close($curl);
【php通过http post发送json数据】
function http_post_data($url, $data_string) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json; charset=utf-8',
'Content-Length: ' . strlen($data_string))
);
ob_start();
curl_exec($ch);
$return_content = ob_get_contents();
ob_end_clean();
$return_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
return array($return_code, $return_content);
}
$url = "http://xx.xx.cn";
$data = json_encode(array('a'=>1, 'b'=>2));
list($return_code, $return_content) = http_post_data($url, $data);
【使用CURL抓取网页】
<?php
header("Content-type:text/html;charset=utf-8");
/*CURL的具体实现,抓取网页,类似于直接file_get_contents() */
//--- 1.初始化
$ch = curl_init();
//--- 2.设置选项,包括url
curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com");
//将curl_exec() 获取的信息以文件流的形式返回,而不是直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//启用时会将头文件的信息作为数据流输出
curl_setopt($ch, CURLOPT_HEADER, 1);
//--- 3.执行并获取HTML文档内容
$output = curl_exec($ch);
//curl_getinfo() 函数返回CURL执行后这一请求的相关信息,对调试和排查错误很有用
//$info = curl_getinfo($ch); print_r($info);
//--- 4.释放CURL句柄
curl_close($ch);
echo $output;
?>
【在cURL中用POST方法发送数据】
<?php
header("Content-type:text/html;charset=utf-8");
//提交后的数据接收部分
if(isset($_GET['type']) && $_GET['type']=='tijiao'){
print_r($_POST);exit;
}
//CURL请求部分
$url = "http://localhost/test/code04/code03.php?type=tijiao";
$post_data = array(
'username'=>'root',
'password'=>'123456',
'name'=>'管理员',
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//设置为POST
curl_setopt($ch, CURLOPT_POST, 1);
//把POST的变量加上
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);
curl_close($ch);
echo $output;
?>
【使用cURL上传文件】
<?php
error_reporting(E_ALL & ~E_DEPRECATED & ~E_NOTICE & ~E_WARNING);
header("Content-type:text/html;charset=utf-8");
//提交后的数据接收部分
if(isset($_GET['type']) && $_GET['type']=='tijiao'){
echo '<pre>';print_r($_FILES);echo '</pre>';exit;
}
//CURL请求部分
$url = "http://localhost/test/code04/code04.php?type=tijiao";
//注意下面一定要有@符号!
$post_data = array(
'files1'=>'@E:/test/s1.jpg',
'files3'=>'@E:/test/s2.zip',
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);
curl_close($ch);
echo $output;
?>
【上传网络图片】
$pic_url = $_POST['pic_url']; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://imgtest.qwbcg.mobi/image/crawl_upload.php?token=mmkj2xai823@asin&pic_url= $pic_url" ); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); $output = curl_exec($ch); //执行并获取HTML文档内容 curl_close($ch); print_r($output );
----------------《PHP数组》-----------------
【PHP将XML数据转换为数组】
function xml_to_array($xml)
{
$array = (array)(simplexml_load_string($xml));
foreach ($array as $key=$item){
$array[$key] = struct_to_array((array)$item);
}
return $array;
}
function struct_to_array($item) {
if(!is_string($item)) {
$item = (array)$item;
foreach ($item as $key=$val){
$item[$key] = struct_to_array($val);
}
}
return $item;
}
【数组使用中的细节】
(1)创建数组时,如果没有给某个元素指定key,则会用目前最大的key(整数)+1 作为该元素的key:
$arr=array(5=>"logo",567,90);
echo $arr[5]; //值为”logo”
echo $arr[6]; //值为567
(2)如果使用[true ,false ,null,小数] 作为key, 则等价于[1,0,””(空字符串),截断小数点后的数值]
$arr[true]="hello"; //==> $arr[1]
$arr[false]="world"; //==> $arr[0]
$arr[null]="北京"; //==> $arr[""];
$arr[3.14]="北京"; //==> $arr[3];
【数组排序】:从效率上看 ------- 冒泡法< 选择排序法 < 插入排序法
(1)冒泡排序
function bubbleSort(&$arr){ //注意这里&
$temp=0;
for($i=0;$i<count($arr)-1;$i++){
for($j=0;$j<count($arr)-1-$i;$j++){
if($arr[$j]>$arr[$j+1]){
$temp=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$temp;
}
}
}
}
(2)选择排序
function selectSort(&$arr){
$temp=0;
for($i=0;$i<count($arr)-1;$i++){
//假设 $i就是最小的数
$minVal=$arr[$i];
//记录我认为的最小数的下标
$minIndex=$i;
for($j=$i+1;$j<count($arr);$j++){
//说明我们认为的最小值,不是最小值
if($minVal>$arr[$j]){
$minVal=$arr[$j];
$minIndex=$j;
}
}
//最后交换
$temp=$arr[$i];
$arr[$i]=$arr[$minIndex];
$arr[$minIndex]=$temp;
}
}
(3)插入排序法
function insertSort(&$arr){
//先默认下标为0 这个数已经是有序
for($i=1;$i<count($arr);$i++){
//$insertVal是准备插入的数
$insertVal=$arr[$i];
//准备先和$insertIndex比较
$insertIndex=$i-1;
//如果这个条件满足,说明,我们还没有找到适当的位置
while($insertIndex>=0&&$insertVal<$arr[$insertIndex]){
//同时把数后移
$arr[$insertIndex+1]=$arr[$insertIndex];
$insertIndex--;
}
//插入(这时就给$insertVal找到适当位置)
$arr[$insertIndex+1]=$insertVal;
}
}
【数组的查找】
(1)顺序查找
function search(&$arr,$findVal){
$flag=false;
foreach($arr as $k=>$v){
if($findVal==$arr[$k]){
echo "找到了,下标为:$k".'<br>';
$flag=true;
//break;
}
}
if(!$flag){
echo '没有找到!';
}
}
(1)二分查找法(前提是 该数组本身已经是一个有序数组. 如果该数组不是有序的,则必须先排序再查找)
function binarySearch(&$arr,$findVal,$leftIndex,$rightIndex){
//$leftIndex为数组最左端下标[0],$rightIndex为最右端下标[count($arr)]
//当 $leftIndex>$rightIndex 说明没有数
if($leftIndex>$rightIndex){
echo "没有找到...";
return; //必须有
}
//找到中间这个数
$middleIndex=round(($rightIndex+$leftIndex)/2);
//如果大于中间这个数,则向后面找
if($findVal>$arr[$middleIndex]){
binarySearch($arr,$findVal,$middleIndex+1,$rightIndex);
}
//如果小于中间这个数,则向前面找
elseif($findVal<$arr[$middleIndex]){
binarySearch($arr,$findVal,$leftIndex,$middleIndex-1);
}else{
echo "找到这个数,下标是:$middleIndex";
}
}
----------------《PHP操作文件》-----------------
【下载文件】
<?php
header("Content-Type:image/gif");
header('Content-Disposition: attachment; filename="logo3333.gif"');
header('Content-Length:'.filesize("logo.gif"));
readfile("logo.gif");
【从一个标准 url 里取出文件的扩展名】
function getExt($url){
$arr = parse_url($url);
$file = basename($arr['path']);
$ext = explode(".",$file);
return $ext[1];
}
$str = "http://www.sina.com.cn/abc/de/fg.php?id=1";
echo getExt($str);// 输出:php
【复制非空目录】
<?php
header("Content-type: text/html; charset=utf-8");
$dirname="phpMyAdmin";
copydir($dirname,"hello1");
functioncopydir($dirsrc, $dirto){
if(is_file($dirto)){
echo"目标不是目录不能创建";
return;
}
if(!file_exists($dirto)){
mkdir($dirto);
//echo "创建目录".$dirto."成功!<br>";
}
$dir=opendir($dirsrc);
while($filename=readdir($dir)){
if($filename!="."&& $filename!=".."){
$file1=$dirsrc."/".$filename;
$file2=$dirto."/".$filename;
if(is_dir($file1)){
copydir($file1, $file2);//递归处理
}else{
copy($file1, $file2);
}
}
}
closedir($dir);
}
?>
【删除非空目录】
<?php
header("Content-type: text/html; charset=utf-8");
$dirname="phpMyAdmin";
deldir($dirname);
functiondeldir($dirname){
if(file_exists($dirname)) {
$dir=opendir($dirname);
while($filename=readdir($dir)){
if($filename!="."&& $filename!=".."){
$file=$dirname."/".$filename;
if(is_dir($file)){
deldir($file);//使用递归删除子目录
}else{
echo'删除文件<b>'.$file.'</b>成功<br>';
unlink($file);
}
}
}
closedir($dir);
echo'删除目录<b>'.$dirname.'</b>成功<br>';
rmdir($dirname);
}
}
?>
【PHP读取一个目录下的文件个数】
<?php
function FileCount($dir){
global $count;
if(is_dir($dir)&&file_exists($dir)){
$ob=scandir($dir);
foreach($ob as $file){
if($file=="."||$file==".."){
continue;
}
$file=$dir."/".$file;
if(is_file($file)){
$count++;
}elseif(is_dir($file)){
FileCount($file);
}
}
}
}
//调用方法
$count=0;
FileCount("DataRoom");
echo $count;exit;
?>
【php获取目录中的所有文件名】
<?php
$handler = opendir('pic/common');
while( ($filename = readdir($handler)) !== false ) {
if($filename != "." && $filename != ".."){
echo $filename;
}
}
closedir($handler);
?>
function getAllFiles($dir){
$handler = opendir($dir);
$list = array();
while( ($filename = readdir($handler)) !== false ) {
if($filename != "." && $filename != ".."){
$list[] = $filename;
}
}
closedir($handler);
return $list;
}
【判断远程图片(文件)是否存在】
function check_remote_file_exists($url) {
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_NOBODY, true); // 不取回数据
$result = curl_exec($curl); // 发送请求
$found = false;
if ($result !== false) {
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($statusCode == 200) {
$found = true;
}
}
curl_close($curl);
return $found;
}
【按照年月日创建目录,并返回目录地址】
function makeDir(){
date_default_timezone_set('Asia/Shanghai');
$log_path = $_SERVER['DOCUMENT_ROOT'].'/FxData';
//创建“年份”文件夹,格式为: /Data/2014
$log_path_year = $log_path.'/'.date("Y",time());
if(!is_dir($log_path_year)) {
mkdir($log_path_year, 0777, true);
}
//创建“月份”文件夹,格式为: /Data/2014/201412
$log_path_month = $log_path_year.'/'.date("Ym",time());
if(!is_dir($log_path_month)) {
mkdir($log_path_month, 0777, true);
}
//创建“日期”文件夹,格式为: /Data/2014/201412/20141212
$log_path_date = $log_path_month.'/'.date("Ymd",time());
if(!is_dir($log_path_date)) {
mkdir($log_path_date, 0777, true);
}
return $log_path_date;
}
----------------《PHP操作MySQL》-----------------
【PHP操作MySQL】
$conn=mysql_connect($db_host,$db_user,$db_pwd) or die("连接服务器失败");
mysql_select_db($db_name,$conn) or die("选择数据库失败");
$result=mysql_query("select * from employee") or die("查询失败");
while($row = mysql_fetch_array($result)){
$res[] = $row;
}
print_r($res);
mysql_free_result($result);// 释放结果集内存
mysql_close($conn);
【PHP操作mysqli】
$mysqli=new mysqli($db_host,$db_user,$db_pwd,$db_name) ;
$result=$mysqli->query("select * from employee");
while($row =$result->fetch_array()){
$res[] = $row;
}
print_r($res);
$result->free();
$mysqli->close();
【PHP操作MySQL的事务】
$mysqli=new mysqli("localhost", "root", "123456", "xsphpdb");
$mysqli->autocommit(0);
$error=true;
$price=50;
$sql="update zh set ye=ye-{$price} where name='zhangsan'";
$result=$mysqli->query($sql);
if(!$result){
$error=false;
echo "从张三转出失败<br>";
}else{
if($mysqli->affected_rows==0){
$error=false;
echo "张三的钱没有变化";
}else{
echo "从张三账号中转出成功!<br>";
}
}
$sql="update zh set ye=ye+{$price} where name='lisi1'";
$result=$mysqli->query($sql);
if(!$result){
$error=false;
echo "从李四转入失败<br>";
}else{
if($mysqli->affected_rows==0){
$error=false;
echo "李四的钱没有变化";
}else{
echo "向李四账号中转入成功!<br>";
}
}
if($error){
echo "转账成功!";
$mysqli->commit();
}else{
echo "转账失败!";
$mysqli->rollback();
}
$mysqli->autocommit(1);
$mysqli->close();
【PHP删除MySQL数据库下的所有数据表】
$hostname ='localhost'; $userid = 'username'; $password = 'password'; $dbname = 'dbname';
$connect = mysql_connect($hostname,$userid,$password);
mysql_select_db($dbname);
$result = mysql_query("show table status from $dbname",$connect);
while($data=mysql_fetch_array($result)) {
mysql_query("drop table $data[Name]");
}
【了解备用:PDO】
PDO即 PHP DATA OBJECTS,是PHP定义的一个轻量级的数据操作接口,并且此接口实现了事务和不同数据库之间的抽象。
$dsn = 'mysql:dbname=renxing;host=localhost';
$user_name = 'root'; $user_pwd = 'root';
$pdo = new PDO($dsn, $user_name, $user_pwd);
$query="select * from employee";
foreach ( $pdo->query($query) as $row){
$res[] = $row;
}
print_r($res);
//执行操作:$pdo->exec("delete from employee where id>4";);
◆ PDO的事务:
(1)开始事务:beginTransaction()方法,该方法会关闭自动提交(autocommit)模式,直到事务提交或者回滚以后才能恢复。
(2)提交事务:commit()方法成功返回true,否则返回false
(3)回滚事务:rollBack()方法
【了解备用:ADODB】
include('adodb/adodb.inc.php');
$conn = ADONewConnection('mysql');//MySQL数据库
$conn->Connect("localhost", "root", "root", "renxing");//连接数据库
$result=$conn->Execute("select * from employee");//执行查询
foreach ($result as $row) {
print_r($row);
}
$conn -> Close();//关闭连接
◆ ADODB获取结果:
(1)GetAll()方法可获取表中的所有记录,并返回包含结果集的一个数组
(2)GetRow()方法可获取单条记录
(3)GetOne()方法可获取结果集中某条记录的第一个字段的值。
(4)RecordCount()方法可获取结果集中行的个数,FieldCount()方法可获取结果集中字段的个数。
(5)FetchField()方法可获取指定字段的名称、数据类型、是否为主键。
◆ ADODB的其他功能:
(1)开启调试功能:$conn->debug=true;程序在运行时会输出SQL语句。
(2)对查询进行缓存:$conn->CacheExecute($time,$query);清除缓存使用CacheFlush()方法。
(3)ADODB的事务处理:开始事务StartTrans()方法,结束事务Complete()方法,强制执行回滚FailTrans()方法,获知处理事务是否成功HasFailedTrans()方法。
----------------《完》-----------------
总结工作中常用的PHP代码的更多相关文章
- 工作中常用的js、jquery自定义扩展函数代码片段
仅记录一些我工作中常用的自定义js函数. 1.获取URL请求参数 //根据URL获取Id function GetQueryString(name) { var reg = new RegExp(&q ...
- 【python正则】工作中常用的python正则代码
工作中常用的一些正则代码: 01.用户名正则 import re # 4到16位(字母,数字,下划线,减号)if re.match(r'^[a-zA-Z0-9_-]{4,16}$', "ab ...
- git 工作中常用命令(结合vscode学习git 命令)
作为一名前端开发,大家在工作中常常使用什么开发工具呢,我觉得我首选的是vscode,他配合git使用起来非常方便. 工作中常用三个命令: git终端常使用: git add . git commit ...
- Java工作中常用到的工具
刚看但网上一篇Java最流行工具的文章,结合自己日常应用总结一下开发工作中常用到的工具. 一,Java版本,jdk8,也是Java普及最快的版本,除了本身性能提升外,新增的函数式编程特性也让开发效率更 ...
- 工作中常用到的Java集合类有哪些?
前言 只有光头才能变强. 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y Java集合是我认为在Java基础中最最重要的知 ...
- 工作中常用的Linux命令:mkdir命令
本文链接:http://www.cnblogs.com/MartinChentf/p/6076075.html (转载请注明出处) 在Linux系统中,mkdir命令用来创建一个目录或一个级联目录. ...
- 工作中常用的Linux命令:crontab命令
本文链接:http://www.cnblogs.com/MartinChentf/p/6060252.html (转载请注明出处) crontab是一个用来设置.删除或显示供守护进程cron执行的定时 ...
- 工作中常用的Linux命令:ipcs/ipcrm命令
本文链接:http://www.cnblogs.com/MartinChentf/p/6057100.html (转载请注明出处) ipcs 1. 命令格式 ipcs [resource-option ...
- 工作中常用的Linux命令:find命令
本文链接:http://www.cnblogs.com/MartinChentf/p/6056571.html (转载请注明出处) 1.命令格式 find [-H] [-L] [-P] [-D deb ...
随机推荐
- Golang 语言安装
Ubuntu: 从源代码编译安装 安装gcc工具,因为golang有些功能是使用c写的,所以构建golang的编译是必须的 apt-get install bison gawk gcc libc6-d ...
- layui时间,table,大图查看,弹出框,获取音频长度,文件上传
1.引入: <link href="../../Scripts/layui-v2.3.0/css/layui.css" rel="stylesheet" ...
- day07<面向对象+>
面向对象(构造方法Constructor概述和格式) 面向对象(构造方法的重载及注意事项) 面向对象(给成员变量赋值的两种方式的区别) 面向对象(学生类的代码及测试) 面向对象(手机类的代码及测试) ...
- 使用loadrunner进行压力测试遇到的问题总结
本人整理了一个LR使用过程中遇到的各种问题的总结文档,有需要可以加QQ群169974486下载. 一.无法生成虚拟用户,运行报错:CCI compilation error -vuser_init.c ...
- js常用总结
常用总结,方便大家学习共享. 1.document.write(""); 输出语句 2.JS中的注释为// 3.传统的HTML文档顺序是:document->html-& ...
- remove()
remove() 用于从列表中删除指定的元素 In [35]: l = ['a', 'b', 'c'] In [36]: l.remove('b') In [37]: l Out[37]: ['a', ...
- Keil MDK从未有过的详细使用讲解(转)
这博主关于MDK 的使用的文章,写的得TM的好 TM的实用! 真心收藏! 熟悉Keil C 51的朋友对于Keil MDK上手应该比较容易,毕竟界面是很像的.但ARM内核毕竟不同于51内核,因此无论 ...
- Android英文文档翻译系列(2)——HandlerThread
public class HandlerThread extends Thread Class Overview Handy class for starting a new threa ...
- ansible批量验证密码
author: headsen chen date: 2018-08-31 20:45:49 综合比较salt-ssh,ansible .sshpass等批量验证100台机器的密码,最好推荐用ans ...
- fluentValidation集成到autofac
废话不说直接上代码 // 首先实现ValidatorFactory public class DependencyResolverValidatorFactory : ValidatorFactory ...