环境配置
建议使用 phpStudy 搭建本机的实验环境
基本目标:能看懂php代码
推荐:安装phpStudy, 并尝试编写和运行php程序
基本的 PHP 语法
<?php
// 基本输出语句
echo "Hello World!<br>"; // echo是最常用的输出函数,速度快,简单直接。 不返回任何值。
print("<br>aaaaaaa"); // print()只允许输出一个字符串,返回值总为 1
?>
变量
<?php
$x=5;
$y=6;
$z=$x+$y;
echo $z;
?>
数据类型
- 字符串
将任何文本放在单引号和双引号中
- 整型
整型可以用三种格式来指定:十进制, 十六进制( 以 0x 为前缀)或八进制(前缀为 0)。
var_dump()
函数返回变量的数据类型和值,例如var_dump("dadada");
将输出string(6) "dadada"
- 浮点型
浮点数是带小数部分的数字,或是指数形式。
- 布尔型
布尔型可以是 TRUE 或 FALSE。
- 数组
数组可以在一个变量中存储多个值。
$cars=array("Volvo","BMW","Toyota");
echo $cars[0];
- 对象
在 PHP 中,对象必须声明。首先,你必须使用class关键字声明类对象。类是可以包含属性和方法的结构。
<?php
class Car
{
public $color = "green";
public function what_color() {
return $this->color;
}
}
$herbie = new Car;
echo $herbie->what_color();
?>
以上实例中PHP关键字this
就是指向当前对象实例的指针,不指向任何其他对象或类。
分支语句
- If...Else 语句
if (条件)
{
if 条件成立时执行的代码;
}
elseif (条件)
{
elseif 条件成立时执行的代码;
}
else
{
条件不成立时执行的代码;
}
- Switch 语句
<?php
switch (n)
{
case label1:
如果 n=label1,此处代码将执行;
break;
case label2:
如果 n=label2,此处代码将执行;
break;
default:
如果 n 既不等于 label1 也不等于 label2,此处代码将执行;
}
?>
循环语句
- while 循环
while (条件)
{
要执行的代码;
}
- do...while 语句
首先执行一次代码块,然后在指定的条件成立时重复这个循环
do
{
要执行的代码;
}
while (条件);
- for 循环
for (初始值; 条件; 增量)
{
要执行的代码;
}
- foreach 循环
每进行一次循环,当前数组元素的值就会被赋值给 $value 变量(数组指针会逐一地移动),在进行下一次循环时,您将看到数组中的下一个值。
foreach ($array as $value)
{
要执行代码;
}
函数
- 创建 PHP 函数
<?php
function functionName($param)
{
// 要执行的代码
}
?>
CTF必学
if (isset($_GET['cmd'])) {
// do sonething
}
mysql例子:
<?php
$link = mysqli_connect("localhost", "root", "root","test");
if(!$link){
die("ERROR: Could not connect database.");
}
$sql = "SELECT * FROM users";
$ok = mysqli_query($link, $sql);
mysqli_close($link);
?>
- $_POST
$_POST 被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="post"。
<html>
<body>
<form method="post" action="test.php">
Name: <input type="text" name="fname">
<input type="submit">
</form>
<?php
$name = $_POST['fname'];
echo $name;
?>
</body>
</html>
- $_GET
$_GET 同样被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="get"。
$_GET 也可以收集URL中发送的数据。
1. 在web服务器的对应目录下创建
get_test.php
文件<html> <body> <?php echo "Study " . $_GET['subject'] . " at " . $_GET['web']; ?> </body> </html>
2. 用URL向
get_test.php
文件发送的数据。在浏览器地址栏输入
ip:port/learningPHP/your_dir/get_test.php?subject=PHP&web=runoob.com
得到输出:
Study PHP at runoob.com
几个高危函数:
eval($string)
参数为一个字符串,该函数会将字符串当作php代码执行
system($string)
参数为一个字符串,该函数会将字符串当作系统命令执行
- ...
PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用
- $GLOBALS
$GLOBALS 是一个包含了全部变量的全局组合数组。变量的名字就是数组的键。
<?php
$x = 75;
$y = 25;
function addition()
{
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
addition();
echo $z; // 100
?>
- $_SERVER
$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。
元素/代码 | 描述 |
---|---|
$_SERVER['PHP_SELF'] | 当前执行脚本的文件名,与 document root 有关。例如,在地址为 http://example.com/test.php/foo.bar 的脚本中使用 $_SERVER['PHP_SELF'] 将得到 /test.php/foo.bar。__FILE__ 常量包含当前(例如包含)文件的完整路径和文件名。 从 PHP 4.3.0 版本开始,如果 PHP 以命令行模式运行,这个变量将包含脚本名。之前的版本该变量不可用。 |
$_SERVER['GATEWAY_INTERFACE'] | 服务器使用的 CGI 规范的版本;例如,"CGI/1.1"。 |
$_SERVER['SERVER_ADDR'] | 当前运行脚本所在的服务器的 IP 地址。 |
$_SERVER['SERVER_NAME'] | 当前运行脚本所在的服务器的主机名。如果脚本运行于虚拟主机中,该名称是由那个虚拟主机所设置的值决定。(如: www.runoob.com) |
$_SERVER['SERVER_SOFTWARE'] | 服务器标识字符串,在响应请求时的头信息中给出。 (如:Apache/2.2.24) |
$_SERVER['SERVER_PROTOCOL'] | 请求页面时通信协议的名称和版本。例如,"HTTP/1.0"。 |
$_SERVER['REQUEST_METHOD'] | 访问页面使用的请求方法;例如,"GET", "HEAD","POST","PUT"。 |
$_SERVER['REQUEST_TIME'] | 请求开始时的时间戳。从 PHP 5.1.0 起可用。 (如:1377687496) |
$_SERVER['QUERY_STRING'] | query string(查询字符串),如果有的话,通过它进行页面访问。 |
$_SERVER['HTTP_ACCEPT'] | 当前请求头中 Accept: 项的内容,如果存在的话。 |
$_SERVER['HTTP_ACCEPT_CHARSET'] | 当前请求头中 Accept-Charset: 项的内容,如果存在的话。例如:"iso-8859-1,*,utf-8"。 |
$_SERVER['HTTP_HOST'] | 当前请求头中 Host: 项的内容,如果存在的话。 |
$_SERVER['HTTP_REFERER'] | 引导用户代理到当前页的前一页的地址(如果存在)。由 user agent 设置决定。并不是所有的用户代理都会设置该项,有的还提供了修改 HTTP_REFERER 的功能。简言之,该值并不可信。) |
$_SERVER['HTTPS'] | 如果脚本是通过 HTTPS 协议被访问,则被设为一个非空的值。 |
$_SERVER['REMOTE_ADDR'] | 浏览当前页面的用户的 IP 地址。 |
$_SERVER['REMOTE_HOST'] | 浏览当前页面的用户的主机名。DNS 反向解析不依赖于用户的 REMOTE_ADDR。 |
$_SERVER['REMOTE_PORT'] | 用户机器上连接到 Web 服务器所使用的端口号。 |
$_SERVER['SCRIPT_FILENAME'] | 当前执行脚本的绝对路径。 |
$_SERVER['SERVER_ADMIN'] | 该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。如果脚本运行在一个虚拟主机上,则该值是那个虚拟主机的值。(如:[email protected]) |
$_SERVER['SERVER_PORT'] | Web 服务器使用的端口。默认值为 "80"。如果使用 SSL 安全连接,则这个值为用户设置的 HTTP 端口。 |
$_SERVER['SERVER_SIGNATURE'] | 包含了服务器版本和虚拟主机名的字符串。 |
$_SERVER['PATH_TRANSLATED'] | 当前脚本所在文件系统(非文档根目录)的基本路径。这是在服务器进行虚拟到真实路径的映像后的结果。 |
$_SERVER['SCRIPT_NAME'] | 包含当前脚本的路径。这在页面需要指向自己时非常有用。__FILE__ 常量包含当前脚本(例如包含文件)的完整路径和文件名。 |
$_SERVER['SCRIPT_URI'] | URI 用来指定要访问的页面。例如 "/index.html"。 |
- $_REQUEST
PHP $_REQUEST 用于收集HTML表单提交的数据。
<html>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>
<?php
$name = $_REQUEST['fname'];
echo $name;
?>
</body>
</html>
当用户通过点击 "Submit" 按钮提交表单数据时, 表单数据将发送至<form>
标签中 action 属性中指定的脚本文件。 $_SERVER['PHP_SELF']
说明指定的脚本文件为当前脚本文件。
想了解更多关于html中的表单知识,请点 这里
- PHP特性:动态函数调用
这个特性允许通过变量的值来调用函数。具体来说,变量的值是一个字符串,这个字符串的内容是一个函数的名称,然后通过该变量来调用这个函数。
例如:
$a = "system"; // 将变量 $a 的值设为 "system"
$b = "ls"; // 将变量 $b 的值设为 "ls"
$a($b); // 调用函数 system 并将 "ls" 作为参数传递,即执行system("ls");
这段代码实际上调用了 PHP 的 system
函数,并执行了 ls
命令,列出了当前目录的文件和文件夹。
这种特性在需要动态决定调用哪个函数时非常有用,但同时也需要谨慎使用,以避免潜在的安全问题,例如代码注入和不受控制的函数调用。
声明:
确石如此 | 版权所有,违者必究 | 如未注明,均为原创 | 本站采用 BY-NC-SA4.0 协议进行授权
|
转载请注明原文链接