今天开始学习PHP,感觉看过就忘了,啥都留不下比较遗憾,就边看边总结了,方便自己以后看,也方便别人快速入门,或者快速复习吧(awen)。
第一部分 搭建平台
1. 可以下载一个php for windows 版本 最省劲,直接安装后自动升级iis使其支持php功能。
2. 下载一个phpstudy 软件 ,可以支持php iis 模式 和php Apache 模式。安装后自动安装PHP,mysql数据库,phpmyadmin,openssl,zendoptimizer , eAccelerator,傻瓜式界面设置。
3. 自己下载php,mysql,apenche,自己安装配置,网上教程一大堆自己去查。
以上三种方法随便选。
第二部分PHP语言基础
1. 组成:mysql , php,Apache。mysql与Apache组成的php服务器的好处在于跨平台。
2. php基本语法 <?php …… ?>或者 <script language=“php”></script>。
注释可以用:// 或者 /*……..*/或者unix shell的#
3. php的变量大小写敏感,函数大小写不敏感。
4. 数据类型
integer,float(double或real),Boolean,string,array,object以及一些伪数据类型。
5. array数组
类似于枚举,又类似于json数据,其实他是一个数据结构,其数据ID既可以是默认的0,1,2,3….也可以是字符串,如:
ExampleA: $arra=array(1,2,3,”ok”,10.1);
ExampleB: $arrb=array(
“name”=>“zhang wen”,
“age”=>27,
“sex”=>“man”
);
ExampleC: $arrc=array(
“zhangwen”=>array(
“age”=>27,
“sex”=>“man”
),
“peter”=>array(
“age”=>30,
“sex”=>“man”
)
);
调用:arr[“zhangwen”][“age”];
void list();
像 array() 一样,这不是真正的函数,而是语言结构。list() 用一步操作给一组变量进行赋值。 注: list() 仅能用于数字索引的数组并假定数字索引从 0 开始。例如:list($name,$age,$sex)=$arrb[0]; print $name. “ is “.$age.”years old”;
array each ( array array)
返回 array 数组中当前指针位置的键/值对并向前移动数组指针。键值对被返回为四个单元的数组,键名为 0,1,key 和 value。单元 0 和 key 包含有数组单元的键名,1 和 value 包含有数据。 如果内部指针越过了数组的末端,则 each() 返回 FALSE。
例如:$arrtmp=each($arra);.
each();经常与list()配合使用遍历数组,如:
reset($arrb)
while(list($key,$val)=each($arrb))
echo “$key=>$val”;
mixed key(array); 返回数组中当前单元的键名。
mixed end(array); 把指针指向最后一个单元,并返回最后一个单元的值
mixed reset(array); 把指针指向第一个单元,并返回第一个单元的值
mixed current(array); 返回当前单元的值,并返回当前单元的值
mixed next(array); 把指针指向下一个单元,并返回下一个单元的值
mixed prev(array); 把指针指向上一个单元,并返回上一个单元的值。
注意:如果指向的单元值是0或者为空单元,则也返回false,所以不能正确的由此判断是否到达数组末端。可用each().
bool array_key_exits(mixed key,array search);
检查给定的键名key是否存在于数组search中。
array array_keys ( array input [, mixed search_value]);
返回数组中所有的键名,如果制定了search_value则只返回指定值的键名。
array array_values ( array input)
array_values() 返回 input 数组中所有的值并给其建立数字索引。
6. 函数
PHP函数定义与javascript,c基本相同,格式如下:
function(args)
{
/*Do something……;*/
}
PHP支持函数按值传递参数,引用传递参数,默认参数值,和可变长度参数列表四种参数类型。例如:
$s=”newstr”;
1. 按值传递: function func($str){}; 调用: func($s);
2. 通过引用: function func(&$str){}; 调用:func($s);
3. 默认参数值: function func($str=”initstr”); 调用:func();或者:func($s);
值得注意的是如果有多个参数,则有默认参数值的参数必须在末尾。
4. 可变长度参数函数(php4以上版本):function func(){};
int func_num_args(); 来获取参数个数
mixed func_get_arg(int arg_num); 来获取参数列表数组中的某个参数
array func_get_args(); 返回参数数组;
7. 一些数据类型的函数:
a:获取数据类型:gettype();var_dump();is_int();is_string();is_boolean();is_float();
b:数据类型转换:数据类型转换可以用settype();或者在变量前加数据类型,如(int)”124asdv”;结果为 124;
需要注意的是,0,0,.0,”0”,”“,NULL,未初始化数组,未初始化的对象转换成boolean类型时都为false;
c:操作函数:
bool empty ( mixed var)
如果 var 是非空或非零的值,则 empty() 返回 FALSE。换句话说,""、0、"0"、NULL、FALSE、array()、var $var; 以及没有任何属性的对象都将被认为是空 的,如果 var 为空,则返回 TRUE。
bool isset ( mixed var [, mixed var [, ...]]);
该函数用来确认var是否存在, 若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。;如: isset($name);
void unset ( mixed var [, mixed var [, ...]]); 释放销毁一个变量。
float round(
float val [, int precision]);
根据指定的精度
precision
将浮点数
val
四舍五入
int strlen ( string str); 字符串str的长度
int strpos ( string haystack, string needle [, int offset]) ;
字符串内检索一段字符串或一个字符。如果在字符串中找到匹配,该函数会返回第一个匹配的位置。如果未找到匹配,则返回 FALSE。注意 判断时返回值为0时,要与FALSE区分开。用”===“运算符确认。
8.时间函数
string date ( string format [, int timestamp])
返回将整数 timestamp 按照给定的格式字串而产生的字符串,一般用mktime()生成。如果没有给出时间戳则使用本地当前时间。默认值为 time()。
int mktime ( int hour,int minute,int second,int month,int day int year,int is_dst)
参数可以从右向左省略,任何省略的参数会被设置成本地日期和时间的当前值。 is_dst 在夏令时可以被设为 1,如果不是则设为 0,或者不知道是否为夏令时的话设为 -1(默认值), PHP 会尝试自己判断。
int time ( void )
返回自从 Unix 新纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数。
详细的设置,查文档去。
9. 表单
$_GET $_POST $REQUEST 是接受页面传递的表单信息的数组,基本跟asp一样$_GET是接收get方法传递过来的数据,$_POST是post方法传递过来的数据$_REQUEST 是总的数组。如:$_GET[“name”]
10. 引用
include() reqire()
您可以在服务器执行 PHP 文件之前在该文件中插入一个文件的内容。除了它们处理错误的方式不同之外,这两个函数在其他方面都是相同的。include() 函数会生成一个警告(但是脚本会继续执行),而 require() 函数会生成一个致命错误(fatal error)(在错误发生后脚本会停止执行)。例如: <?php include(“header.php”); ?>
11. 文件处理(学过c的省心了)
A)文件打开
resource fopen ( string filename, string mode [, int use_include_path [, resource zcontext]]);
打开一个文件,返回一个文件句柄,失败返回FALSE;
filename为要打开的文件地址名称,或者一个url;
mode 为访问类型: ”r”, ”r+”, ”w”, ”w+”,”a”,”a+”,”x”,”x+”;
use_include_path 是否在inclue_path中寻找文件,是则为1。
例子:
$handle = fopen("http://www.example.com/", "r");
$handle = fopen(”/home/test.txt”,”wb”);
$handle = fopen(”//home//test.txt”,”ab+”);
string file_get_contents ( string filename [, int use_include_path [, resource context]]);
将打开的文件返回为一个字符串。失败返回FALSE;
array file ( string filename [, int use_include_path [, resource context]]);
把打开的文件返回到一个数组中,行号即为数据ID。失败返回FALSE;
int readfile ( string filename [, bool use_include_path [, resource context]])
读入一个文件并写入到输出缓冲。返回从文件中读入的字节数。如果出错返回 FALSE 并且除非是以 @readfile() 形式调用,否则会显示错误信息。
bool file_exists ( string filename); 检测文件是否存在;
bool is_readable ( string filename); 监测文件是否可读;
bool is_writable(string filename); 检测文件是否可写;
bool is_file(string filename); 判断文件名是否为正常文件
int filesize(string filename); 返回文件大小,出错返回FALSE
string filetype(string filename); 返回文件类型,可能的值为:fifo,char,dir,block,link,file,unkown;
int filemtime(string filename); 获取文件最后修改时间(unix时间戳),出错返回FALSE;
int fileatime(string filename); 获取时间上次访问时间(unix时间戳),出错返回FALSE。
int fileowner(string filename); 返回文件所有的用户ID,通过posix_getpwuid()来解析为用户名.出错返回FASLE,
bool is_link(string filename); 判断文件是否一个符号链接
string readlink(string path); 返回符号链接指向的目标
B) 文件关闭
bool fclose ( resource handle);关闭一个已经打开的文件指针,文件指针必须有效,而且必须是fopen或者fsockopen成功打开的。
例子:fclose($handle);
C) 文件读取
string fgets ( int handle [, int length]);从文件中读取一行,并返回长度最多为length-1字节的字符串,如果换行符或者EOF都将停止读取,并将指针移向下一行。出错时返回FALSE。
string fgetss(resource handle,int length[,string allowanle_tags])
与fgets()相同,不过去掉了文本中的HTML或PHP标记。第三个参数为保留的标记
string fread(int handle,int length); 从文件中读取指定长度的字节。(可安全用于二进制文件);
mixed fscanf(resource handle,string format[,string &var1]);
从文件中格式化输入,如果只提供了前两个参数则返回数组,否则返回被赋值的数目,可选参数必须用引用传递。格式字符串中的任何空白会与输入流中的任何空白匹配。
D) 文件写入
int fwrite(resource handle,string str[,length]);
把str内容写入文件指针handle处。如果指定了length,当写入了length个字节后或者写完了str都将停止写入。返回值为写入的字符数。出错返回FALSE。
int fputs(resource handle,string str[,length]);
fputs为fwrite的别名
int file_put_contents(string filename,string data[,int flag[,resource context]]);
讲一个字符串直接写入文件,flag可以是 FILE_USE_INCLUDE_PATH 或/和 FILE_APPEND.本函数返回写入的字节数.注意本函数只是用于PHP 5 cvs。
12 目录,文件夹操作
bool is_dir(string filename); 判断文件名是否是一个目录
bool chdir(string directory); 改变当前目录
bool chroot ( string directory) 将当前进程的根目录改为directory
string getcwd(void); 取得当前工作目录
resource opendir(string path); 打开目录句柄
void closedir(resource dir_handle); 关闭目录句柄
string readdir(resource dir_handle); 从目录句柄中读取条目可能是文件名也可能是文件夹名,返回目录中下一个条目的文件名,也可以认为指针移向下一条目
array scandir ( string directory [, int sorting_order])
返回一个 array,包含有 directory 中的文件和目录。如果 directory 不是一个目录,则返回布尔值 FALSE
void rewinddir(resource dir_handle); 把目录流重置到目录开头
13 文件上传
服务器端php文件用全局数组$_FILES接收上传文件的各种信息。如:
· $_FILES["file"]["name"] - 被上传文件的名称
· $_FILES["file"]["type"] - 被上传文件的类型
· $_FILES["file"]["size"] - 被上传文件的大小,以字节计
· $_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
· $_FILES["file"]["error"] - 由文件上传导致的错误代码
bool move_upload_file(string filename,string destination);
本函数检查并确保由filename指定的文件是由PHP的 HTTP POST上传上来的,如果合法则将其移动为 由 destination指定的文件,否则返回FLASE。
bool is_uploaded_file ( string filename);
判断文件是否是通过http post上传的。注意,该选项可以用来定制安全机制。如果文件时上传的手动判断为不可以访问私密的文件,如密码文档等。
例子:
$filename=$_FILES[“file”][“tmp_name”];
if(is_upload_file($filename))
{
Move_upload_file($filename,”upload/uptext.txt”);
}
else
{
echo “不是上传的文件”;
}
14 cookies
setcookie(name, value, expire, path, domain);
该函数用于设置cookies,name为cookie项名称,value为值,expire为过期时间(秒),path为该cookie的作用区间目录,domain为该值作用域。另外需要注意的是该函数必须位于<html>标签之前,另外在发送 cookie 时,cookie 的值会自动进行 URL 编码,在取回时进行自动解码(为防止 URL 编码,请使用 setrawcookie() 取而代之)。
例子: setcookie(“user”,”awen”,time()+3600);
如果要删除该cookie则如下:setcookie(“user”,”awen”,-3600);
$_COOKIE变量为存储了cookie的数组。如果要取回某cookie值则如下操作:
$_COOKIE(“user”);
也可用is_set()来判断该cooike是否设置。
15 session
Session 的工作机制是:为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,亦或通过 URL 进行传导。
bool session_start ( void );
该函数用于启动session会话。必须应用于<html>标签之前。例如:
<?php session_start(); ?>
$_SESSION 变量用于存取session。
例子:
<?php
$session[“name”]=”awen”;
?>
可以用is_set()函数确认是否存在该session;可以用unset()函数释放该session。
bool session_destroy ( void );
该函数用于释放所有的session对象,彻底终结session。
第三部分 数据库操作(MySql)
本人发现(其实学的人都知道~~~),mssql与mysql的函数基本都一样,只不过mysql的函数索引字符都是以mysql开头,mssql当然是以mssql开头啦。哇哈哈。不过值得一提的是,php配置默认不支持mssql,要是想启动mssql支持,则打开php.ini文件,找到”;extension=php_mssql.dll”前面的分号(;)去掉,然后重启 Apache或者iis就可以了。
1. 连接数据库
l resource mysql_connect(string servername, string username, string password);
成功返回连接标识符,失败返回false
servername 为连接服务器地址,如:”localhost:8080”
username 为连接用户名
password 为连接密码
l resource mysql_pconnect ( [string server [, string username [, string password [, int client_flags]]]])
建立永久性数据库连接,成功返回连接标识符,失败返回false;如果在之前已经打开过永久连接,则返回此连接标识符,而不重新打开。
如果不指定参数,则函数根据默认服务器地址,以及服务器所有者用户名为用户名,并利用空密码连接数据库。
该连接不会由mysql_close函数关闭
2. 关闭数据库连接
bool mysql_close ( [resource link_identifier])
用于关闭mysql_connect函数生成的连接,如果没有指定参数则关闭上一个打开的连接。
3. 选择数据库
bool mysql_select_db(string dbName, $con);
4. 使用sql语句
resource mysql_query ( string query [, resource link_identifier]);
query 为要调用的sql语句
如果没有指定 link_identifier,则使用上一个打开的连接。如果没有打开的连接,本函数会尝试无参数调用 mysql_connect() 函数来建立一个连接并使用之。成功则返回查询结果,失败则返回false
5. 释放结果内存
bool mysql_free_result ( resource result);
释放生成的查询结果资源
6. 获取查询结果
l array mysql_fetch_row ( resource result);
返回根据所取得的行生成的包含数字索引的数组,如果没有更多行则返回 FALSE。
依次调用 mysql_fetch_row() 将返回结果集中的下一行,如果没有更多行则返回 FALSE
l array mysql_fetch_assoc ( resource result)
返回根据从结果集取得的行生成的以字段名为索引的关联数组,如果没有更多行则返回 FALSE。依次调用 mysql_fetch_row() 将返回结果集中的下一行,如果没有更多行则返回 FALSE
l array mysql_fetch_array ( resource result [, int result_type])
是 mysql_fetch_row() 的扩展版本。除了将数据以数字索引方式储存在数组中之外,还可以将数据作为关联索引储存,用字段名作为键名。 如果结果中的两个或以上的列具有相同字段名,最后一列将优先。要访问同名的其它列,必须用该列的数字索引或给该列起个别名。对有别名的列,不能再用原来的列名访问其内容。返回根据从结果集取得的行生成的数组,如果没有更多行则返回 FALSE。
可选的第二个参数 result_type 是一个常量,可以接受以下值:MYSQL_ASSOC,MYSQL_NUM 和 MYSQL_BOTH。本特性是 PHP 3.0.7 起新加的。本参数的默认值是 MYSQL_BOTH。
如果用了 MYSQL_BOTH,将得到一个同时包含关联和数字索引的数组。用 MYSQL_ASSOC 只得到关联索引(如同 mysql_fetch_assoc() 那样),用 MYSQL_NUM 只得到数字索引(如同 mysql_fetch_row() 那样)。
7. Mysql备注表:
主要功能其实也就那几个函数而已,其它函数就不详细说明了,大家去查手册,下面列出来方便查看。复习好啊。精深学就不合适了,毕竟没有永恒的语言,没有永恒的平台,只有永恒的程序设计技术。
l PHP MySQL 函数(来自http://www .w3school.com.cn点击链接查看详细说明)
函数 | 描述 | PHP |
取得前一次 MySQL 操作所影响的记录行数。 | 3 | |
mysql_change_user() | 不赞成。改变活动连接中登录的用户 | 3 |
返回当前连接的字符集的名称 | 4 | |
关闭非持久的 MySQL 连接。 | 3 | |
打开非持久的 MySQL 连接。 | 3 | |
mysql_create_db() | 不赞成。新建 MySQL 数据库。使用 mysql_query() 代替。 | 3 |
移动记录指针。 | 3 | |
从对 mysql_list_dbs() 的调用返回数据库名称。 | 3 | |
mysql_db_query() | 不赞成。发送一条 MySQL 查询。 使用 mysql_select_db() 和 mysql_query() 代替。 | 3 |
mysql_drop_db() | 不赞成。丢弃(删除)一个 MySQL 数据库。 使用 mysql_query() 代替。 | 3 |
返回上一个 MySQL 操作中的错误信息的数字编码。 | 3 | |
返回上一个 MySQL 操作产生的文本错误信息。 | 3 | |
mysql_escape_string() | 不赞成。转义一个字符串用于 mysql_query。 使用 mysql_real_escape_string() 代替。 | 4 |
从结果集中取得一行作为关联数组,或数字数组,或二者兼有。 | 3 | |
从结果集中取得一行作为关联数组。 | 4 | |
从结果集中取得列信息并作为对象返回。 | 3 | |
取得结果集中每个字段的内容的长度。 | 3 | |
从结果集中取得一行作为对象。 | 3 | |
从结果集中取得一行作为数字数组。 | 3 | |
从结果中取得和指定字段关联的标志。 | 3 | |
返回指定字段的长度。 | 3 | |
取得结果中指定字段的字段名。 | 3 | |
将结果集中的指针设定为指定的字段偏移量。 | 3 | |
取得指定字段所在的表名。 | 3 | |
取得结果集中指定字段的类型。 | 3 | |
释放结果内存。 | 3 | |
取得 MySQL 客户端信息。 | 4 | |
取得 MySQL 主机信息。 | 4 | |
取得 MySQL 协议信息。 | 4 | |
取得 MySQL 服务器信息。 | 4 | |
取得最近一条查询的信息。 | 4 | |
取得上一步 INSERT 操作产生的 ID。 | 3 | |
列出 MySQL 服务器中所有的数据库。 | 3 | |
mysql_list_fields() | 不赞成。列出 MySQL 结果中的字段。 使用 mysql_query() 代替。 | 3 |
列出 MySQL 进程。 | 4 | |
mysql_list_tables() | 不赞成。列出 MySQL 数据库中的表。 使用Use mysql_query() 代替。 | 3 |
取得结果集中字段的数目。 | 3 | |
取得结果集中行的数目。 | 3 | |
打开一个到 MySQL 服务器的持久连接。 | 3 | |
Ping 一个服务器连接,如果没有连接则重新连接。 | 4 | |
发送一条 MySQL 查询。 | 3 | |
转义 SQL 语句中使用的字符串中的特殊字符。 | 4 | |
取得结果数据。 | 3 | |
选择 MySQL 数据库。 | 3 | |
取得当前系统状态。 | 4 | |
mysql_tablename() | 不赞成。取得表名。使用 mysql_query() 代替。 | 3 |
返回当前线程的 ID。 | 4 | |
向 MySQL 发送一条 SQL 查询(不获取 / 缓存结果)。 | 4 |