1.运算符
算术运算符
基本:
1, 包括有:+ - * / %
2,他们都只针对“数字”进行运算:如果不是数字,会“自动转换”为数字
3,其中取余(取模)运算符(%),只能针对整数进行,如果不是整数,直接“截取”为整数
比如:
$v1 = 11.5 % 3 ; //结果是:2, 其实是11%3
$v2 = 11.5 % 2.5; //结果是:1, 其实是11%2
$v2 = 10.5 % 3.5; //结果是:1, 其实是10%3
2.自增(++)自减(--)运算符
以下只对++进行说明,(--)运算同理。
对一个“变量”的值进行自加1的运算,比如:
$v1 = 11;
$v1++; //v1的值为12了,这叫“后自加”
++$v1; //v1的值为13了,这叫“前自加”
3.前自增和后自增的区别(自减同理):
1.解压客户端放到一个目录下,新建tnsnames.ora放到客户端文件夹的子目录下。
2.加入以下代码:est_db是自己起的连接名字,IP替换为远程oracle的IP,service_name放数据库名字
3.开启php的oci扩展或者pdo_oci扩展,连接测试。
php7因为没有带php_oci_11g的扩展,需要自己安装获取去下载对应版本的dll文件,放到php的ext目录下,在php.ini中开启扩展。
在开启后可能会出现windows缺失oci.dll文件。
4.将上面客户端里面的oci.dll文件拷贝到php的目录下即可--》启动php,查看PHPinfo里面应该会出现如下扩展:
5.测试尝试连接数据库代码:
6.PDO方式会抛出如下的异常(SQLSTATE[]: pdo_oci_handle_factory: <<Unknown>> (ext\pdo_oci\oci_driver.c:642))
这时候如果把刚才拷贝到php目录下的文件删除的话,有些被用到肯定就不能删,经过测试,只有下面这个文件和刚才的oci.dll文件不能删除。
7.还有个特点就是很大,里面封装了很多函数扩展什么的。
现在就大功告成了,在此测试一下上面的PHP代码:
【IT科技之家-itkeji综合 -文章版权声明】
非特殊说明,本文版权归 [ IT科技之家-itkeji综合 -ITMFB] 所有,转载请注明出处.
织梦DEDECMS建站学习02
1.认识php
PHP:
PHP: Hyper text Preprocessor"的缩写,即“超文本预处理器。PHP是一种功能强大,并且简便易用的脚本语言,它可嵌入到HTML中,尤其适合web开发。
起源:
1994年Rasmus创造了PHP (这完全是Rasmus的个人爱好)
1997年,Zeey、Andi重写了解析器,发展到php3。 (有了队伍)
2000年5月,php4发布,它使用了Zend引擎(Zeey+Andi)。(有 了标准)
2004年7月,php5正式发布。(飞速发展,不断创新)
PHP的最版本为PHP 7. X。
PHP的官方网址下载。
特点:
PHP是免费的;
效率高: PHP消耗相当少的系统资源;
易学易用,功能强太;
跨平台的。可以运行在UNIX、LINUX、WINDOWS下;
嵌入HTML:因为PHP可以嵌入HTML语言,学习起来并不困难;
PHP5是面向对象的。
... ...
2.PHP优势
PHP优势3. PHP运行环境
PHP运行前提:1.操作系统,2.WEB服务器,3.PHP组件
WAMP: Windows+Apache+Mysql+Php
WNMP: Windows+Nginx+Mysql+Php
LAMP: Linux+Apache+Mysql+Php
LNMP: Linux+Nginx+Mysql+Php
Apache HtTP Server (简称Apache)是Apache软件基金会的一个开放源码的网页服务器。Apache是世界使用排名第一的Web服务器软件。 它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。
Nginx("enginex")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的Web和反向代理服务器,也是一IMAP/POP3/SMTP代理服务器。在高连接并发的情况下,Nginx是Apache服 务器不错的替代品。
安装了PHP环境之后,Apache/Nginx才可能运行PHP文件。
新手安装过程推荐组合包安装!
官方网站:自行下载
注意:我们还可以安装zend引擎:用于php优化。
windows下安装:
推荐软件: phpstudy 官网下载
phpstudy4.第一个PHP页面
1)路径:www下新建目录文件,用于区别不同项目
目录2)代码:
代码3)访问:浏览器输入本机网址路径:127.0.0.1/stedy/index.php
网址最终执行结果!
php是世界上最好的语言
php的环境搭建好了之后,我们就可以写代码了。
一:如何新建PHP文件。
上一节介绍怎么搭建环境,现在接着在环境目录www(根目录)下面新建一个php文件。新建一个记事本文件,然后后缀修改成php结尾。
新建txt文件,然后修改成php结尾二:变量?
1:变量是用$美元符号表示的,后面接着英文单词,或者汉语拼音都可以,为了方别可读性最好用英文单词表示。
2:变量是什么呢,变量好比是一个空箱子,用来临时存放数据的。$name='zhangsan';意思是把zhangsan赋值给$name,中间的=是赋值的意思,不是等于号。你给变量什么值,他就是什么什么值,随时可以改变。
$name='zhangsan';
$name='lisi';
开始给$name这个变量赋值为zhangsan,那么$name就是zhangsan,后面又$name='lisi',那么$name就不再是zhangsan了,现在是lisi了。现在就明白了,变量的值是会变得,你给他赋值什么,就变成什么值。
3:至于环境变量,魔法变量,静态变量。这些后面再讲,先入门。
4:我们现在就会写变量了,就是$符合后面跟着英文单词或者字母,名字随便取。
5:官方的变量名规则,可以参考,我讲的比较通俗。
PHP 变量规则:
变量以 $ 符号开始,后面跟着变量的名称变量名必须以字母或者下划线字符开始变量名只能包含字母数字字符以及下划线(A-z、0-9 和 _ )变量名不能包含空格变量名是区分大小写的($y 和 $Y 是两个不同的变量)6:在PHP标签里面写标量,下面是案例。
<?php
$txt="Hello world!";
$x=5;
$y=10.5;
?>
说明:常量一旦定义,里面的值和常量是不能改变和销毁的,而且常量名不能重复
1.常量的定义:
语法:define(常量名,常量值);不能定义复合数据
5.xphp版本:const来定义复合的数据,如数组7.0 php版本:define可以定义复合的数据.如:define(ARR,[1,2,3,4,5]);
2访问常量
说明:直接使用常量名就可以了.。如:echo NAME;
常量的使用:网站的配置文件中使用。如:当前网站路径
3.魔术常量—预定义常量
__LINE__:文件中的当前行号__FILE__:文件的完整路径和文件名,如果用在被包含的文件中,则返回被办好的文件名,自php4.0.2起,__FILE__总是包含一个绝对路径.如果是符号连接,则是解析后的绝对路径,而在此前的版本有时会包含一个相对路径__DIR__:文件所在目录。如果用在被包括文件中,则返回被包括的文件所在目录,它等价于dimame(__FILE__)除非是i根目录。赋值目录中名不包括末尾斜杠__FUNCTION__:函数名称,php4.3.0新增,php5起本常量返回该函数被定义时的名字(区分大小写)在php4中该值总是小写__CLASS__:类的名称__TRAIT__:trait的名称__METHOD__:类的方法名__NAMESPACE__:当前命名空间的名称mvc:URL传递数据:index.php:c=getuser&a=xxxx&m=index
产生随机数的函数:rand()
说明:rand:产生一个随机整数
intrand(void)
int rand(int $min, int $max)
<?php/*** @Author: admin* @Date: 2018-08-12 22:56:43* @Last Modified by: admin* @Last Modified time: 2018-08-12 23:39:54*///常量的定义define('NAME','张三');define('PI',3.14);echo NAME,PI;const USER='admin';echo USER;//__CLASS__:获取当前类名class getuser{function index(){include './xx/index.html';}function add(){include './xxx/index.html';}}//rand()随机函数$num=rand(1,100);//随机生成1-100的整数echo $num;
题:
变量处理常用的函数有哪些? 举例说出至少四个,并各举一个案例说明unset如何在函数内部就销毁一个全局变量,请使用的代码来说明如何销毁PHP基本数据类型的值传递和引用传递的区别是什么,请画出对应的内存示意图一个页面server.php,并输出至少5个$_SERVER内的元素信息,并说明是什么含义,页面表现形式如下:元素名称 使用形式 结果 含义
PHP_SELF $_SERVER[‘PHP_SELF’] /test/$_SERVER.php 表示本网页路径
参考:PHP手册〉语言参考〉预定义变量〉$_SERVER
5.写一个表单,用来填写“用户信息”,要求出现所有的表单元素类型(除文件类型):
文本框,密码框,单选,复选,下拉,多行文本域,隐藏域
提交后显示用户所填写的所有数据。复选框的问题:都一个name值,复选框name是一个,问:怎么实现获取多个选项的值
答案:
1.变量常用的函数:
isset():案例:$user=isset($_GET[‘user’])?$_GET[‘user’]:”;//判断是否存在
unset():案例:$a=1; unset($a);//销毁变量a
empty():案例:$a=1;if(empty($a)){echo “存在”};//判断是否为空
echo:案例:$a=1;echo $a;//打印a
var_dump():案例:$a=1; var_dump($a);//打印a
2.用unset销毁在函数中的全局变量
//只销毁局部变量$a=1;function demo(){global $a;//把全局变量局部声明echo $a;unset($a);//销毁变量aecho $a;}demo();//变量a被销毁echo $a;//a的值存在正常打印//销毁全局变量function un(){global $a;//声明局部变量 unset($GLOBALS['a']); //echo $a;}un();echo $a;//a的值没有了
3.值传递和引用传递的区别
值传递,传递过去的是数值,
引用传递,传递的是地址值
4.新建一个server.php
<?php/*** @Author: admin* @Date: 2018-08-13 00:03:26* @Last Modified by: admin* @Last Modified time: 2018-08-13 01:13:03*/$arrayName = array('REQUEST_URI','SCRIPT_NAME','PHP_SELF','SERVER_ADMIN','SCRIPT_FILENAME');$arr2=array('URI 用来指定要访问的页面','包含当前脚本的路径','当前执行脚本的文件名',' Apache 服务器配置','当前执行脚本的绝对路径');echo "<table border=1>";echo '<tr>';echo '<th>元素名称</th><th>使用形式</th><th>结果</th><th>含义</th>';echo '</tr>';foreach ($arrayName as $key => $value) {echo '<tr>';echo '<td>'.$value.'</td>';echo "<td>\$_SERVER['$value']</td>";echo "<td>".$_SERVER[$value]."</td>";echo '<td>'.$arr2[$key].'</td>';echo '</tr>';}echo '</table>';
5.答案
概述
有玩过nginx的朋友肯定常听说的cgi,php-cgi,fastcgi,php-fpm,那他们之间到底是什么关系,下面帮助大家了解下nginx+php执行请求的工作原理。
cgi协议
CGI不是一门编程语言。它是网页的表单和你写的程序之间通信的一种协议。可以用任何语言写一个CGI脚本,这些语言只要能接收输入输出信息,读取环境变量。所以,几乎所有的编程语言都能写一个CGI脚本,例如:python(把我大python放在第一个!),C,甚至是shell脚本。
CGI是一种通信协议,它把用户传递过来的数据转变成一个k-v的字典。这个字典中不光有用户的数据,还有HTTP协议的参数。它做的就是把数据,组织成一个固定结构形式的数据。方便任何符合CGI协议的程序都可以调用!但是CGI不是负责通信(传输数据)的,通信的话是通过socket,也就是server,例如上面例子中,是通过Apache进行通信。之后调用CGI脚本,把数据转变成符合CGI协议的数据结构,用于后面的数据处理!
总之,cgi协议用来确定webserver(例如nginx),也就是内容分发服务器传递过来什么数据,什么样格式的数据。
php-cgi进程解释器
php-cgi是php的cgi协议进程解释器,每次启动时,需要经历加载php.ini文件->初始化执行环境->处理请求->返回内容给webserver->php-cgi进程退出的流程。
fastcgi协议
fastcgi协议是对cgi协议效率提升的补充,主要是针对每次请求过来时都需要启动一个cgi解释器进程的优化,不再需要cgi解释器进程每次收到webserver请求后都需要重新加载php.ini文件和初始化执行环境。
php-fpm进程管理器
php-fpm是对fastcgi协议的实现,是进程管理器,启动时包括master和worker进程两部分,master进程监听端口,接收来自webserver请求,worker进程一般具有多个,每个worker进程都有一个cgi进程解释器,用来执行php代码。
php-fpm有两种执行方式, 与Apache一样,它的进程数也是可以根据设置分为动态和静态的,一种是直接开启指定数量的php-fpm进程,不再增加或者减少;另一种则是开始的时候开启一定数量的php-fpm进程,当请求量变大的时候,动态的增加php-fpm进程数到上限,当空闲的时候自动释放空闲的进程数到一个下限。
这两种不同的执行方式,可以根据服务器的实际需求来进行调整。
php启动和工作原理
启动phpfpm时,会启动master进程,加载php.ini文件,初始化执行环境,并启动多个worker进程。每次请求来时会将请求传递给worker进程进行处理
php平滑重启原理
每次修改完php.ini配置并重启后,会启动新的worker进程加载新的配置,而之前已经存在的进程会在工作完成之后销毁,因此实现平滑重启
nginx工作原理
如果想弄明白nginx和php配合的原理,还需要先了解nginx的配置文件中的server部分。
上面server配置的整体含义是:每次nginx监听到80端口的url请求,会对url进行location匹配。如果匹配到/规则时,会进行内部请求重定向,发起/index.php?$query_string的内部请求,而对应的location配置规则会将请求发送给监听9000端口的php-fpm的master进程。
总结
下面总结下最简单的用户请求流程:
大致如下:用户访问域名->域名进行DNS解析->请求到对应IP服务器和端口->nginx监听到对应端口的请求->nginx对url进行location匹配->执行匹配location下的规则->nginx转发请求给php->php-fpm的master进程监听到nginx请求->master进程将请求分配给其中一个闲置的worker进程->worker进程执行请求->worker进程返回执行结果给nginx->nginx返回结果给用户。
表达式:表达式是php最重要的基石,在php 中。几乎所写的任何东西都是一个表达式,简单但却最精确的定义一个表达式的方式就是任何有值的东西。如$a=1;
运算符分类
运算符优先级算术运算符赋值运算符位运算符比较运算符错误控制运算符执行运算符递增递减运算符逻辑运算符字符串运算符数组运算符类型运算符
1算术运算符
算术运算符包括:加(+)、减(-)、乘(*)、除(/)、求余(求模)(%)
<?php//加法运算符$a =1;$b =2;echo "a与b的和为:";echo $a + $b ;//减法运算符echo "<br>a与b的差为: ";echo $a - $b;//乘法运算符echo "<br>a与b的积为: ";echo $a * $b ;//除法运算符echo "<br>a与b的商为: ";echo $a / $b;//求余数echo "<br>a与b求余为: ";echo $a % $b ;?>
注意:
1.当运行算术运算符时,字符串类型的会自动转换为0进行和数字运算,比如:$a=1 $b=’b’,那么在运行算术运算符时,$b的值自动转换为0,$a+$b=1+0=1
案例:
2.赋值运算符:
赋值运算符:= 就是把某个值赋给某个变量
语法:$a=1;
赋值一般说的是把等号后面的值赋值给前面的变量,可以多次赋值,$a=$b=1;
3.比较运算符
==:等于,比较的是值,只要值相等结果就是等于===:全等,比较的时类型和值,只有两个都相等才相等!=:不等于:类型转换后两个值不相等,返回为true!==:不全等:两个值不相等或他们的类型不同>:大于,<:小于>=:大于等于<=:小于等于
<?php//比较运算符$a=1;$b=1;$c='1';if($a===$b){echo "全等";}elseif($a==$b){echo "相等";}else{echo "不相等";}echo "<br>";if($a===$c){echo "全等";}elseif($a==$c){echo "相等";}else{echo "不相等";?>
4.错误抑制符:@
说明:屏蔽一些不重要的错误,不影响当前页面的脚本运行
<?php$con =@mysql_connect('localhost','root','');if($con){echo '连接成功';}?>
5.字符串运算符:.或者.=
说明:字符串连接符(拼接),把两个或多个字符串进行连接
<?php$str1='公众号';$str2='吾爱乐享';$str3=$str1.$str2;echo $str3;?>
7逻辑运算符:== —
说明:当前的操作数会自动加1或者减1
如果一个操作数,不给赋值,++$a和$a++是一样的。
前加:++$a;先加1在赋值。后加:$a++;先赋值在加1.
<?php$a=1;$b=1;$b++;++$a;echo $a,$b;//结果为2.自身变量操作++$a和$a++结果是一样的$c=++$a;echo $c,$a;//结果a=3.c=3两个变量操作,++$a和$a++结果不一样$d=$b++;echo $d,$b;//结果b=2,d=3?>
//利用自增,实现循环遍历for($n=0;$n<=10;$n++){echo '<br>a'; echo $n;}echo '</br>-----------------';//利用自增,实现外部变量循环遍历$z='a';for($i=0;$i<=10;$i++){$z++;echo $z;}
未经允许不得转载
目标1:
执行如下最简单的php程序(代码):
可见,还不行,于是,需要去配置。
apache的配置文件在哪里?
apache安装目录/conf/httpd.conf
用编辑器打开它:
如下:
这就是apache中的“众多模块”,有的已经,有的没有开启。
“php语言”就是apache中的一个模块——但我们得自己去添加上并进行配置!
分两步:
第1步:添加php语言模块,如下所示:
第2步:设定有php语言包,去执行php后缀的文件(中的脚本代码)
然后,重启apache,重新浏览刚才的php网页,如下:
1.区分大小写的情况
· 是指变量名区分大小写,其他基本都不区分
· 比如函数名不区分
· 比如系统中使用的关键字也不区分大小写,比如if, else, for
· 常量:可以自己设定是否区分,默认是区分的,也是推荐的做法。
2.语句结束符
· 一条语句使用一个分号结束
· 一段php代码区域中最后一个分号可省略
· php结束标记省略则不能省略最后一个分号
3.php注释
· 单行注释
o //常规风格(推荐)
o #配置文件风格
· 多行注释
o /* ....多行注释内容... */
多行注释技巧1:
/*
.... .....
//*/
多行注释技巧2:
if语句
4.变量
基本理解
变量是一个“标识符”,是一个“名字”,它用于存储并表示可以变化的数据;
对数据的使用和操作,只要通过变量就可以了!
每个变量中,就存储“一个数据”!
变量跟其所存储的数据之间的关系,称为“引用关系(指代关系)”,比如:
$i = 1; //则该语句的含义如下图所示
5.isset()判断:
用于判断一个变量“是否存在”——严格来说,是判断该变量中“是否有有效数据”;
返回的结果是布尔值:true(表示有),false(表示没有)
代码演示如下:
6.unset()销毁:
可以理解为:将变量和数据之间的原来的“引用关系”(指代关系)断开!!!
如下图所示:
7.变量的传值方式:
说明:
1,这里研究的是:将一个变量的值,传给另一个变量的内部机制(一对一情形)
2,只有2种:值传递,引用传递;
3,php中,默认都是值传递,引用传递必须使用引用符号:&
8.值传递:
将变量1的数据值,“复制”一份,然后将该复制出来的新的数据值,赋值给变量2:
形式为:
$v2 = $v1;
比如:
$v1 = 1;
$v2 = $v1;
理解:
9.引用传递:
将变量1的对数据的关系,“复制”一份,让变量2去使用该关系,其实相当于变量2也有一个指向之前变量1的数据的关系。
形式为:
$v2 = & $v1;
比如:
$v1 = 1;
$v2 = & $v1;
理解:
10.可变变量
是一个变量名本身又是一个变量的“情况”。
$name = “a”;
$a = 10;
echo $$name; //这就是可变变量,其实,它是指输出一个变量:$$name,其中变量名为”$name”,也就是“a”,即这里输出的就是变量 $a,也就是10
$b = 20;
$name = “b”;
echo $$name; //此时输出:20,其实是输出变量 $b
再举例:
$a = 10;
$b = “a”;
$c = “b”;
$d = $$$c + 4;; //14, 这里,$$$c就是“可变变量”
<?php
function addition ($a, $b){
echo ($a + $b), "\n";
}
$result = "addition";
$result (3,6);
?>