美文网首页我爱编程
php入门小知识小结

php入门小知识小结

作者: 小Q逛逛 | 来源:发表于2017-01-05 13:02 被阅读62次

    一.Apache基础

    1.网站几个的基本概念

    • 静态网站:

    不支持数据交互的网站,单纯的静态文件(HTML,CSS,Js组合),后缀一般html,htm.

    • 动态网站:

    支持数据交互的网站,动态网站中是可以操作静态网页的.

    • 实现动态网站的技术

      实现技术 网站后缀
      ASP asp
      PHP php
      .NET aspx
      JAVA jsp
    • 网络请求过程:

    客户端给服务器发送一个请求:(HTTP请求),服务器会把静态资源(HTML代码,图片,js,css)发送到客户端(HTTP response),客户端通过浏览器解析返回的代码,呈现页面给用户.

    • 端口和端口号:

    端口号范围0-65535, 1024一下的端口号一般都留给系统. 80端口一般留给web服务用, 21端口留给FTP, 25端口留给邮件服务器用.

    • 查询当前电脑打开的端口:

    win: netstat -ano
    mac: lsof -i

    • BS和CS架构

    B: Browser 浏览器

    S: Server 服务器

    C: Client 客户端

    BS架构:通过浏览器去访问服务器

    CS架构:通过客户端软件去访问服务器

    • 前台和后台

    前台: 给浏览者看到的

    后台: 给管理者操作的,后台是用来操作前台的数据的.

    站点:把和网站有关的素材都放到一个文件夹,此文件夹就叫站点.

    • Apache

    语言的运行需要环境,Apache为PHP运行提供环境,(IIS)
    亦可以为PHP提供环境,IIS是微软开发的为ASP和aspx提供环境的.

    自定义安装Apache需要设置安装路径.
    还可以设置配置.

    一般操作有:start,stop,restart.

    目录结构:

    bin: apache的命令文件夹
    conf: 配置文件
    htdocs: 虚拟目录

    httpd.conf, apache 重要的配置文件

    PHP:自定义安装要配置apache配置文件的目录

    • 常见的数据库

    Access(MS,微软),MySql(甲骨文),SQL Server(MS),Oracle(甲骨文)

    • lamp/wamp 更改虚拟目录(htdocs)

    在Apache的配置文件中配置PHP虚拟目录的位置.

    在httpd.conf配置文件中查找DocumentRoot,进行修改.指定新目录后还要设置目录的访问权限
    .在Directory,找到对应的文件夹,将权限设置为allow from all.

    • 虚拟目录和站点的区别

    站点:单纯的一个文件夹

    虚拟目录:文件夹 + 权限

    • 更改首页

    在Apache的配置文件查找DirectoryIndex,添加相应的文件为默认首页

    更改监听端口号:

    Listen port
    可以监听多个端口号

    listen 80

    listen 90

    • DNS 解析

    Domain Name System 域名解析系统,将域名解析成 ip地址.互联网上唯一标示一台计算机的是ip地址.不方便记忆,所以用域名对应一个ip地址.

    客户端输入域名,首先会请求最近的DNS服务器,将域名解析成ip地址.最近的DNS解析服务器是本机.在 /etc/hosts文件下,所以可以设置虚拟域名

    • 虚拟主机

    一个Apache支持多个网站,从浏览者角度看,每个网站都是一个独立的主机,称为虚拟主机.

    开启虚拟主机的配置:

    1.在Apache配置文件夹下 conf/extra/httpd-vhosts.conf 开启.

    2.打开虚拟主机配置文件

    <VirtualHost*:80>
    DocumentRoot "/usr/php" //主机地址
    ServerName www.hahaha.com //绑定的域名
    <Directory "/usr/php">
    Allow from all //设置权限
    </Directory>
    </VirtualHost>

    • 虚拟主机 = 站点 + 站点的权限+域名+端口号

    二.PHP基础知识整理

    PHP: Hypertext Preprocessor 超文本预处理器,是一种通用的开源脚本语言,PHP运行在服务器端.

    • PHP4种定界符

    1.标准风格

    <?php 
        //statement
    ?>
    
    

    2.短标记风格:默认不支持,要在PHP配置文件中php.ini开启支持短标记,short_open_tag = On

    <? 
        //statement
    ?>
    
    

    3.asp风格,asp_taps = On

    <% 
        //statement
    %>
    
    

    4.script风格

    <script language="php"> 
        //statement
    </script>
    
    
    • PHP 语句以分号结尾;关键字不区分大小写,变量名区分大小写.

    • 变量命名: 变量是计算机内存中的一段空间.PHP的变量名必须以$开头,$不是变量名的组成部分,仅表示PHP变量名从此处开始.除了$符号,字母,下划线开头,后面紧跟字母数字下划线.

    //赋值
    $a = 10;
    $b = $a;
    $c = &$a; //传地址
    $a++;
    echo $b; //10
    echo $c; //11
    
    • 销毁变量

    通过unset()来销毁变量,销毁的是变量名.值是由PHP垃圾回收机制销毁的.

    <?php 
        $a = 10;
        $b = &$a;
        unset($a);
        echo $b;    // 10
    ?>
    
    
    • 常量

    当一个值在脚本执行周期内不发生变化,可以将值声明为常量.用关键字 define()定义,常量名不能有$开头

    <?php 
        define("name","xiaoQQ");
        echo name;
    ?>
    

    默认情况下常量名是区分大小写的,可以设置define的第三个参数来设置是否区分大小写的:TRUE不区分,FALSE区分大小写.常量不能重复定义

    //多人合作时要判断
    <?php 
        define("name","hahaha");
        if(!define("name")){
            define("name");
        }
    ?>
    

    考虑和const定义常量的区别.

    使用const使得代码简单易读,const本身就是一个语言结构,而define是一个函数。另外const在编译时要比define快很多。

    (1).const用于类成员变量的定义,一经定义,不可修改。define不可用于类成员变量的定义,可用于全局常量。

    (2).const可在类中使用,define不能。

    (3).const不能在条件语句中定义常量。

    • PHP执行的原理

    客户端向服务器发送一个请求,如果请求的是一个HTML页面,服务器直接将HTML页面发送到客户端给浏览器解析.如果请求的是PHP页面,服务器则会运行PHP页面然后生成标准的HTML代码发送到客户端.

    • PHP的数据类型

    1.基本类型

    整型integer: -231~231-1

    浮点型float(double)

    布尔类型boolean:TRUE,FALSE.

    字符串类型string

    2.复合类型

    array数组:

    object对象:

    3.特殊类型

    resource资源:PHP的外部数据

    NULL无类型,空值

    • 字符串

    单引号字符串是真正的字符串,双引号字符串要将变量给替换.单引号不需要运算,执行效率相对高点.

    变量如果在字符串的签名或者中介,要用{}包含
    否则会报错:未定义变量

    <?php 
        $name = "xiaoming";
        echo "{$name} is my name";
        //or
        echo "${name} is my name";
    ?>
    
    
    • 数组:计算机内存中的一段连续空间,通过下标来区分数组.

    数组分成:

    索引数组:通过元素的位置做下标,默认从零开始,每次增长1,可以更改数组的起始下标

    关联数组: 字符串做下标

    <?php
        //索引数组
        $names = array("tom","ted","color","rose");
        
        echo $names[0],'<br>';
        
        //关联数组(字典)
        $emp = array("name"=>"xiaoming","gender"=>"male","age"=>23);
        
        echo $emp["name"],'<br>';
        
        $arr1 = array(1=>'a','b','c'); //修改起始下标
        //Array([1]=>a [2]=>b [3]=>c)
        
        $arr2 = array('a',2=>'b','c',5=>'d');
        
        //Array([0]=>a [2]=>b [3]=>c [5]=>d); //每次增长1
        
        $arr3 = array(1=>'a',1=>'b',1=>'c','d');
        //Array([1]=>c [2]=>d);  //会替换
    ?>
    
    • 输出语句 echo和print,print_r,var_dump

    echo :只能输出数字,字符串,对于布尔类型,TRUE输出1,FALSE输出0,可以一次输出多个参数,没有返回值

    print :和echo很类似,一次只能输出一个参数,输出成功返回1,失败返回0

    print_r :用来输出数组,输出的内容包括 key 和value,不包括数据类型

    var_dump :如果输出普通变量,输出的变量的值和变量的类型.如果输出的是数组,包括值,键,值的数据和类型

    • PHP注释 //单行注释 ,/**/ 多行注释

    • 运算符

    一元运算符: 负号, ++(递增1),--(递减1)

    二元运算: + , - , * ,/

    • 号在js,java中可以做数字的相加,也可以做字符串相连接,在PHP中,只能做数字运算
    
     <?php 
     
        echo '10' + '20';   //30
        
        echo '10aa' + '20bb';   //30
        
        echo 'aa' + 'bb';   //0
     
     ?>  
    
    • 比较运算符

    , >=, <, <=, ==, !=, ===, !==

    == 只比较值, === 比较值和数据类型

    <?php 
       $a = 10;
       $b = 'b';
       if($a == $b){
           echo 'equal';
       }else {
           echo 'not equal';
       }
       //equal
       
       echo "<br>";
       
       if($a === $b){
           echo "全等";
       }else {
           echo "不全等";
       }
       //不全等
       
       echo "<br>";
       
       $a = "abc";
       $b = 0;
       
       if($a == $b){
           echo "equal";
       }else {
           echo "not equal";
       }
       
       //equal
       
    ?>
    
    • 逻辑运算符: &&(与) ||(或者) !(非)

    • 字符串拼接: .点号

    • 赋值运算符: =, +=, *=, /=, %=, .=

    • 三目运算符: 表达式?值1:值2

    <?php 
       $sum = 20;
       echo $um%2==0?'偶数':'奇数';  //偶数
    ?>
    
    • 判断语句

    单分支: if(){}

    双分支:if(){} else {}

    多分支: if(){} elseif(){} ... else{}

    is_numeric()判断是否是数字或者数字字符串;
    is_int() 判断是否是整型

    把数字字符串转换为数字 $num+=0;

    • 循环语句

    for(初始值;条件;增量){};

    while(条件){};

    do{}while(条件);

    foreach :用来遍历数组

    <?php
    
       $stu = array("tom","berry","haha","hi");
       foreach($stu as $value){
           echo $value;
       }
       
       foreach($stu as $key=>$value){
           echo $value;
       }
       
       $names = array("name"=>"xiaoming","gender"=>"male","age"=>23);
       
       foreach($names as $k=>$v){
           echo "{$v}=>{$v}<br>"
       }
    ?>
    
    • 函数

    • 预定义函数: php已经定义的函数,如is_numeric(),var_dump(),is_int();

    • 自定义函数

    <?php 
       function functionName(parameters){
           //function body
           [return];
       }
    ?>
    
    
    • 解决页面乱码

    1.加meta标签 <meta charset="utf-8">

    2.php设置header: header('Content-Type:text/html;charset=utf-8');

    • 访问全局变量
    <?php 
       $num1 = 10;
       function fun(){
           $num2 = 20;
           echo $GLOBALS["num1"]+$num2222222;
       }
    ?>
    
    

    三.数据库

    数据库的发展: 文件系统(使用磁盘文件来存储数据)=>第一代数据库(出现了网状模型,层次模型的数据库)=>第二代数据库(关系型数据库和结构化查询语言)=>新一代数据库("关系-对象"型数据库);

    层次模型是一种导航结构,
    优点:分类管理,如果查询同一类的数据是很方便的。
    缺点:如果查询很多不是同一类的数据,效率就很低了
    层次结构可以造成数据无效,比如张经理管理了一个员工叫张三,李经理也管理了一个叫张三,我们无法区分张三是一个人还是两个人。

    网状模型解决了层次模型数据无效的问题,但是没有解决导航问题,深层率查询,效率很低.

    关系模型中,每个表都是独立的,通过公共字段来建立关系。优点:表是独立的,需要什么数据就到那个表中查询。
    缺点:多表查询的时候效率低下。

    关系:两个表的公共字段叫关系

    • SQL语句

    Structured Query Language 结构化查询语言,是用来操作关系型数据库的.常用的关系型数据有:

    Access,MySQL,Sql Server,Oracls.

    标准的SQL是所有关系型数据库都支持的操作语句,标准的SQL也叫作SQL-92.但是每个数据库在标准的基础上又扩展了自己的东西.所有,一个数据库的拓展语句在在其他数据库不能运行.

    • 连接数据库

    需要的参数: Host (-h),username (-u), password (-p),port(默认3306) (-P)

    mysql -u root -h localhost -p
    
    • 退出数据库:exit,quit,\q

    • 数据库操作:数据库的本质是一个文件.操作数据库的软件叫做数据库管理系统.

    /**
    *   创建数据库
    *   如果创建的数据库已经存在,会报错.所以一般要进行判   断.
    *  同时,如果数据库名是关键字或者纯数字,需要加上反引    号,最好的办法是任何时候都加反引号
    */
    Create database db_name [charset=字符编码]
    Create database if not exists db_name [charset=字符编码]
    
    
    /** 
    */
    2.  查询数据库
    show database;
    
    3.显示数据库的创建语句
    show create database create db_name;
    
    4. 更改数据库
    alter database db_name [option];
    
    //eg:alter database haha charset=gbk;
    
    5. 删除数据库:如果数据库不存在会报错
    drop database if exists db_name;
    
    6. 选择数据库
        use db_name;
    
    • 数据库表的操作

    几个概念:

    行row:也叫记录,一行就是一条记录

    列(column) : 一列就是一个字段,字段也叫属性,一个表中包含多个字段

    1.创建表:(primary key)主键不能重复,不能为空,一个表只能有一个主键,主键可以由多个字段组成.
    
    create table table_name(
        field1 data_type [null | not null][default][auto_increment][primary key],
        field2 data_type,
        ...,
    );
    
    2. 查看所有表
    show tables;
    
    3.显示创建表的SQL语句
    show create table table_name [\G];
    
    4.显示表结构
    describe [desc] table_name;
    
    5.删除表
    drop tabel table_name1,table_name2,...;
    
    

    数据类型:

    int,decimal(总位数,小数位数) 存小数 decimal(10,3), char(1):定长, varchar(10):可变长度, text:大段文字

    • 数据操作
    1.插入数据:插入字段可以和数据库中字段顺序不一致,但是值和插入的字段顺序必须一致. 如果插入字段省略掉,插入的值和数据库表的字段的顺序和个数都要一致.
    
    insert into table_name (field1,field2) values (value1,value2);
    
    //自动增长的插入
    insert into student values (null,"name","female","shenzhen",22);
    
    //默认值的插入
    insert into student values (null,"name","female",default,33);
    
    
    2.数据的修改
    update table_name set field1=value1,field2=value2 [where 条件];
    
    //eg:
    update student set gender="male" where name="xiaoming";
    
    update student set gender = "female";
    
    3.删除数据
    delete from table_name [whre 条件];
    
    delete from student where name = "haha";
    
    delete from student;    //所有的数据都删除了
    
    4 .查询数据
    select 列名 from 表 [where 条件] [order by 排序字段 asc|desc] [limit [起始位置默认0],或者的记录数量];
    升序:asc
    降序:desc
    默认升序
    
    select name,gender from student;
    select * from;  //获取所有
    select * from student order by score desc;
    select * from student limit 3;
    select * from student limit 2,10;
    select * from student order by score desc limit 3;
    
    //取出第一位
    select * from stu order by score desc limit 0,1
    
    • 运算符

    比较运算符: > , >=, <, <=, = , <>(不等于)
    逻辑运算符: and, or, not

    聚合运算:

    Sum(), Avg(), Min(), Count(), Max().

    select max(score) from student;
    select min(score) from student;
    select sum(score) from student;
    select avg(score) from student;
    select count(*) from student;
    select count(*) from student where gender="male";
    
    

    4.PHP与MySQL

    • php开启MySQL拓展,PHP本身是一个框架,它的功能是由PHP拓展而来的,要通过PHP连接数据库,必须开启PHP连接MySQL的功能,就是PHP的MySQL拓展. 在php.ini中,把extension=php_mysql.dll 开启,重启服务器.
    1.php连接数据库
    $connect = mysql_connect("localhost",'root','password') or die("数据库连接失败");
    /**
        通过@符号屏蔽信息
        $connect = @mysql_connect("localhost",'root','password') or die("数据库连接失败");
    */
    
    2. 终止执行:exit(),和die();
    die()停止执行,把生成的代码发送到客户端.
    
    3. 选择数据库
    方法1: 执行 use db_name
    mysql_query("use database_name") or die("数据选择失败");
    
    方法二:
    mysql_select_db("database_name") or die ("数据库选择失败");
    
    4. 设置字符编码
    mysql_query("set names utf8");
    
    5.查询数据库 : 返回一个资源类型的数据
    
    $results = mysql_query("select * from products");       //resource type
    
    mysql_fetch_row: 取出结果集中数据
    开始匹配,指针指向第一个记录.取出资源中的当前记录,匹配成索引数组,指针指向下一条记录.
    
    5.1.
    while($rows = mysql_fetch_row($results)){
        echo $rows[0];
        echo "<br>";
        echo $rows[1];
        echo "<br>";
        echo $rows[2];
        echo "<br>";
        echo $rows[3];
        echo "<br>";
    }
    
    这种方法读取数据缺点:数据库字段发生变化,会影响数组的索引编码.
    
    
    5.2: mysql_fetch_assoc : 形成关联数组
    数组的键和数据表的字段名相关联
    while($rows = mysql_fetch_assoc($results)){
        echo $rows["name"];
        echo "<br>";
        echo $rows["gender"];
        echo "<br>";
        echo $rows["age"];
        echo "<br>";
        echo $rows["id"];
        echo "<br>";    
    }
    
    5.3: mysql_fetch_object: 匹配成对象,通过->访问
    
    while($obj=mysql_fetch_object($results)){
        echo $rows->name;
        echo "<br>";
        echo $rows->gender;
        echo "<br>";
        echo $rows->age;
        echo "<br>";
        echo $rows->id;
        echo "<br>";
    }
    
    
    6. 释放资源 mysql_free_result($results);
    7. 关闭连接 mysql_close($connect);
    
    页面执行完毕后,所有变量全部销毁,可以不用手动释放资源.
    
    

    数据的导入与导出,用phpMyAdmin工具

    相关文章

      网友评论

        本文标题:php入门小知识小结

        本文链接:https://www.haomeiwen.com/subject/nqkzvttx.html