1:
配置:在开始程序中apache的Edit the Apache httpd.conf Configuration File进行
配置
a:更改DocumentRoot,即我的项目的存放路径
b: 同时更改DIRECTORY
c: DirectoryIndex(目录索引,也就是在仅指定目录的情况下,默认显示的文件名)
,可以添加很多,系统会根据从左至右的顺序来优先显示,以单个半角空格隔开,比如
有些网站的首页是index.htm,就在光标那里加上“index.htm ”文件名是任意的,不
一定非得“index.html”,比如“test.php”等,都可以。
我这里未做更改,项目存放路径为安装目录下的htdocs(相当于tomcat的webapps)
命令启动apache:
可以通过命令行开关来控制Apache服务。要启动一个已经安装的Apache服务,可以使用
:
httpd -k start
要停止一个已经安装的Apache服务,可以使用:
httpd -k stop
或
httpd -k shutdown
要重启一个运行中的Apache服务,强制它重新读取配置文件,可以使用:
httpd -k restart
*****************************
---------------------------------------
*********************************************
php语法简介:
1:判断类型
instanceof 用于确定一个 PHP 变量是否属于某一类 class 的实例(如属于person类),
通常在面向对象开发中可能用的。$xiaoming=new person;$xiaoming.instanceof person
2:表示两内容的拼接
$c=$b.$a; //$a 具体表示内容和 $b 表示内容拼接
echo "计算结果是=".$res;
3:定义常量(变量名前不需加$)
4:引入另一个php页面,并使用其中函数
require
这两个区别为,前者遇到即包含文件,后者会判断是否已经包含过了,如果包含过了,
则不再包含文件。一可以节省资源,二可以避免重复定义的错误。
redeclare: 再次声明.
include: 包含,包括
相同的地方就是,都是可以引入别的页面.
不同的地方是: include 如果出现了错误,会继续执行,require 出现错误,则会终止
程序.
证明:
小结: 我们应当使用哪个?
我们做项目的时候,基本上使用的
注意我们的requir_once / require ... 应当放在 php 最前面.
5: php的变量的类型都不申明的,这跟java有很大的区别,在以后写代码的时候记住
php 的变量的数据类型,是变化的,php变量的数据类型是由运行时的上下文决定
如:private $age;//在赋值的时候确定
java--private int age;
但是属性 必须指定访问修饰符!!
6://定义全局变量---注意啦。声明和赋值写成一句话居然会报错!
global $global_nums;//声明,这个语句是放在<?php ..位置的,而不是放在像java放在class 括号内的!
$global_nums=0;//赋值
在函数内使用的时候需要再次申明一下,不然报错
global $global_nums;
7:php的一些常量,可以去查手册
__LINE__ | 文件中的当前行号。 |
__FILE__ | 文件的完整路径和文件名。 |
*********接收表单的参数
<form action="homework01.php" method="post">
<input type="text" name="layer"/>
<select name="shape">
//在php页面接收
***********类的成员和函数调用
$cat1=new Cat();//前面不需要加Cat
$cat1->name="小白";//$对象名->属性名;必须是public或者protected(看情况)才能访
问
$cat1->speak();//调用函数,不是使用.了
****************函数传参时是传的地址还是值
传的是值,如果要传地址需加&
***************构造方法
在php 5 中一个类可以同时有 两种形式的构造方法--php方法前都要加function关键字!
__construct() 和 类名() , 当两个同时存在的时候,优先调用__construct(), 请大家以后使用__construct()
public function __construct($iname,$iage){
}
注意:
(1)一旦自定义了一个构造函数,默认的
构造函数就被覆盖了,这时在创建对象的时候就要使用自定义的构造函数.
(2)一个类只能有一个构造函数.(不能重载),子类不会默认调用父类的构造函数,这与java不同!
构造方法的8点说明:
①构造方法名和类名相同(php4版),php5版的构造方法
名可以和类名相同,也可以是__construct()
②构造方法没有返回值
③主要作用是完成对新对象的初始化,并不是创建对象本身。
④在创建新对象后,系统自动的调用该类的构造方法
⑤一个类有且只有一个构造方法,在php5后虽然__construct()
⑥如果没有给类自定义构造方法,则该类使用系统默认的构造方法。
class Cat{
funciton __construt($name){
}
}
$cat1=new Cat();
⑦如果给类自定义了构造方法,则该类的默认构造方法被覆盖。
⑧构造方法的默认访问修饰符是public
**************************** 析构方法 (java没有,自动的垃圾回收机制)
这里我要谈到面向对象和面向过程的问题!
在csdn上发现一个问题:
--1--
有个VC写的DLL有3个方法,
Open();
DoSomething(); 耗时0.1秒
Close();
--1--
我现在已经写了一个javaBean,对应3个方法,并且调试成功。
jOpen();
jDoSomething();
jClose();
但是由于DoSomething是被多次频繁调用的方法,所以不能每次都去Open,Close.
所以我希望在构造的时候Open一次,直到用完了再Close。
这样是不是要写一个“静态类”一样的东西保证构造时Open一次,一直使用,到析构的
时候再做一次Close就够了。
1.这个静态类怎么写呢?
2.java没有析构函数,Close的时机也不好确定。
解答:在1中这是典型的面向过程的思路,所以在java中的面向对象的过程必须是建立一个对象,然后再对象中进行此三个方法的定义,然后再调用(怎么调用看自己的控制)不过这个实例的close方法是怎么代表其消亡的呢?如果不想每次去调用open的话那么可以使用单例的模式!java的finalize()方法,在jvm中我将研究finalize
php中的析构函数:注意一个类最多只有一个,且无返回值
1.
2.
3.
4.
(1)
(2)
(3)
(4)
**************************get/set方法
这个知识点在java中我都有点不记得了,在类中的成员属性修饰符一般是使用private
修饰的(即只限在本类中使用)如果不使用get/set方法在新建一个类的时候
Person p=new Person();//p是无法设置age等属性的,很自然的我们使用p.setAge(1)
private $age;//不写类型的啊
php还有一种特别的,就是不要对每个属性写get/set方法,直接一起解决,但不建议使用。通过 一对 __set
**********类中的属性和方法在各个方法中的引用必须加$this->
function test11(){
*****************继承。和java一样不支持多继承
class 类名 extends 父类名{
}
1.
2.
3. 当创建子类对象的时候,默认情况下,不会自动调用父类的构造方法.
4.
4.1
*******************静态static
静态的变量的基本用法
1.
[访问修饰符] static $变量名;
2.
如果在类中访问
如果在类外访问:
*****************重载
基本概念: 函数名一样,通过函数的参数个数或者是参数类型不同,达到调用同一个函数名,但是可以区分不同的函数。。。为什么在这里要写上定义呢,因为在php中根据这个定义很容易出错!
class
}
public function test1($a){
}
}
重载
$a =new A();
$a->test1();
$a->test1(456);
上面的这用用法是不对.
PHP5 中如何通过魔术函数来实现方法重载的效果,我觉得一点都不好用,官方就不推荐,看看php6怎么解决的!
代码说明
<?php
?>
小结: 关于重载
①
②
***********************重写,在父类中不知道怎么写某个模块的时候可以再子类中进行重写,如动物的叫声!
关于方法重写细节讨论
1.
2.
3. 注意
注意这里面出现了多态,如当你没有在子类中重写这个方法的时候,那么子类调用的还是父类的方法!
*******************************抽象类
1.
快速入门
当然,1。 在实现方法覆盖的时候,访问修饰符可以不一样。2.但是必须满足: 子类的访问范围>=父类的访问范围3.含抽象方法的,必须是抽象类,抽象类但并不需要全是抽象方法abstract class Animal{ abstract public function cry();4.
*******************************接口
interface iUsb{
//属性
//方法
}
//1.当一个类实现了 某个接口,则要求该类必须实现这个接口的所有方法
//接口的方法都不能有方法体, 接口它的作用就是 声明一些方法,供其它类来实现. 接口还体现编程中我们希望的效果 高内聚低耦合 的
什么情况下可以考虑使用接口----项目经理常做的工作
1.
2.
3. 当多个类 ,他们之间是平级的关系. 这些类都会去实现某个功能,只是实现的方式不一样
******************************* final关键字和const关键字
用法Final:不希望类被继承,不希望方法被修改,注意final关键字不能去修饰属性.java可以
用法const:当你有一个属性,不希望被修改,则考虑使用const 做成常量。
定义const 常量名=赋初值;
使用 类名::常量名; 接口名::常量
比较一下java 的final 修饰符
Java 的final修饰的时候注意两种,一种是修饰基本数据类型如final int i=100;必须赋值,且i=100永远不变,另一种是修饰对象引用,比如说final Husbrand hl;那么一个女生在引用这个老公对象后就永远不可以换老公,但是老公本身是可以改变的(职业,工资等属性)!!
******************************错误和异常处理介绍 处理错误方式①-die
php处理错误的三种方法
1.
使用方法如下 :(1)
if(!file_exists("aaa.txt")){
(2) 更简单的方法
file_exists("aaa.txt") or die("文件不存在!!!");
在php中对错误有不同的级别区分:
案例入门 :
<?php
//当然还可以写set_error_handler("my_error",E_NOTICE);….
?>
异常处理:与java类似
try{
}catch(Exception e){
//1. 自己处理
//2. 自己不处理,将其抛出.
}
**********************************php错误日志
保存错误日志的用处是便于,后续分析.
基本方法是使用 error_log来实现.
基本用法是:
//自定义错误函数
现在我们要把时间保存下来.
*******************************http协议深度剖析①-http请求详解 防盗链技术
http协议
1.
2.
3.
http协议的-http请求(request)
基本结构
请求行
消息头
消息体(实体内容)
举例:
GET /test/hello.html HTTP/1.1
【表示发送的get请求, 请求资源是/test/hello.html 】
Accept: */* 【表示客户端可以接受任何数据】
Referer: http://localhost:80/test/abc.html 【1.表示我是从哪里来】
Accept-Language: zh-cn 【页面语言】
User-Agent: Mozilla/4.0
Accept-Encoding: gzip, deflate 【表示接受什么样的数据压缩格式.】
Host: localhost:80 【主机:80】
Connection: Keep-Alive
现在我们想知道,客户端究竟给服务器发送的内容
如果我这个http1.php. 不希望 192.168.1.33 这个用户访问.
在服务器端,我们可以通过$_SERVER来获取我们需要的信息
重要的有:
HTTP_HOST
REMOTE_ADDR 访问该页面的ip
DOCUMENT_ROOT
REQUEST_URI 可以获取 请求的资源名
http请求有两种主要的方式
get / post
get 和post的区别有哪些
1.
2.
2.1
2.2
3.
现在我们实际使用一些http请求,完成一个防盗链的练习.
☞ http请求不是固定,是根据实际情况的,比如REFEER.
********************************* http协议深度剖析②-http响应详解(302 304码运用)
简单定义: 一个Http响应代表服务器给浏览器回送的数据,同时告诉浏览器应当怎样处理数据.
1.
状态行
消息头信息
实体信息
快速入门
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Thu, 13 Jul 2000 05:46:53 GMT 【告诉浏览器 请求的页面 的时间 】
Content-Length: 2291
Content-Type: text/html
Cache-control: private
hello
举例说明Http响应的实际应用
302状态码的使用
比如我们现在希望访问a.php 页面,让其自动重定向到b.php
基本用法使用
<?php
?>
细节: 302 状态码也可以让其跳转到外网去
404 最常见的状态码
404一般说就是该页面不存在
304 码主要是告诉浏览器,请求的资源不需要更新
<?php
?>
上面说明了 304的具体用法
HTTP/1.1 304 Not Modified
Date: Tue, 13 Sep 2011 02:10:38 GMT
Server: Apache/2.2.17 (Win32) PHP/5.3.5
Connection: Keep-Alive
Keep-Alive: timeout=5, max=99
ETag: "12d00000000572c-6f69-3e1d849f35000"
******************************http响应详解(禁用缓存设置)
下面是比较详细的一个Http响应
Location: http://www.baidu.org/index.php
Server:apache
Content-Encoding: gzip
Content-Length: 80
Content-Language: zh-cn
Content-Type: text/html; charset=GB2312
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT 【表示浏览器请求资源,最新时间】
Refresh: 1;url=http://www.baidu.com
Content-Disposition: attachment; filename=aaa.zip
Transfer-Encoding: chunked
Set-Cookie:SS=Q0=5Lb_nQ; path=/search
Expires: -1
Cache-Control: no-cache
Pragma: no-cache
Connection: close/Keep-Alive
Date: Tue, 11 Jul 2000 18:23:51 GMT
演示如何通过Http响应,控制浏览器间隔一定时间去跳转.
<?php
?>
演示如何通过Http响应控制页面缓存,在默认情况下,浏览器会缓存页面.
<?php
?>
****************************************** http响应详解(文件下载)
代码如下:
<?php
?>
*********************************************** PHP数据库编程①-使用mysql扩展库
说php有三种方式来操作我们的mysql数据库
①
②
③
☞ mysql扩展库(操作数据库的函数)和mysql数据库的区别
1.mysql数据库是用于存放数据.
2.mysql数据库的三层结构示意图
1.
代码
<?php
//6. 释放资源,关闭连接(必须)
//
?>
细节 :
1.
2.
3.
分别是
mysql_fetch_row($res)
mysql_fetch_assoc($res)
mysql_fetch_array($res)
mysql_fetch_object($res) ,把一行数据,当做一个对象返回.
演示通过mysql扩展库,进行dml操作
代码:封装成一个工具类
<?php
/$sql="insert into user1 (name,password,email,age) values('小明',md5('123'),'xiaoming@sohu.com',34)";
?>
PHP数据库编程⑥-使用mysqli扩展库
使用php 的mysqli扩展库去操作mysql数据库
简单介绍:
mysqli (mysql improve mysql扩展库的增强版)
mysql 扩展库 和
1.
2.
用appserver
php版本5.2.x
$mysqli=new MySQLi(“localhost”,”root”,”roo3t”,”test”);
//安照变相对象的方式
if($mysqli->connect_error){
}
// 考虑兼容低版本
if(mysqli_connect_error()){
}
编写一个程序,这个程序从user1表中读取数据,并打印在网页中。(使用mysqli完成.)
1.
1.1.
extension=php_mysqli.dll
1.2 建库,建表.
这里我们使用原来的user1表.
1.3 编写代码
<?php
?>
我们再使用面向过程的方式给大家演示一下.
代码:
//1.得到mysqli连接
☞ 在mysqli 扩展中,也提供了四种方式来获取mysqli result结果集mysqli_result::fetch_assoc <==>
mysqli_result::fetch_row
mysqli_result::fetch_array <===> mysql_fetch_array
mysqli_result::fetch_object<===> mysql_fetch_object
这里我们推荐大家使用前两种效率较高
☞ 在mysqli释放结果集有三种方式:
void mysqli_result::free ( void )
void mysqli_result::close ( void )
void mysqli_result::free_result ( void )
☞ mysql 的sql 语句的特别说明:
如果操作的字段类型是 string型,则要求我们的 要用 ‘’ 包括。
如果操作的字段类型是 数值型,则可以用 ’80’ 包括,也可以不用
mysqli的增强-批量执行sql语句
批量执行 dml语句
基本语法
$sqls=”sql1;sql2;...”
mysqli::multi_query($sqls)
体验案例: PHP 网站
//请使用mysqli的mysqi::multi_query() 一次性添加三个用户 宋江 卢俊义 吴用
代码:
<?php
?>
PHP数据库编程⑨-使用mysqli扩展库增强(批量执行sql和事务控制)
☞ 批量执行dml语句可以混合使用 delete insert update,但是最好不要使用select
它的作用是可以一次性的取回多个结果集
<?php
?>
看一个实际情况
有一张银行账号表
create table account
(id int primary key,
balance float);
现在有一段php程序, 要完成 把 1号 10 元钱,转到 2号账号上
<?php
?>
这时,我们需要有一种方法来控制两句sql语句同时成功,同时失败.
->事务
基本:事务用于保证数据的一致性,它由一组相关的dml语句组成,该组的dml语句要么全部成功,要么全部失败。如:网上转账就是典型的要用事务来处理,用以保证数据的一致性
现在我们使用事务来完成上面的代码
代码:
<?php
?>
☞ 在mysql控制台可以使用事务来操作,具体步骤如下
1.
2.
3.
4.
4.1
4.2
rollback to 保存点.
原子性,一致性,持久性,隔离性.