解决页面乱码两种方法
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
<?php
header(“Content-Type: text/html; charset=UTF-8”);
?>
①建议用''单引号 error_reporting(1);
用命令行cmd启动apache:
cmd->cd E:\JAY\apache\bin(apache的httpd目录)->E:->dir(查询当前目录的所有文件)
->httpd -k start(shutdown|restart)启动
如果想直接运用,可以将apache的httpd目录添加到环境变量PATH里面。
命令:netstat -an 来查看机器的端口监听
命令:ping www.taobao.com 查找淘宝的ip地址
②配置虚拟主机:
1,在httpd.conf文件中启用httpd-vhosts.conf就是把前面#去掉
2,设置httpd-vhosts.conf文件
#配置我们自己的虚拟主机
<VirtualHost *:80>
DocumentRoot "E:/JAY/apache/docs/dummy-host2.son.com"
#这里配置欢迎页面
DirectoryIndex index.html index.htm index.php
<Directory />
Options FollowSymLinks
#不许可别人修改我们的页面
AllowOverride None
#设置访问权限
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
3,在hosts文件中添加我们的ip和主机映射关系 127.0.0.1 www.sohu.com
c:/windows/system32/drivers/etc/hosts
③浮点数的精度是14,从左边第一个非0数开始就是精度的开始
$a=1.2343243252345
常量的定义:define("名字",值); const 名字=值;
php中页面的相互调用:
require''出现错误就退出程序 require_once''基本用这个 只包含一次
include''出现错误还会继续往下执行 include_once''
在函数中删除变量:unset(变量名)
rand(min,max);随机数
④二进制-->0表正数,1表负数
正数的原码,反码,补码都一样。
负数的反码=它的原码符号位不变!!!,其它位取反(1->0,0->1)。
负数的补码=它的反码+1。 0的反码补码都是0,php的数都有符号
计算机运算的时候,都是以补码的方式来运算。记住先转为补码!!!
按位与& 按位或| 按位异或^(两个不同才为1) 按位非~ 左移<< 右移>>
-3^3 -3的原码:10000000 00000000 00000000 00000011
反码:11111111 11111111 11111111 11111100
补码:11111111 11111111 11111111 11111101
3的补码:00000000 00000000 00000000 00000011
进行^异或运算:11111111 11111111 11111111 11111110 (补码)
转换成反码:11111111 11111111 11111111 11111101 (反码)
转换成原码:10000000 00000000 00000000 00000010 (原码)
则-3^3 =-2
⑤foreach($arr as $key=>$value) print_r($arr) var_dump($arr) $arr["cy"]
拆分explode("符号",$arr);
排序方法:
1,冒泡法 function mp(&$arr){ $num=0; count($arr)=$sum;
for($i=0;$i<$sum-1;i++){
for($j=0;$j<$sum-1-$i;$j++){
if($arr[$j]>$arr[$j+1]){
$num = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $num;
} //把最大的沉到最底下
}
}}
2,选择排序function xz(&$arr){
$temp=0; count($arr)=$sum;
for($i=0;$i<$sum-1;$i++){
//假设最小值 最小值的下标 每一轮找到最小值
//第一轮第一个最小 第二轮第二个最小
$minvl=$arr[$i];
$minIndex=$i;
for($j=$i+1;$j<$sum;$j++){
//把最小值进行比较
if($minvl>$arr[$j]){
$minvl=$arr[$j];
$minIndex=$j;
}
}
//最后才交换
$temp=$arr[$i];
$arr[$i]=$arr[$minIndex];
$arr[$minIndex]=$temp;
}
}
3,插入排序 function cr(&$arr){ count($arr)=$sum;
for($i=1;$i<$sum;$i++){
$ready=$arr[$i];//待插入值
$readyIde=$i-1;//默认的有序值下标
while($readyIde>=0&&$ready<$arr[$readyIde]){
//如果待插入值小于有序值 则将有序值后移 并再与前面的比较
$arr[$readyIde+1]=$arr[$readyIde];
$readyIde--;
}
//有序值后面的一个数等于待插入值
$arr[$readyIde+1]=$ready;
}
}
4,快速排序
效率:冒泡法<选择排序<插入排序
⑥二分查找:前提已经是有序数组!!
function binarySearch(&$arr,$find,$left,$right){
//round()函数功能是四舍五入
$middle=round(($left+$right)/2);
if($right<$left){
echo"没找到";
return;}
if($find>$arr[$middle]){
binarySearch($arr,$find,$middle+1,$right);
}else if($find<$arr[$middle]){
binarySearch($arr,$find,$left,$middle-1);
}else echo"找到了,下标为:$middle";
}
$ef=array(2,5,7,20,22,23,34,44,67,88,100);
binarySearch($ef,45,0,count($ef)-1);
⑦类与对象类名开头大写 $对象->属性
给函数传递一个对象,实际是传递一个地址!
给函数传递基本数据类型,传递的是值!
给函数传数组,传递的是值!
构造方法:public function __construct($a....) 没返回值,系统自动调用
this $this->a;哪个对象调用this就指向哪个对象,且不能在类外部使用。
析构方法: function __destruct() 作用是释放资源。
静态变量:static $变量名(共享的) 全局变量不可以直接赋值global $a=10;X
this不能访问静态变量,只能用以下:
在类中访问: self::$静态变量名/类名::$静态变量名
在类外访问: 类名::$静态变量名
抽象就是研究问题的一种方法。
⑧面向对象的三大特性:封装,控制在程序中属性的读和修改的访问级别。Private。
继承extends:不能继承父类的private东西,一个类只能继承一个父类。
想多层继承可以:class B extends A ; class C extends B ;
子类访问父类中的方法-> 类名::方法名() parent::方法名()
多态:重载;方法的重写/覆盖(override)子类重写父类的方法。
抽象类:abstract class 类名{} 不能被实例化;可以没有抽象方法
抽象方法:abstract 方法();没有方法体 必须与抽象类一起
如果A类继承一个抽象类B,(除非A类声明为抽象类)则A类必须实现B类的所有抽象方法。
接口:interface 接口名{//属性(只能为常量)//方法(都不能有方法体,都是抽象的,都是public的【默认也是】不能用protected/private)} 接口不能被实例化;
class 类名 implements 接口名1,接口名2{} 接口可以继承多个其他接口
当一个类去实现了某些接口,则必须把所有接口的方法都实现
⑨关键字
final ->1: 如果希望某个类不被其它类继承,可以使用final class A{}
->2: 如果某个方法不希望被子类改写,可以使用final function cc(){}
->3: 不能修饰成员属性(变量)
常量const ->1: 用法 const 常量名=值;没$符号;const前面不能有修饰符;
->2: 常量名要大写,常量不能修改,必须赋值。
->3: 使用 类名::常量名/接口名::常量名/self::常量名;
isset()若变量存在且不为null则返回 true
isNaN() 函数用于检查其参数是否是非数字值,是就返回trueàjavascript
⑩错误与异常
die() file_exists(“aa.txt”) die(“文件不存在”);
自定义错误函数function err($errno,$errmes) 两个参数必须 错误号 错误信息
set_error_handler(自定义错误函数,错误级别); trigger_error() 调用触发器
错误级别:E_USER_WARNING E_USER_ERROR E_USER_NOTICE
错误日志:error_log(错误信息变量.”\r\n”,3,”文本路径”);
例子:error_log("时间是:".date("Y-m-d H:i:s")."--".$error_info."\r\n",3,"errortxt.txt");
异常:try{
//可能出现错误或异常的代码
}catch(Exception $e){
//对异常处理 //1,自己对异常处理 //2,自己不处理,将其抛出
} throw new Exception(“dfdsf”); 抓到异常则后面的代码停止运行
二:MYSQL数据库->mysql扩展库
1:char与varchar区别 前者固定大小,后者可变节约空间
2:连接--- $conn = mysql_connect(“localhost”,”root”,”root”)or die(“数据库失败”.mysql_error());
3:选择数据库--- mysql_select_db(“数据库名”,$conn);
4:设置编码--- mysql_query(“set names utf8”);
5:操作数据库--- $res = mysql_query($sql数据库语句,$conn); 返回分以下两类型
a.仅对 SELECT,SHOW,EXPLAIN 或 DESCRIBE语句返回一个资源标识符,即$res返回为资源类型;如果查询执行不正确则返回 FALSE
。b.对于其它类型的 SQL 语句,mysql_query()在执行成功时返回 TRUE
,出错时返回 FALSE
。返回bool布尔类型
6:接收返回的结果-$row=mysql_fetch_row($res)返回一个索引数组(推荐)
--- $row = mysql_fetch_assoc($res) 返回一个关联数组
--- $row = mysql_fetch_array($res)返回索引数组和关联数组
--- $row = mysql_fetch_object($res)从结果集中获取一行作为对象
--- $row = mysql_num_rows($res)获取查询结果集中的记录数
7:释放资源--- mysql_free_result($res) 关闭结果集,以释放系统资源,同样分为两种:当$res返回资源类型则需要释放资源,返回bool布尔型则不需要写了会报错。
8:关闭mysql连接 --- mysql_close($conn)
( //完成select
function dql($sql){}
//完成update,delete,insert
function dml($sql){
$b=mysql_query($sql,$this->conn);
if(!$b) return 0; //失败
else {
if(mysql_affected_rows($this->conn)>0){return 1;//表示成功}
else return 2;//表示没有行数影响。
}
} )
三:预定义超全局数组
- $_GET
- $_POST
- $_REQUEST
- $_SERVER
- $_ENV
- $_FILE
- $_COOKIE
- $_SESSION
- $GLOBALS
IE低版本中文奇数乱码问题1,加空格 2,先将中文编码 urlencode()
如何接收checkbox复选框提交的数据
<inpt type=”checkbox” name=”name[]” value=”唱”>唱 --name后面加[] 变成数组
判断是否GET/POST—> $_SERVER[‘REQUEST_METHOD’]==”POST”
四:分页技术
模拟大量数据:
insert into 表名(表内属性) select 表属性 from 表名 平方式增长 自我复制
ceil()函数 进一取整
limit 3,4 3表示从第3条取(从0开始),4表示取出4条
五:cookie / session
Cookie key---val
设置cookie à setcookie(“键name”,”值val”,time()+时间秒);
获取cookie à $name=$_COOKIE[‘name’];
Cookie 可以给不同的键—值 指定不同的有效时间,不会统一
更新cookie 就是重新设置
删除cookie 指定删除setcookie(“键name”,””,time()-时间秒);
全部删除 foreach($_COOKIE as $key->$val){
setcookie($key,””,time()-10;}
session key---val
一个会话对应一个session文件,每个操作都要session_start()初始化
1初始化session session_start(); 每次都要初始化
2保存session $_SESSION[‘name’]=数据;-string-int-double-bool-array-object
3获取session $num=$_SESSION[‘name’];
4更新session $_SESSION[‘name’]=数据;
5删除session 删除某一个 unset($_SESSION[‘name’]);
删除所有 session_destroy();
六:文件编程
$fp=fopen($path,”a+”)
fstat() 通过指针取得文件信息,返回一个数组
fread($fp,读取的大小) file_get_contents($path) 直接读取文件
file_put_contents($path,$con,FILE_APPEND)直接向path中写入$con内容
file_exists($path) str_replace("\r\n","<br/>",$con)将文本换行转为网页换行
feof($fp) 判断读取是否结束 fwrite($fp,$con); 向$fp中写入$con内容
fclose($fp)
copy(目标目录+文件名,目录+文件名)
mkdir($path) 创建文件夹 mkdir($path,077,true) 多层目录文件夹创建
rmdir($path) 删除文件夹 ps: 如果文件夹下有文件或目录,均不能删除成功
is_dir($path)判断文件夹是否存在 unlink($path)删除文件
文件下载参照 filedown.php
<?php
//如果文件名是中文,则要转码
$file_name="周杰伦.jpg";
//对中文转码 gb2312 iconv()
$file_name=iconv("utf-8","gb2312",$file_name);
//绝对路径
$file_path = $_SERVER['DOCUMENT_ROOT']."/".$file_name;
//打开文件
if(!file_exists($file_path)){
echo "文件不存在";
return ;
}
$fp=fopen($file_path,"r");
//获取下载文件的大小
$file_size=filesize($file_path);
//以下为固定的
//返回文件
header("Content-type: application/octet-stream");
//按照字节大小返回
header("Accept-Ranges: bytes");
//返回文件大小
header("Accept-Length: $file_size");
//这里客户端的弹出对话框,对应的文件名
header("Content-Disposition: attachment;filename=" .$file_name);
//向客户端回送数据
$buffer=1024;
//为了下载安全,最好做一个文件字节读取计数器
$file_count=0;
//判断文件是否结束 feof()
while(!feof($fp) && ($file_size-$file_count>0)){
//fread() 按规定字节读取文件
$file_data=fread($fp,$buffer);
//统计读了多少个字节
$file_count+=$buffer;
//把部分数据回送给浏览器
echo $file_data;
}
//关闭文件
fclose($fp);
?>
文件上传 参照 fileUpload.php
如果要上传应该把
<form action=”” enctype=”multipart/form-data” method=”post”>
上传文件<input type=”file” name=””> </form>
is_uploaded_file()判断是否上传ok
move_uploaded_file()将上传的文件移动到新的位置
<?php
header("content-type:text/html;charset=utf-8");
//<form action="" enctype=”multipart/form-data” method="post">
//上传文件<input type="file" name="myfile">
//</form>
//接受用户提交的文件
$username=$_POST['username'];
$fileintro=$_POST['fileintro'];
//这里我们需要 全局数组 $_FILES[] 二维数组[myfile][size]
//它含5个 [name]文件名[type]文件类型[temp_name]默认放到服务器中的目录[error][size]文件大小
// print_r($_FILES[]);
//限制文件的大小
$file_size=$_FILES['myfile']['size'];
if($file_size>2*1024*1024){
echo "文件过大,不能上传超过2M的文件";
exit();
}
//限制文件类型
$file_type=$_FILES['myfile']['type'];
if($file_type!='image/jpg' && $file_type!='image/pjpeg'){
echo "文件类型只能是.jpg";
exit();
}
//判断是否上传ok is_uploaded_file()
if(is_uploaded_file($_FILES['myfile']['temp_name'])){
//把文件从默认路径转存到你希望的目录
$uploaded_file=$_FILES['myfile']['temp_name'];
//我们给每个用户动态的创建一个文件夹
$user_path=$_SERVER['DOCUMENT_ROOT']."/".$username;
//判断该用户是否已经存在此文件夹
if(!file_exists($user_path)){
mkdir($user_path);
}
$true_name=$_FILES['myfile']['name'];
$move_to_file=$user_path."/".time().rand(1,1000).substr($true_name,strrpos($true_name,"."));
//move_uploaded_file()将上传的文件移动到新的位置..对中文转码 gb2312 iconv()
if(move_uploaded_file($uploaded_file,iconv("utf-8","gb2312",$move_to_file))){
echo $_FILES['myfile']['name']."上传ok";
}else{
echo "上传失败";
}
}else{
echo "上传失败";
}
?>
七:报表 绘图技术
- php绘图的基本原理与步骤
- 创建画布 $img=imagecreatetruecolor(400,300) 大小像数
$colo=imagecolorallocate($img,255,0,0)指定前景色,背景色默认黑
- 绘制需要的各种图像 圆 矩形..(php函数里有个GD库)
- 输出图像到页面 header(“content-type:image/png”) ; imagepng($img);
- 销毁该图片(释放内存) imagedestory($img)
验证码:
请输入验证码:
<img
src="checkCode.php" onclick="this.src='checkCode.php?aa=+Math.random()'">
<?php
//使用php绘图技术,画出验证码
//随机产生4个数,dechex()将十进制转换为十六进制
$checkCode="";
for($i=0;$i<4;$i++){
$checkCode.=dechex(rand(1,15));
} //创建画布
$img=imagecreatetruecolor(110,30);
//存入到session
session_start();
$_SESSION['checkcode']=$checkCode;
//指定前景色
$colo=imagecolorallocate($img,255,255,255);
//画干扰线
for($i=0;$i<15;$i++){
imageline($img,rand(0,110),rand(0,30),rand(0,110),rand(0,30),imagecolorallocate($img,rand(0,255),rand(0,255),rand(0,255)));
}
//水平的画出一行字符串imagestring()
imagestring($img,rand(1,5),rand(0,20),rand(0,20),$checkCode,$colo);
header("content-type:image/png"); //输出图像到页面
imagepng($img);//输出图像到页面
imagedestory($img);//销毁该图片(释放内存)
?>
八:XML
声明: <?xml version=”1.0” encoding=”utf-8”?> 区分大小写
有且只有一个根元素,即包括文档中其他所有元素的元素。
CDATA标记 <![CDATA[这里可以正常输出’<’’>’’&’ ^等特殊字符]]>
$_SERVER['REMOTE_ADDR'] 客户端ip
getenv('REMOTE_ADDR') 客户端ip
gethostbyname('www.baidu.com') 服务器ip