php基础

PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器")是一种通用开源脚本语言,PHP 脚本在服务器上执行。
基本的 PHP 语法:
PHP 脚本可以放在文档中的任何位置。
PHP 脚本以 结束:

PHP 中的注释

PHP 变量
PHP 变量规则:
变量以 $ 符号开始,后面跟着变量的名称
变量名必须以字母或者下划线字符开始
变量名只能包含字母数字字符以及下划线(A-z、0-9 和 _ )
变量名不能包含空格
变量名是区分大小写的($y 和 $Y 是两个不同的变量)
PHP 语句和 PHP 变量都是区分大小写的。
注:当您赋一个文本值给变量时,请在文本值两侧加上引号。

PHP 有四种不同的变量作用域:
local
global
static
parameter
局部和全局作用域:
在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用 global 关键字。
在局部使用global $变量名 ---来定义一下。
在 PHP 函数内部声明的变量是局部变量,仅能在函数内部访问。

Static 作用域:
当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除。
要做到这一点,请在您第一次声明变量时使用 static 关键字。
<?php
function test(){
static $x=0;
}
echo $x;
>
在函数外也能正常输出函数内已经被内核删除的变量数据。
注:echo PHP_EOL相当于HTML中的
换行符。

echo 和 print语句的区别
1、echo 可以输出一个或多个字符串;
2、print 只允许输出一个字符串,返回值总为 1;
3、echo 输出的速度比 print 快;
4、echo 没有返回值,print 有返回值 1;
echo 是语法结构,也就是关键字,不是函数。使用的时候不用加括号,加上也可以。显示多个值的时候可以用逗号隔开。只支持基本类型,布尔型除外,echo true的时候显示,echo false的时候啥都没有,print有返回值所以有回显。
print 和 echo 基本一致。但是print 不支持逗号分隔多个显示变量的语法。

PHP EOF--定界符
在eof中使用html、js等语言不需要转义。
语法为
$sss= <<<EOF
..........
EOF;
以 <<<EOF 开始标记开始,以 EOF 结束标记结束,结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号 。

注:var_dump(参数)----输出数据类型(参数值)----自带输出功能,所以无需使用echo

PHP 常量
常量是单个值的标识符(名称)。在脚本中无法改变该值。有效的常量名以字符或下划线开头(常量名称前面没有 $ 符号)。
注释:与变量不同,常量贯穿整个脚本是自动全局的。
如需设置常量,请使用 define() 函数 - 它使用三个参数:
1.首个参数定义常量的名称
2.第二个参数定义常量的值
3.可选的第三个参数规定常量名是否对大小写不敏感。默认是 false。

Php运算符
运算符 名称 例子 结果
. 串接 $txt1 = "Hello" $txt2 = $txt1 . " world!" 现在 $txt2 包含 "Hello world!"
.= 串接赋值 $txt1 = "Hello" $txt1 .= " world!" 现在 $txt1 包含 "Hello world!"

运算符 名称 例子 结果

  • 联合 $x + $y $x 和 $y 的联合(但不覆盖重复的键)
    == 相等 $x == $y 如果 $x 和 $y 拥有相同的键/值对,则返回 true。
    === 全等 $x === $y 如果 $x 和 $y 拥有相同的键/值对,且顺序相同类型相同,则返回 true。
    != 不相等 $x != $y 如果 $x 不等于 $y,则返回 true。
    <> 不相等 $x <> $y 如果 $x 不等于 $y,则返回 true。
    !== 不全等 $x !== $y 如果 $x 与 $y 完全不同,则返回 true。

PHP foreach 循环
foreach 循环只适用于数组,并用于遍历数组中的每个键/值对。
语法
foreach ($array as $value) {
。。。。。。
}
Array数组中的数据会逐一传给变量$value。

PHP 创建用户定义函数
用户定义的函数声明以单词 "function" 开头:
语法
function functionName() {
被执行的代码;
}
注:函数名能够以字母或下划线开头(而非数字)。
注:函数名对大小写不敏感。
注:函数名应该能够反映函数所执行的任务。----编程规范
含参函数:
可以通过参数向函数传递信息。参数类似变量。
参数被定义在函数名之后,括号内部。您可以添加任意多参数,只要用逗号隔开即可。
"; } familyName("Li"); familyName("Hong"); ?>
--------Li Zhang
--------Hong Zhang
可以设置默认参数值
function functions($height=50){
Echo $height;
}
Functions(); >>>>>>50

如需使函数返回值,请使用 return 语句:

PHP数组
在 PHP 中,有三种数组类型:
索引数组 - 带有数字索引的数组
关联数组 - 带有指定键的数组
多维数组 - 包含一个或多个数组的数组
1.索引数组
索引是自动分配的(索引从 0 开始):
$cars=array("porsche","BMW","Volvo");
或者也可以手动分配索引:
$cars[0]="porsche";
$cars[1]="BMW";
$cars[2]="Volvo";
注:获得数组的长度 - count() 函数,count() 函数用于返回数组的长度(元素数)。

遍历索引数组
for($x=0;$x<$arrlength;$x++) {
echo $cars[$x];
echo "
";
}
2.关联数组
关联数组是使用您分配给数组的指定键的数组。
有两种创建关联数组的方法:
$age=array("Bill"=>"35","Steve"=>"37","Elon"=>"43");
或者:
$age['Bill']="63";
$age['Steve']="56";
$age['Elon']="47";
随后可以在脚本中使用指定键:

"63","Steve"=>"56","Elon"=>"47"); echo "Elon is " . $age['Elon'] . " years old."; ?>

遍历关联数组
如需遍历并输出关联数组的所有值,使用 foreach 循环
"63","Steve"=>"56","Elon"=>"47"); foreach($age as $x=>$x_value) { echo "Key=" . $x . ", Value=" . $x_value; echo "
"; } ?>

PHP - 数组的排序函数
重点是分两部分,指定键一部分,数据一部分。
sort(数组名) - 以升序对数组排序
rsort(数组名) - 以降序对数组排序
asort(数组名) - 根据值,以升序对关联数组进行排序
ksort(数组名) - 根据键,以升序对关联数组进行排序
arsort(数组名) - 根据值,以降序对关联数组进行排序
krsort(数组名) - 根据键,以降序对关联数组进行排序

PHP 全局变量 - 超全局变量
1.$GLOBALS — 引用全局作用域中可用的全部变量
$GLOBALS 这种全局变量用于在 PHP 脚本中的任意位置访问全局变量(从函数或方法中均可)。
PHP 在名为 $GLOBALS[index] 的数组中存储了所有全局变量。变量的名字就是数组的键。
2.下表列出了您能够在 $_SERVER 中访问的最重要的元素:
元素/代码 描述
$_SERVER['PHP_SELF'] 返回当前执行脚本的文件名。
$_SERVER['GATEWAY_INTERFACE'] 返回服务器使用的 CGI 规范的版本。
$_SERVER['SERVER_ADDR'] 返回当前运行脚本所在的服务器的 IP 地址。
$_SERVER['SERVER_NAME'] 返回当前运行脚本所在的服务器的主机名(比如 www.w3school.com.cn)。
$_SERVER['SERVER_SOFTWARE'] 返回服务器标识字符串(比如 Apache/2.2.24)。
$_SERVER['SERVER_PROTOCOL'] 返回请求页面时通信协议的名称和版本(例如,“HTTP/1.0”)。
$_SERVER['REQUEST_METHOD'] 返回访问页面使用的请求方法(例如 POST)。
$_SERVER['REQUEST_TIME'] 返回请求开始时的时间戳(例如 1577687494)。
$_SERVER['QUERY_STRING'] 返回查询字符串,如果是通过查询字符串访问此页面。
$_SERVER['HTTP_ACCEPT'] 返回来自当前请求的请求头。
$_SERVER['HTTP_ACCEPT_CHARSET'] 返回来自当前请求的 Accept_Charset 头( 例如 utf-8,ISO-8859-1)
$_SERVER['HTTP_HOST'] 返回来自当前请求的 Host 头。
$_SERVER['HTTP_REFERER'] 返回当前页面的完整 URL(不可靠,因为不是所有用户代理都支持)。
$_SERVER['HTTPS'] 是否通过安全 HTTP 协议查询脚本。
$_SERVER['REMOTE_ADDR'] 返回浏览当前页面的用户的 IP 地址。
$_SERVER['REMOTE_HOST'] 返回浏览当前页面的用户的主机名。
$_SERVER['REMOTE_PORT'] 返回用户机器上连接到 Web 服务器所使用的端口号。
$_SERVER['SCRIPT_FILENAME'] 返回当前执行脚本的绝对路径。
$_SERVER['SERVER_ADMIN'] 该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。
$_SERVER['SERVER_PORT'] Web 服务器使用的端口。默认值为 “80”。
$_SERVER['SERVER_SIGNATURE'] 返回服务器版本和虚拟主机名。
$_SERVER['PATH_TRANSLATED'] 当前脚本所在文件系统(非文档根目录)的基本路径。
$_SERVER['SCRIPT_NAME'] 返回当前脚本的路径。
$_SERVER['SCRIPT_URI'] 返回当前页面的 URI。

PHP表单处理
主要为post和get两种形式传递数据。
$_POST["name"]
$_GET["email"]
----------获取用户前段输入的数据。----------
在不没有使用函数htmlspecialchars($_SERVER["PHP_SELF"]),存在浏览器转义导致出发xxs漏洞。
http://www.example.com/test_form.php/"><script>alert('hacked')</script>
%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E>>>> >
所以通常程序员会使用:

"> htmlspecialchars() 函数把特殊字符转换为 HTML 实体。现在,如果用户试图利用 PHP_SELF 变量,会导致如下输出: 无法触发xss。 (通过 PHP trim() 函数)去除用户输入数据中不必要的字符(多余的空格、制表符、换行)。 (通过 PHP stripslashes() 函数)删除用户输入数据中的反斜杠(\)

一个完整的php表单提交源码:




  <?php
  // define variables and set to empty values
  $name = $email = $gender = $comment = $website = "";

  if ($_SERVER["REQUEST_METHOD"] == "POST") {
        $name = test_input($_POST["name"]);
        $email = test_input($_POST["email"]);
        $website = test_input($_POST["website"]);
        $comment = test_input($_POST["comment"]);
        $gender = test_input($_POST["gender"]);
  }

  function test_input($data) {
        $data = trim($data);
        $data = stripslashes($data);
        $data = htmlspecialchars($data);
      return $data;
  }
  ?>
  <h2>PHP 验证实例</h2>
  <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
           姓名:<input type="text" name="name">
           <br><br>
           电邮:<input type="text" name="email">
           <br><br>
           网址:<input type="text" name="website">
           <br><br>
           评论:<textarea name="comment" rows="5" cols="40">
  ?>          
posted @ 2020-10-03 21:45  g8r7v  阅读(122)  评论(0)    收藏  举报