八度

心随所动,勿失所爱!

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

解决页面乱码两种方法

<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;//表示没有行数影响。

}

}       )

三:预定义超全局数组

  1. $_GET
  2. $_POST
  3. $_REQUEST
  4. $_SERVER
  5. $_ENV
  6. $_FILE
  7. $_COOKIE
  8. $_SESSION
  9. $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 "上传失败";

   }

?>

七:报表  绘图技术

  1. php绘图的基本原理与步骤
    1. 创建画布  $img=imagecreatetruecolor(400,300)  大小像数

$colo=imagecolorallocate($img,255,0,0)指定前景色,背景色默认黑

  1. 绘制需要的各种图像 圆 矩形..(php函数里有个GD库)
  2. 输出图像到页面 header(“content-type:image/png”) ; imagepng($img);
  3. 销毁该图片(释放内存)  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

 

 

 

posted on 2012-10-28 17:02  八度  阅读(132)  评论(0)    收藏  举报