php入门小知识小结

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容