php学习记忆要点

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

html常用标记
双标签
b:加粗 font:字体 链接到本页面
单标签

符号实体
版权符号:©  

使用framset标记合并多个页面
//不允许有自己的body体





frame标签name属性一般与a标签的target属性配合使用

iframe的使用,如何让有body体的页面嵌入另外一个有body体的页面

多媒体标记的使用


图像映射技术
Planets

Sun
Mercury
Venus


css滤镜技术:filter:gray可以控制图像黑白

有多个类选择器时,看类选择器在样式表中的顺序

如果使用float属性时,会身兼块元素的特性

绝对定位:对该元素最近的那个非正常(定位或浮动了的)标准流的元素定位,如果没有父元素,则相对于body左上角定位

php学习要点
软件开发中的重要原则:编译环境和运行环境要一致

apache相关命令
进入控制台->进入bin目录->httpd -k shutdown/stop/restart
netstat -anb 可以查看时哪个程序在哪个端口监听

apache目录结构
bin目录:存放大量命令
cgi-bin:存放linux下常用命令
htdocs:存放站点文件

apache虚拟目录的配置:
节点后添加如下代码

DirectoryIndex index.html index.htm//哪些可以当首页面
Alias /myblog "D:/myblog" //真实目录的url映射
//目录下文件访问权限设置
Order allow,deny //先allow后deny
Allow from all //允许所有ip地址访问


配置完后还需要注销documentroot才能生效

apache虚拟主机的配置:
1.在主配置文件中打开虚拟主机配置文件
include conf/extra/httpd-vhosts.conf
2.在vhosts.conf中配置自己的虚拟主机
//真实主机地址
DocumentRoot "d:/myblog" //真实主机站点目录
DirectoryIndex index.html //首页面

Options FollowSymLinks
AllowOverride None //不允许别人修改
Order allow,deny
allow from all>


//真实主机端口
DocumentRoot "d:/myblog" //真实主机站点目录
ServerName //指定虚拟域名
DirectoryIndex index.html //首页面

Options FollowSymLinks
AllowOverride None //不允许别人修改
Order allow,deny
allow from all>

3.修改host文件

搭建环境:自定义
1.先安装apache
2.下载php压缩包,解压即可
3.整合apache和php
在httpd-cong文件

中加入下面语句
#载入php模块
LoadModule php5_module c:/phpenv/php-5.3.5/php5apahe2_2.dll
#指定php的ini文件路径
PHPIniDir "c:/phpenv/php-5.3.5"
#当有一个资源是*.php时就由php来处理
AddType application/x-httpd-php .php .phtml
把php.ini.development文件改名为php.ini(在安装目录里面)
然后再php.ini中指定动态链接库目录
extension_dir="c:/phpenv/php-5.3.5/ext"
4.下载安装mysql数据库

如何使用网上的开源项目:

php文件的调用过程

php数据类型详解
PHP 支持 8 种原始数据类型。
四种标量类型: 1.boolean (布尔型) 2.integer (整型) 3.float (浮点型,也称作 double ) 4.string (字符串)
两种复合类型: 1.array (数组) 2.object (对象)
最后是两种特殊类型: 1.resource (资源) 2.NULL (无类型)
为了确保代码的易读性,本手册还介绍了一些伪类型:
1.mixed (混合类型) 2.number (数字类型) 3.callback (回调类型) 以及伪变量 $... 。

字符串用单引号还是双引号
当一个变量包含在双引号中时,输出其值
如果是单引号,输出变量字符本身、

表达式是任何有值得东西

优先级:"||">"=">"or" 符号优先级高于等号高于英文描述

字符串链接运算: .

常量的定义方法: define("PI",3.14); const PI=3.14;
常量一般大写,不用$符号

include和require的区别
include如果出现错误会继续往下执行(如文件名错误),require会终止程序
项目中一般使用require_once

global $a;该语句表示引用全局变量$a

算术右移:低位溢出,符号位补高位
算术左移:符号位不变,低位补0

数组,排序,查找
1.在php中,数组是关键字与值得集合
2.默认情况下关键字从0开始
3.$array=array("foo" => "bar" ,"bar" => "foo" ,100 => - 100);
4.遍历数组:foreach(数组名 as $key=>$value){}

key 可以是 integer 或者 string 。value 可以是任意类型。
此外 key 会有如下的强制转换:
1.包含有合法整型值的字符串会被转换为整型。例如键名 "8" 实际会被储存为 8。但是 "08" 则不会强制转换,因为其不是一个合法的十进制数值。
2.浮点数也会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。
3.布尔值也会被转换成整型。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。
4.Null 会被转换为空字符串,即键名 null 实际会被储存为 ""。
5.数组和对象不能被用为键名。坚持这么做会导致警告:Illegal offset type。
如果在数组定义中多个单元都使用了同一个键名,则只使用了最后一个,之前的都被覆盖了。

print_r 和 var_dump这两个方法都可以打印数组的信息

php面向对象编程
$a=86;$b=&$a; 此时$b中保存的是一个地址,当使

用$b是,编译器发现是一个地址,就会去相应的地址取值

给函数传递一个对象,是引用传递,如果传的是字符串,数字,数组等则是值传递。

class Person{
public $name;
public $age;
public function speak(){}//普通方法
public function __construct($a,$b){
$this->name=$a;
$this->age=$b;

}//构造方法(无返回值,自动调用)php的构造方法不能重载 构造方法默认是public的

或者puclic function Person(){}//php4中这么用

function __destruct(){
//析构方法的调用时机
1.进程结束时
2.对象的所有引用都被删除(立即被垃圾回收)
3.对象被显示销毁时执行
}

全局变量的声明和赋值要分开

静态变量的声明和访问
定义 public static $name=0;
访问 类名::$name 或者 self::$name

静态方法的访问
类名::方法名 对象名->方法名 self::方法名

类和方法默认是public的

方法之间可以相互调用,但是需要用$this引用

php中创建子类不会调用父类的构造方法
在子类中调用父类构造方法:parent::__construct() 父类名::__construct()

php方法重载与java不同,可以使用魔术函数__call() 来模拟方法的重载
当调用一个不存在的方法时,会自动调用__call($method,$parameters),z第一个参数接收方法名,第二个参数接收参数数组

php子类中不能出现于父类同名但是参数个数不同函数,会视为一个方法多次定义而出错

子类的访问范围不能小于父类

接口中可以有属性,但是必须是常量,const A=90;

php中final只能修饰方法和类,不能修饰属性

file_exsist(“文件名”) or die("文件不存在");

自定义错误处理方法set_error_hander()

错误触发器:trigger_error("msg",E_ERROR_WARNING) 触发一个指定信息和级别的错误,配合错误处理器可以对触发的错误进行处理

http协议
在服务器端可以从$_server这个全局数组中获取想要的信息(http请求)
响应头:Date 告诉服务器响应时间
header()函数用于向http响应头写入数据
304响应码:资源在缓存中存在并且没有修改过

文件下载:
1.打开文件(先判断文件是否存在) $fp=fopen("a.txt","r+")
2.设置头信息:
header("Content-type:applocation/octet-stream")//返回文件流
header("Accept-Ranges:bytes");//以字节返回
header("Accept-Length:$file_size");//文件大小
header("Content-Disposition:attachment;filename=".$file_name);
3.向客户端回送数据
$buffer=1024;
while(!feof($fp)){
$file_data = fread($fp,$buffer);
echo $file_data;
}
fclose($fp);
如果文件名是中文,需要先进行处理,转成gb2312码
$file_name = iconv("utf-8","gb2312",$file_name);

mysql数据库学习
create database mydata;use mydata;
数据类型:int double varchar char datetime
日期格式化函数 date_format(now(),"%Y-%

M-%d ")
create table users(id int primary key auto_increment;)

密码一般用MD5()加密函数加密后保存

php(mysql库)操作mysql的步骤
1.获取连接
$conn = mysql_connect("127.0.0.1","root","root");
if(!$conn) die("连接失败".mysql_error());
2.选择数据库
mysql_select_db("mydata");
3.设置操作编码
mysql_query("set names utf8");
4.发送指令
$sql="select * from emp";
$res=mysql_query($sql,$conn);
5.接收返回结果并处理
while($row = mysql_fetch_row($res)){
echo $row[0];
};
6.释放资源,关闭连接
mysql_free_result($res);
mysql_close($conn);//不写也可以,脚本结束时会自动关闭

mysql_query()执行dml语句返回的是bool值

从res中获取数据还有以下几种方法:
mysql_fetch_assoc($res):key不是"0","1","2'等数字,而是字段名
mysql_fetch_array($res):两种情况合并成一个数组(key 为 数字或字段名)
mysql_fetch_object($res):一行数据当做一个对象

mysql_affected_rows($conn)//行数
mysql_num_fields($res);//列数
mysql_field_name($res,$1)//取出指定列的列名
mysql_insert_id()//最新一条添加数据的id号

select * from emp limit 0,1//限制查询界限,从第0条开始显示,显示一条

mysql扩展库和mysqli扩展库的比较
1.后者更稳定,安全,效率较高
2.mysqli支持面向对象 $mysqli= new MySQLi();

mysqli扩展库的使用:首先要在php.ini中启用该库extension=php_mysqli.dll
1.创建一个mysqli对象
$mysqli=new MySQLi("localhost","root","root","mydata");
if($mysqli->connect_error){
die($mysqli->connect_error);
}
2.发送sql
$res=$mysqli->query($sql);//结果是MYSQLi_result类型
while($row=$res->retch_row()){

}

3.处理结果
4.关闭资源
$res->free();
$mysqli->close();

echo "{$field->name}"



超全局数组的使用(编程更方便):9种
全局数组的生成:服务器接收到php文件请求后调用php模块来处理,php模块将请求信息封装成超全局数组。
1.$_get
接收奇数个中文时5.5和6.0会报错(乱码,utf-8支持度不够)
使用urlencode函数将中文字符串重新编码
$str= urlencode("你们好");
empty()检测变量是否为0或为空
isset()检测变量是否被赋值

2.$_post
使用post如何接收复选框数据 将元素命名为数组格式:name="hobbys[]" 取值$arr=$_post['hobbys'];
3.$_requset
可以代替$_get,$_post,$_cookie的功能,身兼多职,不太安全
4.$_server
$_server主要包含请求头信息和一些服务器信息(document_root等)
获取远程ip和port,防盗链,获取php版本等
5.$_env
使用前需要启用php.ini variables_order="EGPCS"

6.$_file
打开文件
fopen打开一个文件,返回指针
fstart($fp)以数组的形式返回文件信息
fclose()文件打开后必须关闭
fileatime(filename)访问时间,filemtime(filename)修改时间
读取文件
fread($fp,filesize(filename)) 或者 file_

get_contents(filename)
或者while(!feof($fp)){$str.=fread($fp,buff)}
php读取配置文件:parse_ini_file(filename);返回数组
写文件
fwrite($fp,$str)打开方式为读写r+或追加a+模式或覆盖w+
file_put_contents(filename,$str,FILE_APEND)追加模式
拷贝文件
$bool=copy(url1,url2)将url拷贝到url2
文件和文件夹的创建和删除
$bool=mkdir("d:/chx") 创建 is_dir($file)或is_file($file)
$bool=rmdir("d:/chx") 删除 文件夹必须为空
ulink(filename) 删除文件
文件上传 设置form表单的enctype="multipart/form-data"
文本数据从$_POST中获取,文件数据从$_FILES中取
先判断文件是否上传的文件,然后把文件转存到你指定的目录
if(is_uploaded_file($_files['myfile']['tmp_name'])){
move_uploaded_file(tmp,$SERVER['DOUCUMENT_ROOT']."/file/".name)
}
上传带中文的文件需要使用iconv函数转成文件系统认识的gb2312码
文件下载:
1.打开文件(先判断文件是否存在) $fp=fopen("a.txt","r+")
2.设置头信息:
header("Content-type:applocation/octet-stream")//返回文件流
header("Accept-Ranges:bytes");//以字节返回
header("Accept-Length:$file_size");//文件大小
header("Content-Disposition:attachment;filename=".$file_name);
3.向客户端回送数据
$buffer=1024;
while(!feof($fp)){
$file_data = fread($fp,$buffer);
echo $file_data;
}
fclose($fp);



7.$_cookie
setCookie("name","chx",3600);name="chx"保存一小时(只能保存字符串)
$name=&_COOKIE('name'); 取出指定的cookie
setCookie("key","",time()-1);删除指定cookie:

8.$_session
在一次会话中session文件与浏览器是一对一的关系
session文件的默认路径是C://windows//temp
保存session:session_start();$_SISSION['key']=obj
获取session:session_start();$obj=$SeSsION['key'];(获取对象要先加载)
更新session: session_start();$_session['key']=$newval;
删除session:
指定键删除:session_start();unset($_SESSION['key']);
删除所有:session_destroy();

sesssion细节:
使用时必须先初始化SESSION_START()(crud)
session垃圾回收机制:启用后会删除过期的sessionsession.gc_maxlifetime,session.gc_probability=1,session_gcdivisor=100这3个配置同时使用可以决定每次执行session_start()函数时有1%的几率启用session垃圾回收机制。这样做可以减轻服务器的压力,如果网站的规模越大,则建议把概率设置的更小。
修改存放路径:session.save_path="c:/sessionpath";
如果禁用cookie后如何使用session?
方案1:利用SID常量拼接到url
方案2:启用配置e_trans_sid=1(在header,action,a中会自动拼接)

session文件生命周期:
在第一次调用session_start()时生成,
存在时间:(默认1440s,发呆时间)可以在php.ini修改session.gc_maxlifetime=

自定义会话处理器:改配置session.save_handler=user 调函数session_set_save_handler()
与Java不同点:java的session常驻内

存,而php的session以文件形式保存在磁盘

9.$globle
使用zend statio(现将文件编码设置为utf-8)content-types text
创建项目-》选择directory
常用快捷键:提示助手alt+/ 删除当前行ctrl+d 添加注释ctrl+/
调试工具的使用:双击可下断点


php报表开发(常见图片格式 gif jpg/jpeg png bmp)
图片格式特点:
gif格式图片压缩率高,但是只能显示256色,可能造成色彩丢失,可以显示动画
jpg/jpeg 压缩率高(有损),文件较小,较常用
png 综合了gif和jpg优势(无损),但是不能显示动画
选择:如果色彩要求不高动画则用gif,高保帧则用png

1.php绘图的基本原理和步骤(确定启用gd库)
创建画布->绘制图形(gd库函数)->输出图像到网页或另存->释放内存
//创建画布
$img=imagecreatetruecolor(300, 300);
//得到一些颜色
$red=imagecolorallocate($img, 255, 0, 0);
$green=imagecolorallocate($img, 0, 255, 0);
//开始画
//imageellipse($img, 150, 150, 100, 100, $green);
//写汉字需要知道支持中文的字体库路径,可以从C:\windows\fonts目录下拷贝一份
//imagettftext($img, 20, 0, 50, 50, $red, "SIMKAI.TTF", "大家好");
//设置回送类型
header("content-type:image/png");
//回送图片
imagepng($img);
//释放内存
imagedestroy($img);

如何拷贝图像到画布
//先加载图像
$srcImage=imagecreatefromgif('logo.gif');
imagecopy($img,$srcImage,x,y,srcx,srcy,srcw,srh);
getimagesize('logo.gif')可以得到图片大小

利用jpgraph做报表
jpGraph的安装和配置
1.解压到htpdocs目录
2.将src目录下的其他文件移动到example/jpgraph目录下,该目录需要在自己创建


php操作xml文件
xml作用:配置文件,通讯标准,小型数据库
CDATA节使用:
处理指令:
使用dtd约束xml:
1.引入 外部dtd
内部dtd
2.在 DTD 中,XML 元素通过元素声明来进行声明。元素声明使用下面的语法:或者,只有 PCDATA 的元素通过圆括号中的 #PCDATA 进行声明:
3,元素的声明规范
声明只出现一次的元素
声明最少出现一次的元素
声明出现零次或多次的元素
声明空元素
声明任意定义过的元素
声明出现零次或一次的元素
声明混合型的内容上面的例子声明了:"note" 元素可包含出现零次或多次PCDATA、"to"、"from"、"header" 或者 "message"。
3,属性的声明规范

属性声明拥使用下列语法:属性名称 属性类型 默认值
属性名称2 属性类型2 默认值2
>
属性类型的选项:CDATA 值为字符数据 (character data) ;(en1|en2|..) 此值是枚举列表中的一个值 ;ID 值为唯一的 id ;IDREF 值为另外一个元素的 id ;IDREFS 值为其他 id 的列表
默认值参数可使用下列值:具体值, #REQUIRED 属性值是必需的 ;#IMPLIED 属性不是必需的 ;#FIXED value 属性值是固定的
4.一个内部实体声明
一个实体由三部分构成: 一个和号 (&), 一个实体名称, 以及一个分号 (;)。
实体可以看成一个常量

在默认情况下,浏览器不去检测dtd,我们要自己写一段js测试代码
var xmldoc=new ActiveXobject("Microsoft.XMLDOM");
xmldoc.validateOnParse=true;
xmldoc.load("xml文件");
xmldoc.parseError.reason;
xmldoc.parseError.line;

phpDOM编程
常用3种技术:phpdom,php结合xpath,simplexml
1.phpdom操作
//创建dom对象
$xmldoc=new DOMDocument();
//加载文档
$xmldoc->load('test.xml');
//从根节点依次向下取
$stu=$xmldoc->getElementsByTagName('stu')->item(0);
$name=$stu->getElementsByTagName('age')->item(0);
echo $name->nodeValue ;
2.增删改
/创建dom对象
$xmldoc=new DOMDocument();
//加载文档
$xmldoc->load('test.xml');
//创建
$stu=$xmldoc->createElement('stu');
$name=$xmldoc->createElement('name','aaa');
$age=$xmldoc->createElement('age','15');
//挂载
通过元素的appendChild函数
//将内存数据写回
$xmldoc->save('text.xml');

//删除节点
removeChild()
$stu->parentNode->removeChild($stu);

xpath技术:以一定的层次关系跨层取
语法:/AA/*//BB/CC[last()] AA跟元素的所有子元素的所有BB子元素的最后CC
//BBB[@name='bbb']选择含有属性name且其值为bbb的BBB元素
使用方法
$xpath=new DOMXpath($xmldoc);
$nodelist=$xpath->query('//aaa/bb');

SimpleXML技术
$root=simplexml_load_file('xml');
子元素为其属性
$stu=$root->stu[0];

$string=<<simplexml_load_file($string);

网上支付技术:根据中间公司的要求提交参数

memcached 的基本概念
memcached 是一个高效的分布式的内存对象缓存系统 ,他可以支持把各种php的数据(array,对象,基本数据类型)放入到它管理的内存中.(从内存中取数据会大大提高程序效率)

安装和使用:
①下载memcached软件
②将memcached软件拷贝到某个目录,最好放在php开发环境目录下,便于管理
③安装 memcached –d install [卸载使用 memcached -d uninstall]
④启动 memcached 服务
(1)直接通过界面启动该服务
(2)在控制台下启动 memcached –d start [命令一览表]
⑤查看memcached 服务是否启动成功! 默认端口11211 netstat -an
如果你的网站,需要的memcached 的内存大于64m,应当这样启动


memcached –m 256m –d start

telnet工具(系统自带)操作memcache
1.连接到memcached:telnet 127.0.0.1 11211
增加:add key 0 60 5 [说明 add 是指令名 name 是key的名字 (是以key/value存放), 0 标志, 60 表示数据存放 60s 5表示 放入多大数据 ], 如果一个key已经存在,再放入是失败的.
获取:get key
更新:set key 0 60 5 [key存在,就是更新, key不存在,就是添加]
删除:delete key


php操作memcached服务(memcache扩展,memcached扩展,socket操作)
①在php.ini 中配置 extension 放入到 php/ ext /目录
②打开extension ;这里启用memcache.dll扩展 extension=php_memcache.dll
③编程测试代码(测试放入php的各种数据类型)
$mem = new Memcache();
$mem->connect("127.0.0.1",11211);
//添加 $mem->set("ch", 1234,false,300);
//获取 $val=$mem->get("ch");

使用php源码来操作memcached服务(无法加载memcache.dll的情况下)
引入外部memcache类

机制:
并发处理:libevent
数据即将饱满时,LRU算法删除不常用的数据
可做分布式:$mem->addServer('主机','端口');

细节
1.如果时间设置为0,则表示永不过期
2.重启服务,delete,flash会销毁数据

将session放入memcache中
1.修改php.ini(ini_set()函数):session.sava_handler=memcache
session.sava_path="tcp://host:11211,tcp://host2:port2"
2.如果不让修改文件则可以使用ini_set()函数(临时生效)
3.mem数据和session比较
mem主要的目的是提速,是一种无状态的数据,数据不和用户绑定
session数据和用户绑定,为有状态数据
mem的安全使用:windows下通过启用防火墙(服务放置在内网)
适合放入mem的数据:变化频繁,不稳定(如在线人数)
相似的技术有:redis。




相关文档
最新文档