我爱编程

php入门小知识小结

2017-01-05  本文已影响62人  小Q逛逛

一.Apache基础

1.网站几个的基本概念

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

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

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

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

win: netstat -ano
mac: lsof -i

B: Browser 浏览器

S: Server 服务器

C: Client 客户端

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

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

前台: 给浏览者看到的

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

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

语言的运行需要环境,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(甲骨文)

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

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

站点:单纯的一个文件夹

虚拟目录:文件夹 + 权限

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

更改监听端口号:

Listen port
可以监听多个端口号

listen 80

listen 90

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运行在服务器端.

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>

//赋值
$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不能在条件语句中定义常量。

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

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 :只能输出数字,字符串,对于布尔类型,TRUE输出1,FALSE输出0,可以一次输出多个参数,没有返回值

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

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

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

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

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


 <?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
   
?>
<?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 
   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;
   }
?>

三.数据库

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

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

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

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

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

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
/**
*   创建数据库
*   如果创建的数据库已经存在,会报错.所以一般要进行判   断.
*  同时,如果数据库名是关键字或者纯数字,需要加上反引    号,最好的办法是任何时候都加反引号
*/
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

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工具

上一篇下一篇

猜你喜欢

热点阅读