PHP资料:PHP学习笔记 |

  • A+
所属分类:Seay信息安全博客

显示不全请点击全屏阅读

echo 变量使用$ 换行<br /> empty($v1);判断是否为空 isset($v1);是否创建了变量 unset($v1);释放变量 var_dump();查看变量类型 变量的地址赋值 $b=&$a; $number=0123;八进制 $xnumber=oxff;十六

bcadd(); 进行字符串(长数字)的运算 参见手册bc math方法 $i=’5465146456655645.4512357′; $j=’8787485256131465.4536461′; echo bcadd($i,$j,7);

单引号里不解析转义字符 双引号可以解析变量 $str=<<<EOT blablablablalblalblablablalblalblablalblalblablablablabal EOT; 数组 $array=array(“a”,”b”,”c”); print_r($array); var_dump($array); 注意区别javascript var a=new Array();

 

创建类 class Person{ public function show() { echo ‘blablabla’; } }

变量不声明 默认值为null

类型转换函数 $abc=intval($abc);floatval();strval(); settype($abc,”integer”);

php获得用户输入 传递参数 $_GET[‘x’] 在地址栏里后?x=101&y=98;

$b = &$a;//地址赋值

PHP中函数不能引用全局变量 若用 必须在函数内声明 global $i;然后才能引用 定义常量 define(‘STOP_COUNT’,”hello”) 前者为常量名 后为值 预定义常量 _FILE_ 当前的 文件名 _LINE_ 当前的代码所在行数 PHP_OS操作系统名 PHP_VERSION PHP的版本 TRUE|FALSE|NULL true false null的值 E_ERROR 可变长度参数数组 func_get_args(); 引用不在同一文件下的 PHP文件 include print_r($a);输出变量易于理解的信息

rand(int min,int max); decbin(’12’);十进制转二进制 bindec(‘111′);二进制转十进制 date(“Y-m-d H:m:s”,time());当前时间 date_default_timezone_set(“Etc/GMT-8″);

 

定义数组 $arr=array(1,54,123,”abc”,true); 或者 单个元素赋值 $con[0]=12;$con[1]=12;$con[2]=12; 输出数组 print_r($con);

不指定下标的数组赋值,自动为下标自增

php中数组的下标可以是字符串,$contact4=array(“id”=>12,”name”=>’tom’,”age”=>12,”email”=>”[email protected]”); 此时遍历用foreach foreach($arrayname as $key=>$val) echo $key.” “.$val.”<br />”;

用字符串下标定义二维数组 $contact2=array( array(“id”=>1,”name”=>”tom”,”age”=12,”email”=>’[email protected]’), array(“id”=>2,”name”=>”tom1”,”age”=13,”email”=>’[email protected]’), array(“id”=>3,”name”=>”tom2”,”age”=14,”email”=>’[email protected]’), ); //默认元素下标为0,1,2的元素也为一个数组

$contact3=array( “北京”=>array(“id”=>1,”name”=>”tom”,”age”=12,”email”=>’[email protected]’), “天津”=>array(“id”=>2,”name”=>”tom1”,”age”=13,”email”=>’[email protected]’), “上海”=>array(“id”=>3,”name”=>”tom2”,”age”=14,”email”=>’[email protected]’), );//下标为北京 天津 上海的元素也是数组

数组的each函数 指针 $contact32=array(‘id’=>5,’name’=>’tom’,’age’=>12); $in=each($contact32); echo $in[0]; //此时$in为一个数组,$in[0]为’id’ $in[1]为5

list函数 $array1=array(“awawa”,”abb”,”acc”); list($color,$set,$animal)=$array1;//这样三个变量就复制了上面数组中的元素

 

 

$_SERVER $_ENV $_GET 提交的信息显示在URL后面,安全性低 三种方式用FORM的SUBMIT 超链接 手工改变URL栏 $_REQUEST $_FILES $_COOKIE $_SESSION

数组函数 in_array(value,$array);是否存在值,返回TRUE FALSE in_array(value,$array,true);严格匹配 array_search(value,$array);返回下标 array_values($array);返回数组的值 array_keys($array);返回数组的键 array_key_exists(key,$arr);是否存在键 array_filter($array,”functionname”); 挨个元素进行functionname返回TRUE时 则把这个元素放入返回的新数组中 usort($arr,’mySort’); mysort($i,$j) 返回1,0,-1值的情况 array_slice($arr,start,num); array_combine($arr1,$arr2);结合,以$arr1中的元素作为下标 $arr2中的元素作为值 array_merge($arr1,$arr2);去掉重复项合并 array_intersect($11,$12);取交集 array_diff($11,$12);取两个数组的差集

array_rand($arr,n);随机取n个元素的下标 shuffle($arr);随机排序 array_sum($arr);求和 $number=range(0,50,10);自动创建数组 初始值为0,<=50,一次递增10

 

面向对象 创建类 class Car{ public $name; public $age; public function getName(){ return $this->name; } }

$car1=new Car(); $car1->name=’BMW7′; //类里的对象赋值 $car1->age=’10’;

echo $car1->getName().'<br />’;

引用类中属性 $this->name

构造方法 对象创建时候自动调用的方法 __construct 创建对象时$s1=new Student($a,$b);的参数$a,$b就是__consturct的参数 析构方法 对象销毁时候自动调用的方法 __destruct

private私有的变量只有自己类的函数才能调用,而不能直接$st1->age=15;这样引用 除非对__set函数进行改造才行,实际上也是使用函数进行调用 __set方法可以 class ctest{ public $name; private $age; private $sex;

private function __set($proName,$proVal){ if(‘sex’==$proName) {if(!($proVal==’男’||$proVal==’女’)) return;} if($proName==’age’) { if($proVal<=0||$proVal>150) return; } $this->$proName=$proVal; echo “aaa”; }

}

$st1->age=20;

继承(php不支持多继承,但可以用连环继承实现) 单继承 子类中不能访问到父类中的私有属性 class Son extends Father{}

private 同一个类能访问 protected 同一个类及子类能访问 public 以及外部都能访问 可放在属性,方法,构造方法前面

子类可以重写覆盖父类的方法,如果重写了还想调用父类方法,用parent::show();

常见关键字 final static const final写在方法前使方法不能被覆盖,写在类前不能被继承

static属性 一般的属性归属于成员,而STATIC属性归属于类,类似于全局变量 在引用static 属性时用 在外引用用 className::$staticName的格式 自身的函数引用时用self::$staticName格式

规定类中的常量 const AAA=”php”;不能改变的,引用时也 A::AAA;或者self::AAA; 类似于静态变量的引用,但是注意不是变量,不用$

__clone() __toString() 在echo时,要输出的内容不是string就会自动调用__toString()方法 __call($a,$args) 调用方法时默认调用

引用同一文件目录下的php文件用 include “user.php”;

function __autoload($className){//如果引用的类不存在,自动到classes文件夹下引用$className.class.php文件 include(‘classes/’.$className.’.class.php’); }

把对象序列化并储存在文件中 $a=new User(); $b=serialize($a); //把$a序列化后赋给$b file_put_contents(“bfile.txt”,$b);//把$b存储在当前目录下的bfile.txt文件中 反序列化 $a=file_get_contents(“file.txt”);//从file.txt中取出已经序列化的对象赋值给$a $b=unserialize($a);//把取出的对象反序列化后赋值给$b,此时$b就是一个正常对象了,可以正常使用

抽象类(不能实例化,用来让别的类来继承) abstract class Person{ abstract function language(); abstract function sport();

}

接口interface 其中所有的属性都是常量 所有的方法都是抽象方法,可以多继承 interface A{} interface B{} interface C extends A,B{}//接口的多继承

interface Animal{ function run();//函授都是抽象的 function sleep(); const STOP=TRUE;//属性都是常量 const RUN=false; }

class Cat implements Animal{ //类继承接口用关键字 implements function run(){ echo ‘跑得快’; } function sleep(){ echo ‘睡得香’; } function show(){ //因为是常量,所以输出时用self::STOP; echo self::STOP; echo self::RUN; } } 多态 比如两个继承自同一类的两个类,引用各自的方法而名字相同时,会自动由是谁的成员来判定用哪一个

 

printf()输出方式 printf(“%s book,page number %u <br />”,$str,$number);//类似C printf(“%0.3f<br />”,$number); $format=”The %2\$s book contains %1\$d pages.That’s a nice %2\$s full of %1\$d pages.<br />”; printf($format,$number,$str); $num=1234; $txt=sprintf(“%d0.2abcf”,$num); echo $txt;

 

str_pad(); <?php $input = “Alien”; echo str_pad($input, 10); // produces “Alien ” echo str_pad($input, 10, “-=”, STR_PAD_LEFT); // produces “-=-=-Alien” echo str_pad($input, 10, “_”, STR_PAD_BOTH); // produces “__Alien___” echo str_pad($input, 6 , “___”); // produces “Alien_” ?>

ucfirst()//首字符大写 ucwords() //各种首字符都大写 ul2br() //使\n在php中能实现换行功能 htmlentities($str); //把str中的html标签都转换为&特殊符形式 比如<转为&lt >为&gt

单子模式(单例模式) 构造方法设置为私有__construct() 不能在外new 把其中一个私有属性在自己的方法内new为对象(如果这个私有属性为空,则NEW,不为空则跳过,就只能设定一个了)

ord($a);返回其ASCII码值 ord($a)<128 说明为ASCII码 chr(97) 把ASCII码对应的值显示出来

echo (char(192).char(128));显示gb编码的汉字

 

function isUTF8orGBK($s){ if((ord($s[0])&224)==224){ //UTF8汉字由三个字节组成,第一个字节为111*****开始 if((ord($s[1])&128)==128){//第二个字节由1*******开始 if((ord($s[2])&128)==128){//第三个字节由1*******开始 return ‘UTF-8′; } } }

if((ord($s[0])&192)==192){ //GBK由两个字节组成,第一个字节为11******开始 if((ord($s[1])&128)==128){ //第二个字节以1*******开始 return “GBK”; }

} return NULL; }

mb_detect_encoding($var); $rs=iconv(“GBK”,”UTF-8″,$text);把$text从GBK转换为UTF-8格式 mb_convert_encoding($str,’UTF-8′,’gb2312′); strlen($s);//中文算两位,配套substr($s,4,2)使用 mb_strlen($s,’gb2312′);//中文算一位,配套mb_substr($s,5,2,’gb2312′)

PHP的正则表达式 echo preg_match(“/php/i”,”PHP is the web Php”);//i表示不区分大小写,返回值为int值表示找到匹配的个数 echo preg_match_all(“/php/i”,”PHP is the web pHp”,$out);//全局寻找匹配,参数$out为数组,存储符合的值内容 /^cow/ /^c.w/ .表示一个任意字符 分割 $str=”++tom+++++当当++++丁丁+++北大”; $fields=preg_split(“/\+{1,}/”,$str);//分割存储在数组中 foreach($fields as $f){ echo $f.'<br />’; }

$str=”猪,TMD真热”; $key=array(“/猪/”,”/tmd/”); $re=array(“哎呀”,”太”); $s=preg_replace($key,$re,$str);//在str中找到符合$key的替换成$re

function bbcode_format($str){ $str = htmlentities($str); $str = preg_replace(‘/\[b\](.*?)\[\/b\]/is’,'<strong>$1</strong>’,$str); // (.*?)任意字符 *表示若干个,?表示惰性匹配,只匹配第一个 $str = preg_replace(‘/\[i\](.*?)\[\/i\]/is’,'<em>$1</em>’,$str); //$1,第一个圆括号()匹配到的内容就是$1,第二个是$2 $str = preg_replace(‘/\[u\](.*?)\[\/u\]/is’,'<u>$1</u>’,$str); return $str; }

sha1加密 base64_encode($str);//base64加密,可以保证中文传输不出错 base64_decode($str);

分割字符串 $str=”活在天朝,就是选择了,hard模式”; $arr=explode(“,”,$str);

4月11日 错误处理,都写在页面开头 修改php.ini 中display_errors的属性来规定其是否显示错误 ini_get(‘display_errors’);为On显示为1,Off显示为0 ini_set(‘display_errors’,0);把值设置为0,关闭错误显示

也可以在一句话前加上 @ 来抑制这句话错误的报告

关闭错误报告 //与上面一样,都是为了让用户对错误不可见 error_reporting(0);//关闭错误报告 error_reporting(E_ALL);//报告所有的错误 error_reporting(E_ALL & ~E_NOTICE);//报告非注意错误 error_reporting(E_ALL ~(E_NOTICE|E_WARNING));

记录日志 if(!mysql_connect(‘localhost’,’root’,’wrongpwd’)); error_log(‘出错了…连接不成功’,3,’d:/tools/wamp/logs/php_error.log’); //0表示送到操作系统日志中,1表示发送到某email,2表示TCP服务器,3表示保存在文件中

error_log(“出错时间”.date(“Y-m-d H:i:s”,time()).”哪个文件”.__FILE__.”哪行”.__LINE__.”客户 IP”.$_SERVER[‘REMOTE_ADDR’].”\r\n”,3,’d:/tools/wamp/logs/php_errors.log’);

抛出异常对象(捕获异常,使异常后面的代码能够执行) $i=1;$i–; try{ echo “start<br />”; if($i==0) throw new Exception(‘出现异常啦!!!’); echo ‘不能被执行1<br />’; echo ‘不能被执行2<br />’; echo ‘不能被执行3<br />’; } catch(Exception $e){ echo $e->getMessage(); }

 

异常类继承 class ApplicationException extends Exception{ public function __construct($message,$code=0){ parent::__construct($message,$code); } public function __toString(){ return __CLASS__.’:[‘.$this->code.’]’.$this->message.'<br />’; } }

try{ throw new ApplicationException(‘程序异常’); } catch(ApplicationException $e){ echo $e; echo $e->getMessage();

} catch(Exception $e){ echo ‘||’.$e; }

 

时间mktime();//从1970年1月1日零点到现在的秒数 sleep(2);休眠两秒 $year=1991;$month=1;$day=5; $birth=mktime($hour,$min,$second,$month,$day,$year);

 

日期 date(“Y年m月d日”);//当前日期 date(“Y年m月d日”,mktime()-(3600*24));//前一天

microtime();显示微秒

图形处理 $image=imagecreatetruecolor(100,100);//创建一个真彩色图像 $yellow=imagecolorallocate($image,255,255,0);// imagefill($image,0,0,$yellow); header(‘Content-type:image/png’); imagepng($image); imagedestroy($image);

4月12日 验证码 header(“content-type:image/jpeg”);

$width=80; $height=40; $img=imagecreatetruecolor($width,$height);

$white=imagecolorallocate($img,255,255,255); $red=imagecolorallocate($img,255,0,0); $green=imagecolorallocate($img,0,255,0);

imagefill($img,0,0,$white);

for($i=0;$i<50;$i++) imagesetpixel($img,mt_rand(1,$width),mt_rand(1,$height),$red);//加点

for($i=0;$i<4;$i++){ imagesetthickness ($img,mt_rand(1,4)); imageline($img,mt_rand(1,$width),mt_rand(1,$height),mt_rand(1,$width),mt_rand(1,$height),$green);//加线 }

for($i=0;$i<4;$i++){ imagesetthickness ($img,mt_rand(1,4)); imagearc($img,mt_rand(1,$width),mt_rand(1,$height),mt_rand(1,$width),mt_rand(1,$height),mt_rand(1,$width),mt_rand(1,$height),$green);// 加弧线 }

imagestring($img,5,5,10,’abc123′,$red);//加字

$str=’中国银行’; //加汉字,要用utf-8编码 $str=iconv(“gbk”,”utf-8″,”中”); imagettftext($img,17,10,12,25,$red,”simkai.ttf”,$str);//简体中文楷体 (字体大小,倾斜度,X,Y,颜色,字体,字内容) $str=iconv(“gbk”,”utf-8″,”国”); imagettftext($img,13,20,26,25,$red,”simkai.ttf”,$str);//简体中文楷体 $str=iconv(“gbk”,”utf-8″,”银”); imagettftext($img,15,6,37,30,$red,”simkai.ttf”,$str);//简体中文楷体 $str=iconv(“gbk”,”utf-8″,”行”); imagettftext($img,12,8,48,20,$red,”simkai.ttf”,$str);//简体中文楷体

水印 $pic=imagecreatetruecolor(200,100); $black=imagecolorallocate($pic,0,0,0); $white=imagecolorallocate($pic,255,255,255); $font=”simkai.ttf”; $str=iconv(‘gbk’,’utf-8′,’猫扑大杂烩’); imagettftext($pic,25,0,40,30,$white,$font,$str);

$filename=’447.jpg’; //$filename2=’11.jpg’; $im=imagecreatefromjpeg($filename); //$im2=imagecreatefromjpeg($filename2); //imagecopymerge($im,$im2,1100,800,0,0,250,30,50); imagecopymerge($im,$pic,1100,800,0,0,250,30,50); header(“Content-type:image/jpeg”); imagejpeg($im); ImageDestroy($im);

缩略图

 

上传图片 <form action=”09_upload_do.php” method=”post” enctype=”multipart/form-data”> <input type=”hidden” name=”MAX_FILE_SIZE” value=’1000000′ /> 选择文件<input type=”file” name=”myFile” /><br /> <input type=”submit” value=”up” /> </form>

文件系统 参数为file的时候要能指定路径 PHP才能识别 filetype($fileName);返回值为file或者dir is_file($fileName) is_dir($fileName) is_readable($fileName);is_writeable($fileName);is_executable($fileName); filectime($fileName);//文件创建时间 filemtime($fileName);//文件最后修改时间 fileatime($fileName);//文件最后打开时间

filesize($fileName);//文件大小(字节)

basename($path);返回文件名与后缀 dirname($path);返回路径 $arr=pathinfo($path);//$arr[‘dirname’]为路径 $arr[‘basename’]为文件名与后缀 $arr[‘extension’]后缀

opendir();//打开指定目录,存在返回资源,不存在返回false readdir();//读取指定目录,指针移动第一个文件名尾 closedir();//关闭目录 rewinddir();//倒回目录句柄,指针移回头

一旦开始readdir($a)后 一定要记得关闭 closedir($a) 否则不能执行这个目录的删除操作

相对路径”file.txt” “./file.txt”一样 上一级目录下classes下的文件”../classes/2.php”

在windows或者unix下DIRECTORY_SEPARATOR都可代表不同的/

disk_free_space(“C:”)/1024/1024 空闲容量(字节)/1024平方得MB disk_total_space(“C:”)/1024/1024 总容量(字节)/1024平方得MB

mkdir(‘111’);创建一个目录 rmdir();删除一个空目录 unlink();删除文件

copy(‘1.jpg’,’2.jpg’) 复制文件

写入文件(如果没有,创建一个) $file=’1.txt’; $handle=fopen($file,’w’) or die(‘打开文件出错’); fwrite($handle,’qweqweqwe’); fclose($handle);

 

file_put_contents(“4.txt”,$data);

 

 

 

$file=’1.txt’; $handle=fopen($file,’r’); $contents=fread($handle,4);//读取4个字节,若要全读,4换成filesize($file) fclose($handle); echo $contents;

读取图片 $file=’1.jpg’; $handle=fopen($file,’r’); $data=”; while(!feof($handle)){ $data.=fread($handle,1024); } fclose($handle); header(‘Content-type:image/jpeg’); echo $data;

file_get_contents($file);//可以读文本,不能读图

fgets();一次读一行

 

文件锁

文件上传(单上传,多上传)

无刷新上传(iframe,ajax)

下载

数据库处理 mysql_num_fields($result,$i);返回有几项 mysql_num_rows($result);返回有几行数据 mysql_affected_rows();

SQL注入攻击 ‘ OR 1=1 # php.ini 中magic_quotes_gpc=On 把’改为/’

 

php跳转 header(‘Location:main.php’); $_SESSION session_start(); $_SESSION[‘message’]=…;

mysqli 用类操作数据库 $result=$mysqli->query(); while($row=$result->fetch_assoc()) echo $row[‘id’].$row[‘name’];

$result=$mysqli->fetch_object(); while($ob=$result->fetch_object()) echo $ob->id.’|—-|’.$ob->name;

事务处理 存储过程

SESSION COOKIES

setcookie(‘cookie111′,’100′,time()+86400,’/’); //名字,值,过期时间,路径

COOKIE在客户端的浏览器中.要删除只要设置其过期时间为mktime()-1 即设置其过期就好 $_COOKIE是一个数组 可以两层MD5加密嵌套

session 存放在服务器系统下,所以关掉浏览器就失效 $_SESSION[‘id’]为服务器为每个用户分配的ID 高版本的浏览器(FF,IE8)能认得一台电脑上两个页面上相同的用户 用session配合COOKIE来跟踪用户 如果用户禁用COOKIE 可以在所有的超链接上加 <a href=”10.php?<?php echo session_name();?>=<?php echo session_id();?>”>下一页</a> 当用户禁用COOKIE时 常量SID变自动为所需要的那一串代码 <a href=”10.php?<?php echo SID?>”>下一页</a> 销毁session unset($_SESSION[‘name’]); $_SESSION=array(); session_destory();

 

onclick事件只能调用javascript方法

 

 

XML <?xml version=”1.0″ encoding=”gbk” ?> 一个XML有且只有一个根元素 &lt; < &gt; > &amp; & &quot; ” &apos; ‘ <![CDATA[你好 100.0 ]] > 方括号的内容就可以忽略是否需要转义任意显示了 甚至能添加CSS样式….<?xml-stylesheet type=”text/css” href=”my.css”?>

增加一句 <!DOCTYPE 班级 SYSTEM “my.dtd”>使XML按照my.dtd规定的格式来 DTD规格如下,必须用UTF-8编码 <!ELEMENT 班级(学生+)> <!ELEMENT 学生(名字,年龄,介绍)> <!LEMENTT 名字 (#PCDATA)> <!LEMENTT 年龄 (#PCDATA)> <!LEMENTT 介绍 (#PCDATA)>

校验IE中的XML 用javascript写的 <script type=”text/javascript”> function check(){ var xml=new ActiveXObject(“Microsoft.XMLDOM”); xml.validateOnParse=”true”; xml.load(“5.xml”); alert(xml.parseError.reason); alert(xml.parseError.line); check(); } </script>

XML的作用 相当于一个小型的数据库 xml异构系统数据库的交互(如不同语言编写的程序之间交互) xml可以做作配置文件

外部DTD文件 内部DTD文件 写完name后面一定要加个空格 <!ELEMENT name (#PCDATA)> 必须放的是PCDATA <!ELEMENT name EMPTY> <name content=”abc” /> <!ELEMENT name ANY> 里面放啥都行(可以放上述定义过的任意标签)

<!ELEMENT books (book+)> 至少一本书 <!ELEMENT book (author+,title,content)> ()内表示按顺序来 |表示或者 (ID|CDATA|IDREFS|(男|女)) (#REQUIRED|#IMPLIED|#FIXED “oracle”) 标签名 标签属性名 属性数据类型 可选方式(必选,可选) <!ATTLIST name id ID #REQUIRED //ID表示唯一,不以数字开头命名 type CDATA #REQUIRED> //REQUIRED表示必须

 

 

 

通过PHP语言操作XML文件 获得元素 $xml=new SimpleXMLElement(‘1.xml’,null,true); 或者$xml=new SimpleXML_load_string(‘1.xml’); $xml->getName(); $xml->children(); $xml->book[0]->attributes();//获得book[0]里的属性集 $xml->book[0]->price;//获得第一个BOOK下的price标签的内容 $xml->book[0]->name[‘id’];//获得第一个BOOK的name标签的id属性 $xml->book[0][‘id’]; 或者 $string=<<<XML <books> <book> <name>1</name> <author>22</author> </book> </books> XML; $xml=SimpleXML_load_string($string);

新增元素 $s1=$xml->addChild(“book”); $sname=$s1->addChild(“name”,”ajax大全”); $sname->addAttribute(“id”,”a1″); 直接通过book[‘3′]下标来操作修改 $xml->xpath(“/a/b/c”); /AAA找到根节点 /AAA/CCC找到根节点下的CCC /AAA/DDD/BBB根节点下的DDD下的BBB //BBB找到所有的BBB //DDD/BBB所有的DDD下的BBB /AAA/CCC/DDD/*找到DDD下所有的结点 /*/*/*/BBB 所有有三个祖先的BBB //* 所有元素 /AAA/BBB[1] AAA下的第一个BBB /AAA/BBB[last()] AAA下最后一个BBB //@id 所有有id属性的元素 //BBB[@id]选择有id属性的BBB元素 //BBB[@*]有任何属性的BBB //BBB[not(@*)]所有没有属性的BBB

由于XML只能储存UTF-8 直接修改中文时要iconv(“gbk”,”utf-8″,”编程思想”)

 

 

Schema XML Schema Definition XSD 与DTD引用方式不太一样 <?xml version=”1.0″?>

<books xmlns:”http://www.w3school.com.cn” xmlns:xsi:=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”http://www.w3school.com.cn somefile.xsd”>//somefile.xsd为要引用的schema标准文件 <book> <name></name> <price></price> </book> </books> 与DTD定义方式不太一样,头尾是固定格式

<?xml version=”1.0″?> <xs:schema xmlns:xs=”http://www.w3.org/2001/XMLSchema” targetNamespace=”http://www.w3school.com.cn” xmlns=”http://www.w3school.com.cn” elementFormDefault=”qualified”>

%s //这个部分为SCHEMA的规范格式

</xs:schema>

 

%s格式举例 <xs:element name=”book”> <xs:complexType> <xs:sequence>//此处还可以规定xs:string xs:decimal xs:integer xs:boolean xs:date xs:time <xs:element name=”name” type=”xs:string” /> <xs:element name=”price” type=”xs:string” /> <xs:element name=”author” type=”xs:string” /> </xs:sequence> </xs:complexType>

DOM方式解析XML全部读取 SAX方式可以按照要求提取一部分 $xml=xml_parser_create(“UTF-8”);

xml_set_element_handler($xml,’start_handler’,’end_handler’);

xml_set_character_data_handler($xml,’character_handler’);

 

 

 

 

AJAX 局部刷新页面 界面美观

1.创建xmlhttprequest对象 if(window.XMLHttpRequest) //IE 7及以上 var xhr=new XMLHttpRequest(); else var xhr =new ActiveXObject(‘Microsoft.XMLHTTP’);//IE 6

 

2.准备好发送的请求url地址和参数 var url=’ajaxlogincheck.php?username=’+u.value;

 

3.定义处理返回结果的方法 xhr.onreadystatechange=result; //result是一个函数,在下面定义过了

 

4.发送请求 xhr.open(“get”,url+”&t=”+Math.random(),true);//打开链接 xhr.send(null);//发送请求

5.接受服务器返回结果 if(xhr.readyState==4 && xhr.status===200){ document.getElementById(“state”).innerHTML=xhr.responseText; } 或者返回的是XML格式 xhr.responseXML; 此时返回结果的PHP文件里要加标头 header(“Content-Type=text/xml;charset=gbk”);//注意 要标明 text/xml !!!

 

6.判断状态xmlhttprequest(接受完成) 7.判断状态 http 8.接受返回结果 (xml/text两种) 9.显示

显示中文表头为(注意 是冒号) header(“Content-Type: text/html;charset=GBK”);

btn.onclick=function() //onclick 全都小写

写javascript的时候就直接写<script></script>就行了

用ajax实现省市县三级联动(用ajax时接受xml方式的返回结果) 1.显示页面发送一个请求到数据页面 附带province的值 2.数据页面判断province的值echo 不同的xml文件(即各个省的城市:如$city=”<root><city>郑州</city>< city>洛阳</city></root>”) 3.接受返回结果 var xml=xhr.responseXML; 此时$xml为一个xml对象 4.var cities=xml.getElementByTagName(“city”); 此时cities为一个元素集合 5.其中郑州,洛阳为 cities[0].firstChild.data cities[1].firstChild.data 6.把上述数据加载到city的select中 用document.getElementById(“city”).options[1]=new Option(“郑州”,1);的格式添加选项

 

ECLIPSE设置环境变量 环境变量JAVA_HOME PATH里再加个java/bin

三个范式 取消重复列 取消部分依赖 取消传递依赖

EXPLAIN select * from t_user where id=7;

cvs subversion [版本控制] 多人开发同一个项目 cvs控制不同版本

具体项目实例 仿博客系统 新建各种文件夹来分类

session_cache_limiter(‘private,must-revalidate’);

mail方法发送邮件

邮件类库发送

上传文件 <form action=”upload_do.php” method=”post” enctype=”multipart/form-data”> <input type=”hidden” name=”MAX_FILE_SIZE” value=’1000000′ /> <input type=”hidden” value=”create” name=”action” /> <input type=”hidden” value=”<?php echo $_GET[‘id’]?>” name=”id” /> <dd><input type=”file” value=”” name=”myFile” /></dd> 过滤不符合要求的格式 list($maintype,$subtype) = explode(‘/’,$_FILES[‘myFile’][‘type’]); //echo $maintype.’|’.$subtype.'<br />’;

 

//application if($maintype==’text’){ echo ‘不能上传文本文件<br />’; exit; }

 

JQuery JS框架之一 javascript类库 最流行的 还有EXT JS等

$(document).ready(function(){alert(“OK”)});

基本选择器 单个选中ID $(“#id”) 等价于 document.getElementById(“id”); 标签选择 $(“tagname”) 等价于 document.getElementsByTagName(“tagname”); 使用jquery对象找不到值或对象时不会报错

class选择 $(“.sp1”); //<div> 全选 $(“*”) 选多个 $(“div,span,input”)

循环 $(“.sp1″).each( function(i){ alert( $(this)+”—“+i ) } );

css $(“#adiv”).css(“background”,”red”);

层次选择器 $(“body div”) 匹配body以下所有的div元素(无论儿子,孙子,什么关系) $(“body>div”) 匹配body的儿子元素 $(“#one+div”) 匹配id为one元素后面的 紧跟的 第一个 同辈儿 div元素 $(“#one~div”) 匹配id为one元素后面的 所有 同辈儿的 div元素 $(“#one”).sibling(“div”) 匹配id为one元素 不论前后的所有同辈儿div元素

过滤选择器 (都是以:开头) $(“tr:first”) 选择第一个tr $(“tr:last”) 选择最后一个tr $(“tr:even”) 选择偶数tr $(“tr:odd”) 选择奇数tr $(“tr:eq(0)”) 选择第一个匹配的tr (0为索引值) $(“tr:gt(3)”) 选择比索引值为3大的tr $(“tr:lt(3)”) 选择比索引值为3小的tr $(“:header”).css(“background”, “#EEE”) 匹配h1 h2 h3之类标题元素 固定格式 $(“:animated”).css(“background”, “#EEE”) 匹配正在执行的动画元素 $(“div:contains(‘abc’)”) 含有abc的所有div $(“div:has(“p”)”) 含有P标签的div $(“div:has(.mini)”) 含有class为mini元素的div $(“div:empty”) 无子元素的div $(“div:parent”) 有子元素的div

 

toggle方法(点击一次执行括号里的函数fn1,fn2,fn3)等 click的增强版

animate动画 function(){ $(“.content”).animate(//animate( {css} ,1500); 前面写要变成的css样式,后面写多久完成 { width:”90%”, //注意90%要加“”,后面的符号是 , height:”1000px” //后不加符号 },1500); }

 

属性选择器 $(“div[id]”) 有id的div $(“div[id=’one’]”) id为one $(“div[id^=’te’]”) id以te开头 $(“div[id$=’st’]”) id以st结尾 $(“div[id*=’es’]”) id中包含es的 $(“div[id][title*=”es”]”) 多重属性符合选择 包含id并且title中有es的

 

子元素选择器 “-”是代表符号 $(“.one:nth-child(2)”) class为one的元素的第 二 个子元素 $(“.one:first-child”) class为one的元素第 一 个子元素 $(“.one:last-child”) class为one的元素最后一个元素 $(“.one:only-child”) class为one 如果只有一个子元素则匹配

nth-child(even/odd/2/3n/3n+1) 3n为3的倍数 3n+1为3n+1

表单选择器 $(“input:checked”) $(“select option:selected”)

smarty分离业务逻辑和现实逻辑 安装smarty 解压后复制libs到目录下 创建一个templates文件夹和templates_c文件夹

在index.php中 每次饮用require其中的smarty.class.php 声明一个smarty类

{$person->name} //类对象的name属性 {$contact.phone.home} //数组contact的phone数组的home {$smarty.get.page} //$_GET[‘page’] {$smarty.post.page} //$_POST[‘page’] {$smarty.session.id} //$_SESSION[‘id’] {$smarty.server.SERVER_NAME} //$_server[‘SERVER_NAME’]

{if $color eq ‘red’} 是红色的 {elseif $color eq ‘white’} {else} {/if}

{if $age===12 || $color===”white”} 白色12岁 {/if}

{foreach from=$contact item=row} {foreach from=$row item=col key=key} {$key}=>{$col}<br /> </foreach> </foreach>

{section loop=$contact name=line} {$contact[line].name}<br /> {$contact[line].sex}<br /> {$contact[line].add}<br />

smarty给页面生命周期 页面静态化 $smarty->caching=true; $smarty->cache_dir=’./cache’; $smarty->cache_lifetime=60*60*24;

 

解析当当项目 引入styles文件夹,images文件夹 引入index.php 发现有require_once ‘lib/config.inc.php’ //新建lib文件夹,引入config.inc.php 其中有连接数据库的参数,项目基准路径,进行更改 //config还有require_once $gBaseDir.’lib/smarty_cms.inc.php’ 引入之是一个扩展smarty的继承类(需要include原类),根据几个路径在lib/smarty/新建templates templates_c configs cache文件夹,并且赋值app_name为当当 $oSmarty->display($gTemplatePath.”index.html”); //声明oSmarty为SmartyCMS的对象 其display为利用模板(”一堆路径/index.html”) //所以此处引入所有的模板,新建templates文件夹,引入各种静态页面html模板 index.php生效

引入login.php,regUser.php,car.php,orderInfo.php,affirmOrder.php生效 简单复制剩下的页面bookDetail.php bookLists.php testPage.php都生效

要把页面写活 对数据库信息操作 要写各种控制数据库的方法和显示页面的方法,在lib下新建没有mysql_db.php 和 dangdangService.php两个方法引用文件 mysql_db.php文件 用一个类来

 

原文:http://hi.baidu.com/qcomdd/item/024b5302e0659f90a3df43b2

 

Tags:

PHP资料,

如果您喜欢我的博客,欢迎点击图片定订阅到邮箱填写您的邮件地址,订阅我们的精彩内容: 也可以点击链接【订阅到鲜果】

如果我的想法或工具帮助到了你,也可微信扫下方二维码打赏本人一杯咖啡
PHP资料:PHP学习笔记 |