介绍
php是一门在服务端运行的解释型脚本语言
php常用来动态生成html页面
<?php
代码块
.....
.....
?>
向浏览器发送文本
<?php
print "Hello World!";
?>
<?php
echo "Hello World!";
?>
<?php
print_r($_SERVER);
?>
echo是一个关键字,不是函数,可以一次输出多个值
print是一个函数,有返回值
使用\n换行并不会表现显示在页面上,而是表现在源码上
print_r可以更方便的显示数组,对象
向浏览器发送html
print "<b>Hello world!</b>";
print "<a href=\"page.php\">link</a>"; //注意,将标签中的"进行转义
添加注释
1.
/*
....
*/
2.
//....
3.
#....
4.
html注释
<!-- 2333-->
调试
打开display_errors来确保显示php发生的错误,可在phpinfo()中查看打开状态
打开display_errors的方法:ini_set('display_errors',1);
变量
php变量不分类型
定义变量:
$变量名;
$变量名=初始值;
当要在字符串中引用变量时要用双引号
单引号照字面意思处理,双引号对内容推断后再处理
html表单
<form>标签用来创建表单
action属性指向提交到的地址
method属性表示提交方式(post,get)
php接受表单数据
表单提交到php的数据以数组的方式传递
$_POST['key']
$_GET['key']
$_REQUEST['key'] //接收任何类型的数据
错误报告
与display_errors有关的配置问题是错误报告
error_reporting(0); //不报告任何错误
error_reporting(E_ALL); //报告所有错误
error_reporting(E_ALL&~E_NOTICE); //报告除notice之外的所有错误
格式化数值
round(a,b); //对数值a进行截取b位 遵守四舍六入五成双
number_format(a,b); //用法同round()
创建随机数
rand(a,b); //生成范围内的随机数,非必选参数
字符串
字符串及变量之间连接用.
如:
$s1="Hello ";
$s2="World";
$s3=$s1.$s2;
nl2br($var); //将变量中的换行符\n全部替换为<br/>
empty(); //检验一个变量是否拥有除0之外的其他值,无值回true
isset(); //与empty相反
html实体:有些字符,像(<)这类的,对HTML(标准通用标记语言下的一个应用)来说是有特殊意义的,所以这些字符是不允许在文本中使用的。要在HTML中显示(<)这个字符,我们就必须使用实体字符。
htmlspecialchars(); //把一些预定义的字符转换为 HTML 实体
htmlentities(); //将所有html标签转换为实体 html_entity_decode();//功能相反
strip_tags(); //移除所有html和php标签
urlencode($tmp); //对变量进行url编码 urldecode();//解码
字符串加密:
crypt(); //一种单向加密的算法
mcrypt_encrypt(); //可以解密的加密方法 用mcrypt_decrypt()解密
字符串查找:
strtok($a,b); //截取字符串$a中b前面的字符串
substr($a,b,c); //从第b个字符开始截取c个字符,其中b可为负 注意,索引从0开始
strlen(); //计算字符串中字符的数量
字符串替换:
str_ireplace($a,$b,$string); //将字符串string中的所有$a换成$b 此搜索不区分大小写,str_replace()区分大小写
trim(); //去除字符串前后的所有空格,制表符,换行符
数组
创建数组:
$list=array('apples','bananas','oranges'); //下标默认从0开始
指定下标:
$list=array(1=>'apples',2=>'bananas',3=>'oranges'); //如果1后面的元素不指定下标则延续第一个下标的值
range(1,10); //生成1-10的数组
range('a','z'); //生成a-z的数组
range(1,100,2); //生成的序列增量为2
向数组添加元素:
$list[]='111';
$list[]='222';
//这两句的含义是向数组list添加两个值为'111'和'222'的元素
count(); //获取数组中元素的数量
数组删除:
unset($tmp); //当$tmp为一个数组时就删除这个数组,当$tmp为数组中的一个元素时则删除这个元素
//这个函数能删除变量,并释放所占用的内存
也可以用array();来清空数组
数组合并
array_merge(); //将两个数组合并到一起
也可直接用加号来合并数组,如:
$array3=$array1+$array2;
$array1+=$array2;
数组访问
foreach($array as $key => $value) {
print "<p>Key is $key. Value is $value</p>";
}
$key是下标
$valu是下标$key的元素在$array中的值
创建多维数组
$fruits=array('apples','bananas','oranges');
$groceries=array('fruits'=>$fruits);
数组排序
sort(); //排序
shuffle(); //随机重组
数组的应用:
当有复选按钮时可以将用户选择的信息放到数组里再post,方便php处理
字符串和数组之间的转换
explode($a,$b); //将字符串$b以$a为基准分割为数组
implode($a,$b); //将数组$b中的值连成字符串,中间以$a分割
list(); //用来将数组元素赋值给单独变量
例:
$data=array('a',2,'c');
list($a1,$b1,$c1)=$data;
//此时变量$a1='a'
$b1=2
$c1='c'
list中不接受的元素可以不指定list(,,$c1)
创建web应用:
使用外部文件:
一些重复代码不需要重写,如头和尾,可以保存到另一个文件中,需要的时候再引用文件.
使用include()和require()
使用include()时,如果函数失败,脚本还会继续执行
使用require()时,如果函数失败,脚本会终止
<?php
include('header.html');
?>
.....
<?php
include('footer.html');
?>
定义常量:
define('name',value);
引用常量时不需要加$
使用时间和日期:
date(); //可以根据参数来输出相应的格式
mktime(hour,minute,second,month,day,year); //返回参数中的时刻到1970.1.1的秒数(即时间戳)
使用date()时需要先用date_default_timezone_set('...')来设置时区
使用粘贴表单:
当用户注册时会输入很多信息,如果一些重要信息每天的话需要重新注册,会重新回到注册页面
此时让用户有更好的体验,会将原来填的信息还原回去
可以通过_post['...']实现 注意,用户的输入要用htmlspecialchars()处理
输出控制:
一些函数,如header(),setcookie(),session_start()只能在没有任何东西发送到浏览器之前调用,如果已经发送了东西在执行这些函数,就会得到一些错误信息
一种解决的方法就是使用缓冲区
ob_start(); //启用输出缓冲,一般在页面开始时使用
ob_end_flush(); //将缓冲区中的信息发送到浏览器
ob_end_clean(); //清空缓冲区
ob_get_length(); //返回缓冲区中内容的长度
ob_get_contents(); //返回缓冲区中的内容
ob_flush(); //将缓冲区的内容发送到浏览器并清空缓冲区
ob_clean(); //清空缓冲区但不会关闭缓冲区
处理http头:
header()的常用方法就是重定向,需要发送一个location头,header('Location :page.php');
通常会后面会跟一个exit(),因为浏览器已经重定向到另一个界面
如果浏览器已经收到http头,则header_sent()会返回true
cookie和session:
创建cookie:
创建cookie要在发送其他信息到浏览器之前
setcookie('cookie_name','cookie_value');
读取cookie:
$_COOKIE['name'];
向cookie添加参数:
setcookie(name,value,expiration,path,domain,secure,httponly);
expiration为cookie设定一个时间长度,如果没有指定,则一直持续到浏览器关闭,php使用time()获取当前时间
path参数用来限制特定文件夹
domain参数用来限制web自域,如https://quzheng.baidu.com/
secure参数是限制只能使用安全连接(https),值为1启用
httponly参数是为了限制对cookie的访问,如防止JavaScript读取cookie
删除cookie
可以将cookie设为0来达到删除cookie的目的
setcookie('cookiename','');
也可以将cookie的过期时间设为负值
setcookie('cookiename','',time()-100);
注意使用以上方法时需要与设置cookie时的参数数量一致
创建session:
由于session需要sessionID来区分用户,可以将sessionID当作cookie,在创建session时会先创建sessionID,和创建cookie类似,要在任何信息发送到浏览器之前创建session
session_strat();
开启session时会随机产生sessionID,并向浏览器发送一个名为PHPSESSID的cookie;
通过_SESSION['names']='...'来设置session的值
可以在创建session前用session_name()来修改cookie的名称
用session_set_cookie_params()来修改session cookie的一些配置,如过期时间...
删除session:
删除session信息来实现删除session
$_SESSION=array();
session_destroy(); //从服务器删除session数据
函数
创建函数:
function function_name($arg1,$arg2=2333) {
....
return $arg1;
}
变量全局化:
使用global关键字,使变量与全局变量同步
文件和目录
创建文本文件:
file_exists('file_name'); //查找服务器是否存在文件名为..的文件
touch('1.txt'); //用来创建一个空白文档,前提php要有一个目录的写权限
写文件:
file_put_contents($file,$data,FILE_APPEND);
第一个参数为文件名或绝对路径,相对路径
第二个参数为要写入的内容
第三个参数为可选参数,选定时内容会写到原内容的末尾,没选定时会覆盖原来的内容
注意换行
unix和mac---\n
windows----\r\n
可以用常量PHP_EOF让php根据当前系统自动决定
锁定文件
当同一时刻多个用户写文件时会造成文件错误
file_put_contents();
第三个参数选LOCK_EX来锁定文件
当FILE_APPEND和LOCK_EX都要选时可以用管道符,file_put_contents($file,$data,FILE_APPEND | LOCK_EX);
用is_writable($file); //来判断当前状态文件是否可写
读取文件
使用file_get_contents($file); //会将文件内容按照一个字符串来读取
使用file(); //它可以将文件中的内容一行一行读取,一行占一个数组,所有内容在一个数组中
readfile(); //用于读取文件内容,并将文件内容发送到浏览器
处理文件上传:
form标签必须含有enctype="multipart/form-data"属性,必须用post方法
在php中使用$_FILES['file_name']['...']来获取上传的文件的信息
name->文件名
type->文件的MIME类型
size->文件的大小
tmp_name->文件在服务器的临时文件名
error->如果发生了错误的错误代码
上传后可以用move_uploaded_file();来移动文件
第一个参数是文件在服务器的临时文件名
第二个参数是要移动到的完整路径和文件名
移动成功返回1
为了能够上传文件,必须对php.ini进行设置
file_uploads必须启用
upload_tmp_dir设置php能放置文件的目录
文件目录
candir(); //以数组的形式返回参数中路径的文件及文件夹
filesize(); //返回文件的大小
filemtime(); //返回文件的修改时间(时间戳),可以用date()进行格式化
is_dir();
is_file();
glob(); //搜索文件名相匹配的文件目录,如(*.jpg filename*.doc)
fileperms(); //返回文件的权限
fileatime(); //返回文件的最后访问时间
fileowner(); //返回拥有该文件的用户的用户名
basename()或dirname() 返回完整路径字符串中的文件名或目录名
finfo_file(); //返回文件的MIME类型
创建目录
mkdir('dir_name',perms);
第一个参数为路径或文件夹名
第二个参数是权限,默认为0777
rmdir(); //删除现有的目录
md5(); //一个散列函数
增量读取文件
读取文件的一部分用fgets($strings,length);
feof(); //判断是否到文件的末尾
SQL
连接mysql
$dbc=mysql_connect(hostname,username,password); //连接后会返回一个访问点,可以用一个变量来接收
mysql_close($dbc); //断开数据库
数据库查询
mysql_query(SQL_command,database)
错误处理
mysql_error(); //返回mysql服务器返回的错误信息的文本信息
可以用@来防止php显示任何消息和警告
$dbc=@mysql_connect(hostname,username,password);
安全查询
$var=mysql_real_escape_string($var,$dbc); //对一些危险的字符,如' / "进行转义