What's PHP ?
Hypertext Preprocessor(超文本预处理器),是一种脚本语言,PHP脚本在服务器上运行,结果以纯HTML形式返回给浏览器。
PHP可以对服务器上的文件进行操作,也可以对数据库中的数据进行操作。
关于运行的服务器,可以考虑一下phpStudy呀~配置简单易上手
PHP基础语法
<?php //这是开头
//这是单行注释
header("Content-Type: text/html;charset=utf-8");
/* 这是
多行注释*/
echo "这是用echo直接输出,","可以输出多个字符串,","比print看起来优秀一点","<br>";
print "这是用print直接输出,只能输出一个字符串";
//这是结尾 ?>
变量及数据类型
- 变量名前需带$符号;
- 变量名必须用字母或者下划线开头;
- 变量名区分大小写、不能包含空格;
- 没有声明的变量,当第一次被赋值时,被创建。
变量作用域
example:
<?php
header("Content-Type: text/html;charset=utf-8");
$x = 9; //这是一个全局变量
echo "全局变量x的值为:$x";
echo "<br>";
echo "<br>";
function demo(){
$y = 12; //这是一个局部变量
echo "局部变量y的值为:$y";
echo "<br>";
global $x; //使用global,在函数内引用全局变量
$z = $x + $y;
echo "全局变量x和局部变量y的和为:$z";
echo "<br>";
$m = $GLOBALS['x'] + 2 * $y; //也可以用$GLOBALS[]数组的形式,引用全局变量
echo "第二种引用全局变量方式的结果为:$m";
echo "<br>";
}
function demo2(){
static $n = 1; //这是一个加了static关键字的局部变量
echo "加了static关键字的局部变量第","$n","次输出是:$n";
$n++;
echo "<br>";
}
demo();
echo "<br>";
demo();
echo '<p style="color:red">由此可见,当一个函数完成时,它的所有变量一般都会被删除。</p>';
demo2();
demo2();
demo2();
echo '<p style="color:red">由此可见,加了static的局部变量,每次调用该函数时,会保留前一次被调用结束时的值。</p>';
?>
效果如下:
PHP将所有全局变量存储在数组$GLOBALS[index]的数组中,index保存变量的名称。
PHP对象类似JAVA对象,看一眼就行。
常量
define,类似C语言中的define。语法:
bool define(string $name,mixed $value[, bool $case_insensitive = false])
参数:
name,参数名,必选;
value,参数值,必选;
case_insensitive:大小写敏感,默认为false大小写敏感,可选。
example:
<?php
header("Content-Type: text/html;charset=utf-8");
define("a","Fine"); //默认,大小写敏感
define("B","Fine",false); //设置为false,大小写敏感
define("C","Fine",true); //设置为true,大小写不敏感
echo A,"<br>";
echo a,"<br>";
echo B,"<br>";
echo b,"<br>";
echo C,"<br>";
echo c;
?>
运行结果:
运算符
算数运算符、赋值运算符、递增/递减运算符、比较运算符、逻辑运算符、三元运算符与C语言类似。
数组运算符
example:
<?php
$x = array('a' =>"cat", 'b' =>"orange", 'm' =>"fine");
$p = array('a' =>"cat", 'b' =>"orange", 'm' =>"fine");
$y = array('c' =>"rabbit", 'd' =>"white", 'm' =>"fine");
$q = array('c' =>"rabbit",'m' =>"fine", 'd' =>"white");
$z = $x + $y; //合并x、y两个数组;
//var_dump()函数用于输出表达式的类型和值
var_dump($z); //输出合并后的数组z,做并集
echo "<br>","<br>";
var_dump($x == $y); //比较两个数组,如果所有键/值对相等,不管顺序是否相同,就返回true
echo "<br>";
var_dump($y ==$q);
echo "<br>","<br>";
var_dump($x === $p); //比较两个数组,键/值对和顺序完全相同才返回true
echo "<br>";
var_dump($x === $y);
echo "<br>","<br>";
var_dump($x != $y); //比较两个数组,如果不相等,则返回true
echo "<br>";
var_dump($x <> $y);
echo "<br>";
var_dump($x !== $y);
?>
运行结果:
超全局变量
这是PHP 4.1.0之后系统中自带的变量,在一个脚本的全部作用域中都可用。
$GLOBALS
超级全局变量组。
在前面变量作用域中有提到,这里做一个简单的演示。
<?php
$x = "Flexible";
$y = "Cat";
function globalsDemo(){
$GLOBALS['z'] = $GLOBALS['x'].$GLOBALS['y']; //z在这里也被定义为全局变量
echo $z; //这样是不行的,因为z是全局变量
echo $GLOBALS['z'];
}
globalsDemo();
echo "<br>";
echo $z; //在函数外直接用$z是可以的
?>
运行结果:
$_SERVER
包含了服务器、当前脚本等部分信息,是数组,数组中的项目由Web服务器创建。
示例:
<?php
echo $_SERVER['PHP_SELF'], "<br>"; //返回当前脚本的相对地址
echo $_SERVER['SCRIPT_FILENAME'], "<br>"; //返回当前脚本的绝对地址
echo $_SERVER['SERVER_ADDR'], "<br>"; //返回当前脚本所在服务器的IP地址
echo $_SERVER['SERVER_NAME'], "<br>"; //返回当前运行脚本所在服务器的主机名
echo $_SERVER['SERVER_SOFTWARE'], "<br>"; //返回服务器表示字符串
?>
运行结果:
更多元素及其含义可以需要时找度娘。
$_REQUEST
收集HTML表单提交的数据,不论method为POST还是GET都可以。。
示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>requestDemo</title>
</head>
<body>
<form method="POST" action="<?php echo $_SERVER['PHP_SELF']?>">
<!--action的值表示,在当前脚本页面显示结果-->
Lover:<input type="text" name="someone">
<input type="submit">
</form>
<?php
@$name = htmlspecialchars($_REQUEST['someone']);
echo "My lover is ".$name;
?>
</body>
</html>
运行结果:
$_POST
收集来自表单中method="post"的表单值,用POST方法的表单发送的值不会在浏览器的地址栏显示,并且发送的信息量也无限制。
示例:
example8.php:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>postDemo</title>
</head>
<body>
<form action="Hey.php" method="post">
Who are you?<input type="text" name="fname">
<input type="submit" value="OK">
</form>
</body>
</html>
Hey.php:
<?php
echo "Hey ".$_POST["fname"].", you are soooo pretty~";
?>
运行结果:
$_GET
收集来自表单中method="get"的表单值,用GET方法的表单发送的值会在浏览器的地址栏显示,并且发送的信息不能超过2000个字符。
示例代码仅将上一个示例中的POST改成GET。
$_FILES
用于从客户端向远程服务器上传文件。语法:
$_FILES["file"]["name"] //客户端上传文件的名称
$_FILES["file"]["type"] //所上传的文件类型
$_FILES["file"]["size"] //所上传的文件大小
$_FILES["file"]["temp_name"] //上传的文件保存在服务器中的临时文件名,无法用putenv()方法设置
$_FILES["file"]["error"] //和该文件上传相关的错误代码
- 在表单中需要上传文件时,用enctype属性规定提交表单时要使用的内容类型。文件内容属于二进制数据,所以需要使用multpart/form-data。
- 允许用户上传文件是由很大的安全风险的,在编写上传脚本时最好加上文件的上传限制。
具体可以扒CTF中的文件上传类题型源码来看,本胖这里就暂时不写了,
还不是因为懒。
$_ENV
存储了一些系统的环境变量,使用<?php print_r($_ENV); ?>
查看,但是因为牵扯到实际的操作系统,所以一般情况下不可能让你查看它的完整列表。
- 如果非要看的话,那么,打开php.ini
-
改成EGPCS,就OK了。
讲道理这样是没问题的,但是我也不知道为什么我的虚拟机里不行,
怂的不敢在本机上瞎折腾,各位看官们了解一下就好。
$_COOKIE
cookie一般用来识别用户,使用setcookie()创建cookie,语法:
setcookie(name, value, expire, path, domain)
$_COOKIE变量就是用来获取cookie的值的。
删除cookie时,将过期日期变成过去的时间点就行啦。
这一块的示例,回(随)头(缘)再补吧
$_SESSION
session变量用来临时存储关于单一用户会话的信息,或者更改用户会话的设置。
session工作机制:为每位用户创建一个唯一的UID,并根据这个UID来存储变量。UID存储在cookie中,或者通过URL进行传导。
- 在php中使用session必须在<html>标签前加上
<?php session_start(); ?>
,这样就会向服务器注册用户的会话,为用户会话分配一个UID; - 存储和获取session变量的值都是使用$_SESSION变量完成,
_SESSION['UID']
; - 销毁session时,可以用unset()释放指定的session变量,也可以用session_destroy()函数彻底销毁session。
unset($_SESSION['UID']); //释放制定的session变量
session_destroy(); //彻底销毁所有的session
包含
俩函数,include和reqire,语法:
include 'filename'; require 'filename';
区别:
- include一般放在程序的流程控制中,当程序执行遇到时才会引用;require一般放在PHP文件的最前面,在程序执行前就导入要引用的文件。
- include引入的文件有错误时,不会中断,继续执行,返回一个警告;require引入的文件有错误时,执行终端,返回一个错误。
今天的白小胖也很优秀(≧∇≦)/
网友评论