学习一下上古语言, 据说渗透测试用得到。
字符串加密函数
好的,下面举例说明一下这几种加密函数的用法:
md5()函数:
1$str = 'Hello World!';
2$encrypted_str = md5($str);
3echo $encrypted_str;
4// 输出结果:b10a8db164e0754105b7a99be72e3fe5
sha1()函数:
1$str = 'Hello World!';
2$encrypted_str = sha1($str);
3echo $encrypted_str;
4// 输出结果:0a4d55a8d778e5022fab701977c5d840bbc486d0
base64_encode()函数:
1$str = 'Hello World!';
2$encoded_str = base64_encode($str);
3echo $encoded_str;
4// 输出结果:SGVsbG8gV29ybGQh
password_hash()和password_verify()函数:
1$password = 'mypassword';
2$hashed_password = password_hash($password, PASSWORD_DEFAULT);
3echo $hashed_password; // 输出生成的哈希值
4
5// 验证输入密码是否与哈希值匹配
6
7$input_password = 'mypassword';
8if (password_verify($input_password, $hashed_password)) {
9 echo 'Password is valid!';
10} else {
11 echo 'Invalid password.';
12}
关于对称加密算法和非对称加密算法,它们的用法相对复杂,需要使用特定的算法和密钥进行加密和解密。
php正则表达式
//preg_match_all() 函数返回所有匹配的数组 //preg_match() 函数返回第一个匹配的数组 //preg_replace() 函数返回替换后的字符串 //preg_split() 函数返回分割后的数组 //preg_grep() 函数返回匹配的数组 //preg_quote() 函数返回转义后的字符串 //preg_last_error() 函数返回最后一个错误代码 //preg_filter() 函数返回过滤后的数组
//preg_match_all() 函数返回所有匹配的数组 //preg_match() 函数返回第一个匹配的数组 //preg_replace() 函数返回替换后的字符串 //preg_split() 函数返回分割后的数组 //preg_grep() 函数返回匹配的数组 //preg_quote() 函数返回转义后的字符串 //preg_last_error() 函数返回最后一个错误代码 //preg_filter() 函数返回过滤后的数组
preg_match_all() 函数
在双斜杠之间的内容是正则表达式模式,
- i 修饰符用于执行不区分大小写的搜索。
- g 用于执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
- 括号是分组标记,用于在匹配中捕获子模式。
1<?php
2$str = "Apples and bananas.";
3$pattern = "/ba(na){2}/i";
4preg_match_all($pattern, $str, $matches);
5print_r($matches);
6?>
php文件操作
读取文件
php 打开并读取文件
1$fp = fopen("test.txt", "r");
2echo fread($fp, filesize("test.txt"));
3fclose($fp);
单行读取文件 - fgets()
可以接受两个参数,文件指针,最大长度,如果不指定最大长度,将读取整行。
下面例子中
- 使用 fgets() 函数来读取文件中的单行
- 使用 feof() 函数来检查是否已到达文件末尾
- 每一行都采用 md5() 函数进行加密,然后输出到浏览器中。
1$fp = fopen("test.txt", "r");
2while(!feof($fp))
3{
4 // echo fgets($fp). "<br />";
5 echo md5(fgets($fp)). "<br />";
6}
7fclose($fp);
写入文件
php 打开并写入文件
1$fp = fopen("test.txt", "w");
2fwrite($fp, "Hello World. Testing!\r\n");
3fwrite($fp, "Hello World. Testing!");
4fclose($fp);
5echo "写入成功";
复制、删除、重命名文件
复制文件 - copy()
1copy("test.txt", "test2.txt");
2echo "复制成功";
删除文件 - unlink()
1unlink("test2.txt");
2echo "删除成功";
重命名文件 - rename()
1rename("test.txt", "test3.txt");
2echo "重命名成功";
其他常用文件操作函数
is_readable、is_writable、is_executable
filectime、filemtime、fileatime (create、modify、access)
1$file = 'test.txt';
2file_exists($file) or die('文件不存在,程序退出!');
3
4echo $file.' 文件大小是:'.filesize($file).' 个字节<br>';
5if(is_readable($file)){
6 echo $file.' 文件是可读的。<br>';
7}else{
8 echo $file.' 文件是不可读的。<br>';
9}
10if(is_writable($file)){
11 echo $file.' 文件是可写的。<br>';
12}else{
13 echo $file.' 文件是不可写的。<br>';
14}
15if(is_executable($file)){
16 echo $file.' 文件是可执行的。<br>';
17}else{
18 echo $file.' 文件是不可执行的。<br>';
19}
20echo '文件的创建时间是:'.date('Y-m-d H:i:s',filectime($file)).'。<br>';
21echo '文件的修改时间是:'.date('Y-m-d H:i:s',filemtime($file)).'。<br>';
22echo '文件上次的访问时间是:'.date('Y-m-d H:i:s',fileatime($file)).'。<br>';
PHP超级全局变量 - 以及表单
print_r函数:
print_r 函数是 PHP 中一个功能强大的函数,可用于打印变量的易读信息。它对于调试代码、理解复杂的数据结构以及查找代码中的错误非常有用。
如果要显示带有换行的内容,需要在输出的 HTML 代码中添加 <pre>
标签
1<pre>
2<?php
3
4// 定义一个对象
5class Person {
6 public $name;
7 public $age;
8 public $email;
9
10 function __construct($name, $age, $email) {
11 $this->name = $name;
12 $this->age = $age;
13 $this->email = $email;
14 }
15 }
16
17 // 创建一个 Person 对象并打印信息
18 $person = new Person('John', 30, 'john@example.com');
19 print_r($person);
20
21 ?>
22<pre/>
- PHP超级全局变量主要有:
* $GLOBALS
:
该变量用于引用脚本中的全局变量,在函数或方法中使用时非常有用。
1<pre>
2<?php
3$var = "Hello World";
4print_r($GLOBALS);
5?>
6<pre/>
* $_SERVER
:
该变量包含与当前运行 PHP 的服务器相关的信息,例如 URL、文件路径、HTTP 头等。
1Array
2(
3 [USER] => kasusa
4 [COMMAND_MODE] => unix2003
5 [__CFBundleIdentifier] => com.yourcompany.phpstudy-pro
6 [PATH] => /usr/bin:/bin:/usr/sbin:/sbin
7 [LOGNAME] => kasusa
8 [SSH_AUTH_SOCK] => /private/tmp/com.apple.launchd.hCvBqjuPFw/Listeners
9 [HOME] => /Users/kasusa
10 [SHELL] => /bin/zsh
11 [TMPDIR] => /var/folders/yr/zk0mghjs43l7b8qz_4mbdy480000gn/T/
12 [__CF_USER_TEXT_ENCODING] => 0x1F5:0x19:0x34
13 [XPC_SERVICE_NAME] => 0
14 [XPC_FLAGS] => 0x0
15 [HTTP_CONNECTION] => keep-alive
16 [HTTP_ACCEPT_ENCODING] => gzip, deflate
17 [HTTP_ACCEPT_LANGUAGE] => zh-CN,zh-Hans;q=0.9
18 [HTTP_USER_AGENT] => Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.1 Safari/605.1.15
19 [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
20 [HTTP_UPGRADE_INSECURE_REQUESTS] => 1
21 [HTTP_HOST] => localhost
22 [REDIRECT_STATUS] => 200
23 [SERVER_NAME] => localhost
24 [SERVER_PORT] => 80
25 [SERVER_ADDR] => 127.0.0.1
26 [REMOTE_PORT] => 49565
27 [REMOTE_ADDR] => 127.0.0.1
28 [SERVER_SOFTWARE] => nginx/1.16.1
29 [GATEWAY_INTERFACE] => CGI/1.1
30 [REQUEST_SCHEME] => http
31 [SERVER_PROTOCOL] => HTTP/1.1
32 [DOCUMENT_ROOT] => /Applications/phpstudy/WWW
33 [DOCUMENT_URI] => /1.php
34 [REQUEST_URI] => /1.php
35 [SCRIPT_NAME] => /1.php
36 [CONTENT_LENGTH] =>
37 [CONTENT_TYPE] =>
38 [REQUEST_METHOD] => GET
39 [QUERY_STRING] =>
40 [PATH_TRANSLATED] => /Applications/phpstudy/WWW
41 [PATH_INFO] =>
42 [SCRIPT_FILENAME] => /Applications/phpstudy/WWW/1.php
43 [FCGI_ROLE] => RESPONDER
44 [PHP_SELF] => /1.php
45 [REQUEST_TIME_FLOAT] => 1679464788.7792
46 [REQUEST_TIME] => 1679464788
47)
* $_REQUEST
、$_POST
、$_GET
该变量包含了从 GET、POST 和 COOKIE 中收集到的用户提交的数据。它可以轻松地访问所有 HTTP 请求变量。
1<form action="1.php" method="post">
2 <p>post</p>
3 <input type="text" name="name" value="John">
4 <input type="text" name="age" value="30">
5 <input type="submit" value="Submit">
6</form>
7<form action="1.php" method="get">
8 <p>get</p>
9 <input type="text" name="name" value="John">
10 <input type="text" name="age" value="30">
11 <input type="submit" value="Submit">
12</form>
13<pre>
14 <?php
15 echo "_REQUEST:";
16 print_r($_REQUEST);
17 echo "_POST:";
18 print_r($_POST);
19 echo "_GET:";
20 print_r($_GET);
21
22 if (isset($_POST['name']) && isset($_POST['age'])) {
23 echo 'Hello ' . $_POST['name'] . ' you are ' . $_POST['age'] . ' years old.';
24 }
25 ?>
26</pre>
Post 和 Get 是 HTTP 协议中的两种常见请求方法,用于向服务器发送请求并获取响应。
Get 请求通常用于从服务器获取资源,如 Web 页面、图片、视频等。它通过 >URL 参数将数据传递给服务器,因此在浏览器地址栏中可以看到请求的参数。
Post 请求则通常用于将数据发送给服务器,比如提交表单数据、上传文件等。 Post 请求将数据包含在请求体中,并且不会在 URL 中暴露数据,因此更安全。
总体来说,Get 和 Post 的主要区别在于数据传输方式和用途。Get 请求适合请求少量数据,Post 请求适合传输大量数据和敏感数据。
* $_FILES
:
该变量用于上传文件类型的表单数据。
1<form action="1.php" method="post" enctype="multipart/form-data">
2 <p>file</p>
3 <input type="file" name="file">
4 <input type="submit" value="Submit">
5</form>
6
7<pre>
8 <?php
9 echo "文件名:".$_FILES['file']['name'];
10 print_r($_FILES);
11 ?>
12</pre>
返回值示例:
1(
2 [file] => Array
3 (
4 [name] => 52.jpg
5 [type] => image/jpeg
6 [tmp_name] => /private/var/folders/yr/zk0mghjs43l7b8qz_4mbdy480000gn/T/phpzC0q0A
7 [error] => 0
8 [size] => 1032252
9 )
10)
- $_FILES[’name’]:上传文件的原始名称。
- $_FILES[’type’]:上传文件的 MIME 类型。
- $_FILES[‘size’]:上传文件的大小(以字节为单位)。
- $_FILES[’tmp_name’]:上传文件的临时存储路径,通常在服务器的临时目录中。
- $_FILES[’error’]:上传文件时可能发生的错误代码,例如文件过大或文件类型不支持等。如果没有发生错误,则该变量值为 0。
* $_ENV
:
$_ENV 变量是在服务器端设置的,通常由操作系统或 Web 服务器配置文件中的设置传递给 PHP 的。
在 Linux 系统中,你可以使用 export 命令来设置环境变量。例如,要将名为 API_KEY 的环境变量设置为一个 API 密钥值,可以执行以下命令:
1export API_KEY=your_api_key_value
在 Windows 系统中,可以通过控制面板的"系统"->“高级系统设置”->“环境变量"来设置环境变量。
在 PHP 脚本中,你可以使用 $_ENV 数组来访问这些设置的变量。例如,要获取上面设置的 API 密钥,你可以使用以下代码:
1Copy Code
2$apiKey = $_ENV['API_KEY'];
需要注意的是,不同的 Web 服务器和操作系统可能有不同的方法来设置环境变量。
* $_COOKIE
:
该变量可用于读取用户在浏览器中存储的 cookie 数据。
1if (isset($_COOKIE['username'])) {
2 // do something with the cookie value
3 print_r($_COOKIE);
4}
* $_SESSION
:
该变量可用于存储并访问会话数据,直到用户关闭浏览器为止。
php 目录操作
创建目录mkdir()
1mkdir("test");
2echo "创建成功";
删除目录rmdir()
1rmdir("test");
2echo "删除成功";
遍历目录
opendir
打开目录
is_dir()
判断是否是目录
readdir()
读取目录
closedir()
关闭目录
1$dir = opendir("/");
2while($file = readdir($dir))
3{
4 $fullpath = "/".$file;
5 //输出是目录还是文件
6 if(is_dir($fullpath))
7 echo "📁dir: ";
8 else
9 echo "file: ";
10 //输出文件名
11 echo $file. "<br />";
12}
13closedir($dir);
demo php文件浏览器:
我让chatgpt帮我写的
1// 设置要浏览的目录路径
2$dir_path = "/";
3
4// 如果有文件夹名称参数,更新要浏览的目录路径
5if (isset($_GET['folder'])) {
6 $folder_path = $_GET['folder'];
7 // 将相对路径转换成绝对路径
8 $dir_path .= "/". ($folder_path == '.' ? '' : $folder_path);
9}
10
11// 遍历目录并获取文件名和大小
12$files = array();
13if ($handle = opendir($dir_path)) {
14 while (false !== ($entry = readdir($handle))) {
15 if ($entry != "." && $entry != "..") {
16 $fullpath = $dir_path . "/" . $entry;
17 if (is_dir($fullpath)) {
18 $files[] = array(
19 'name' => $entry,
20 'type' => 'dir'
21 );
22 } else {
23 $files[] = array(
24 'name' => $entry,
25 'type' => pathinfo($fullpath, PATHINFO_EXTENSION)
26 );
27 }
28 }
29 }
30 closedir($handle);
31}
32
33// 输出文件列表
34echo "<ul>";
35echo "<p>pwd:$folder_path</p>";
36if ($folder_path != '') {
37 // 添加返回上一级目录链接(除了根目录)
38 echo "<li><a href=\"?folder=".dirname($folder_path)."\">..</a></li>";
39}
40foreach ($files as $file) {
41 if ($file['type'] == 'dir') {
42 echo "<li><a href=\"?folder=" . $folder_path . "/" . $file['name'] . "\">" . $file['name'] . "</a></li>";
43 } else {
44 echo "<li>" . $file['name'] ."</li>";
45 }
46}
47echo "</ul>";
php链接mysql数据库
mysqli 和 mysql
- 从 PHP 5.5.0 版本开始,mysql 扩展已经废弃,从 PHP 7.0.0 版本开始,mysql 扩展已被移除
- mysqli 则是 MySQLi(MySQL improved)的缩写,是官方推荐的用于连接 MySQL 数据库的扩展
面向过程方式
面向过程方式下,连接 MySQL 数据库通常使用 mysqli_connect() 函数,该函数的参数分别为数据库服务器的地址、用户名、密码和数据库名,返回一个 MySQL 连接标识符,如果连接失败则返回 FALSE。
1<?php
2$host = "localhost";
3$user = "root";
4$password = "root";
5$database = "mysql";
6$conn = mysqli_connect($host, $user, $password, $database);
7
8// 检查连接是否成功
9if (!$conn) {
10 die("Connection failed: " . mysqli_connect_error());
11}
12
13// 执行查询语句
14$sql = "SELECT User FROM user";
15echo $sql . "<br>";
16$result = mysqli_query($conn, $sql);
17
18// 处理查询结果
19while ($row = mysqli_fetch_assoc($result)) {
20 echo "User: " . $row["User"] . "<br>";
21}
22
23// 关闭数据库连接
24mysqli_close($conn);
使用
fetch_assoc
方法从 $result 结果集中获取一行数据,并将其赋值给 $row 变量,如果没有数据了,则返回 FALSE。(一行一行的获取,直到没有数据为止)如果使用
fetch_row
方法,则返回的是一个索引数组,如果使用fetch_array
方法,则返回的是一个关联数组和索引数组的结合
面向对象方式
面向对象方式下,连接 MySQL 数据库通常使用 mysqli 或者 PDO 类。这些类封装了数据库连接和操作,更加易于维护和扩展
基本上就是,全都是调用属性和方法。
连接数据库,查询
1<?php
2// 使用 mysqli_connect() 函数连接 MySQL 数据库
3$host = "localhost";
4$user = "root";
5$password = "root";
6$database = "mysql";
7$conn = new mysqli($host, $user, $password, $database);
8
9// 检查连接是否成功
10if ($conn->connect_error) {
11 die("Connection failed: " . $conn->connect_error);
12}
13
14// 执行查询语句
15$sql = "SELECT * FROM user";
16$result = $conn->query($sql);
17
18// 处理查询结果
19while ($row = $result->fetch_assoc()) {
20 echo "User: " . $row["User"] . "<br>";
21}
22
23// 关闭数据库连接
24$conn->close();
建表
1$conn = new mysqli($host, $user, $password)
2$conn->select_db($database);
3// 执行查询语句
4$sql = "CREATE TABLE MyGuests (
5 id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
6 firstname VARCHAR(30) NOT NULL,
7 lastname VARCHAR(30) NOT NULL,
8 email VARCHAR(50),
9 reg_date TIMESTAMP
10 )";
11
12$conn->query($sql);
与表单form联动
1<form action="1.php" method="get">
2 firstname
3 <input type="text" name="name" placeholder="firstname">
4 <input type="submit" value="search">
5</form>
6
7<?php
8// 使用 mysqli_connect() 函数连接 MySQL 数据库
9$host = "localhost";
10$user = "root";
11$password = "root";
12$database = "test";
13$conn = new mysqli($host, $user, $password, $database);
14
15// 检查连接是否成功
16if ($conn->connect_error) {
17 die("Connection failed: " . $conn->connect_error);
18}
19//if isset post
20if (isset($_GET['name'])) {
21 // 执行查询语句
22 $conn->select_db("test");
23 $sql = "select * from MyGuests where firstname = '" . $_GET['name']."'";
24 echo "sql:".$sql."<br>";
25 $result=$conn->query($sql);
26
27 // // 处理查询结果
28 while ($row = $result->fetch_assoc()) {
29 //id firstname lastname email
30 echo "id: " . $row["id"] . "; Name: " . $row["firstname"] . " " . $row["lastname"] . "<br>";
31 }
32}
33
34// 关闭数据库连接
35$conn->close();