网站开发涉及到的技术内容介绍——后端PHP(2)

时间:2024-11-21 18:20:45

网站开发涉及到的技术内容介绍——后端PHP(1)/xiaochenXIHUA/article/details/141000752?spm=1001.2014.3001.5501

一、PHP的常用函数

1.1、PHP文件夹的常用函数

PHP的目录常用函数
序号 目录常用函数 说明
1 $_SERVER['DOCUMENT_ROOT'] 获取到PHP项目的根目录
2 dirname(__FILE__) 获取到当前php文件所在的目录
3 is_dir(文件路径或文件路径和名称) 判断当前内容是否为文件夹目录
4 scandir(目录路径) 列出当前指定目录下的文件和目录
5 filetype(文件路径或文件路径和名称) 返回文件的数据类型,文件返回[file],目录返回[dir]
6 opendir(文件路径) 打开文件夹,返回该文件夹资源
7 readdir(目录资源) 每次只读取指定目录资源下的一个内容
8 closedir(目录资源) 关闭已经打开的目录资源

实现一个简易的目录内容浏览功能,如下所示:

1、新建一个名为【】的文件,内容如下:

  1. <html>
  2. <head>
  3. <meta charset="UTF-8">
  4. <title>测试PHP常用的函数</title>
  5. </head>
  6. <body>
  7. <?php
  8. //指定PHP页面的内容类型和编码格式
  9. header("Content-Type:text/html; charset=utf-8");
  10. //获取到根目录
  11. $rootPath=$_SERVER['DOCUMENT_ROOT'];
  12. echo "项目根目录为【$rootPath 】 <br>";
  13. //目录操作
  14. $curfilepathname=__FILE__;
  15. echo "当前程序所在的路径和名称为:$curfilepathname <br>";
  16. //判断当前内容是否为路径
  17. echo "【$curfilepathname 】是否为路径: ".is_dir($curfilepathname)."<br><br>";
  18. $curfilepath=dirname(__FILE__);
  19. echo "当前程序所在的路径为:$curfilepath <br>";
  20. //判断当前内容是否为路径
  21. echo "【$curfilepath 】是否为路径: ".is_dir($curfilepath)."<br><br>";
  22. $curdirallfiles=scandir($curfilepath);
  23. echo "当前程序所在目录【$curfilepath 】下的所有文件为:<br>";
  24. showdir($curdirallfiles,$curfilepath);
  25. echo "<br><br>";
  26. //指定的目录
  27. $testPath='E:\AllSoftware\phpStudy\PHPTutorial\WWW\php\test';
  28. if (is_dir($testPath)){
  29. echo "[$testPath] 目录下的内容为:<br>";
  30. //打开指定的目录
  31. if($curOpenDir=opendir($testPath)) {
  32. //readdir方法每次只读取一个内容
  33. while (($file=readdir($curOpenDir))!==false) {
  34. //获取到完整的文件路径和文件名称
  35. $fullPathFile=$testPath."\\".$file;
  36. //获取到文件的类型
  37. $fileType=filetype($fullPathFile);
  38. if($fileType== "file"){
  39. echo "文件类型是[$fileType],[$file]是文件,文件完整路径和名称是[$fullPathFile]<br>";
  40. }
  41. else{
  42. echo "文件类型是[$fileType],[$file]是目录,文件完整路径和名称是[$fullPathFile]<br>";
  43. }
  44. }
  45. //关闭指定的目录
  46. closedir($curOpenDir);
  47. }
  48. }
  49. echo "<br><br>";
  50. function showdir(array $curdirallfiles,$curpath)
  51. {
  52. foreach($curdirallfiles as $key => $value){
  53. //过滤.和..作为返回上一级的操作
  54. if ($value=='.'||$value=='..'){
  55. echo "<a href='./?fullpathname=$curpath'>$value</a> <br>";
  56. continue;
  57. }
  58. $value=iconv('gbk','utf-8',$value);
  59. $fullPath=$curpath."\\".$value;
  60. if(is_dir($fullPath)){
  61. $fullpath2=$fullPath.'\\'.$value;
  62. //显示目录图标和目录名称(且目录可以点击查看其包含的文件和文件夹内容)
  63. echo "<img src='../images/目录.png' width='20px' height='20px'/> <a href='./?fullpathname=$fullpath2'> $value</a> <br>";
  64. }
  65. else{
  66. //显示文件图标和文件名称
  67. echo "<img src='../images/文件.png' width='20px' height='20px'/> $value <br>";
  68. }
  69. }
  70. }
  71. ?>
  72. </body>
  73. </html>

2、再新建一个名为【】的文件,且内容如下:

  1. <?php
  2. header("Content-Type:text/html;charset=UTF-8");
  3. $fullpathname =$_GET['fullpathname'];
  4. $curpath=dirname($fullpathname);
  5. $curdirallfiles=scandir($curpath);
  6. showdir($curdirallfiles,$curpath);
  7. function showdir(array $curDirAllFiles,$curPath)
  8. {
  9. foreach($curDirAllFiles as $key => $value){
  10. //过滤.和..作为返回上一级的操作
  11. if ($value=='.'||$value=='..'){
  12. echo "<a href='./?fullpathname=$curPath'>$value</a> <br>";
  13. continue;
  14. }
  15. $value=iconv('gbk','utf-8',$value);
  16. $fullPath=$curPath."/".$value;
  17. // $value=iconv('gbk','utf-8',$value);
  18. if(is_dir($fullPath)){
  19. $fullpath2=$fullPath.'/'.$value;
  20. //显示目录图标和目录名称(且目录可以点击查看其包含的文件和文件夹内容)
  21. echo "<img src='../images/目录.png' width='20px' height='20px'/> <a href='./?fullpathname=$fullpath2'> $value</a> <br>";
  22. }
  23. else{
  24. //显示文件图标和文件名称(且可以对文件进行删除、移动、复制操作)
  25. echo "<img src='../images/文件.png' width='20px' height='20px'/> $value <br>";
  26. }
  27. }
  28. }
  29. ?>

1.2、PHP文件的常用函数

PHP文件的操作
序号 文件操作方法 说明
1 fopen(文件路径和名称,模式) 以指定模式打开文件,且返回对应的文件资源
2 fwrite(打开的文件资源,需写入数据) 将数据写入到文件中,且返回写入的数据长度
3 fread(打开的文件资源,需读取的数据长度) 读取指定长度的文件内容
4 fgets(打开的文件资源) 调用一次该方法读取文件的一行内容
5 readfile(文件路径和名称) 读取文件并自动打印展示
6 file_put_contents(文件路径和名称,需保存数据) 将内容保存到文件中(覆盖写入,先清空文件在写入),如果文件不存在则创建该文件;返回结果是保存内容的长度
7 file_get_contents(本地文件路径和名称或者远程的URL地址) 将整个文件的内容读取到一个字符串中
文件打开(fopen)模式说明
序号 模式内容 说明
1 w 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建
2 w+ 读写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建
3 r 只读方式打开,将文件指针指向文件头
4 r+ 读写方式打开,将文件指针指向文件头
5 a 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建 【追加文件内容】
6 a+ 读写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建 
7 x 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则文件打开 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建 
8 x+ 创建并以读写入方式打开,将文件指针指向文件头。如果文件已存在,则文件打开 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建 
PHP的临时文件
前面我们将内容写入到文件保存到磁盘的都是永久文件;而创建临时文件对我们开发也有用处(即:建临时文件,用完后会自动删除,我们不需要去维护这个文件的删除状态)。
  1. <?php
  2. header("Content-Type:text/html;charset=UTF-8");
  3. //临时文件(windows系统的临时文件存储在【C:\Users\用户名\AppData\Local\Temp目录中】带有php内容的就是)
  4. //1、创建一个临时文件
  5. $tmpfile=tmpfile();
  6. //2、向临时文件写入内容
  7. $writeInfoToTmpfile=fwrite($tmpfile,"测试写入临时文件的信息1");
  8. echo "临时文件写入内容1结果:$writeInfoToTmpfile <br>";
  9. $writeInfoToTmpfile2=fwrite($tmpfile,"第二次写入测试临时文件信息2");
  10. echo "临时文件写入内容2结果:$writeInfoToTmpfile2 <br>";
  11. // //休眠15秒,方便我们去【C:\Users\用户名\AppData\Local\Temp目录中】查看文件内容
  12. // sleep(15);
  13. // //读取临时文件方式一
  14. // fseek($tmpfile,0);
  15. // rewind($tmpfile);
  16. // //指定读取1K的文件内容
  17. // $readTmpfileInfo=fread($tmpfile,1024);
  18. // //关闭临时文件(文件一关闭就会被删除)
  19. // fclose($tmpfile);
  20. //读取临时文件方式二
  21. $tmpfile_path = stream_get_meta_data($tmpfile)['uri'];
  22. $readTmpfileInfo=file_get_contents($tmpfile_path);
  23. echo "读取到的临时文件信息为: $readTmpfileInfo <br>";
  24. ?>
PHP文件的重命名、移动、复制和删除
序号 文件的操作 说明
1 rename(原文件路径和名称,原文件路径和新名称) 将文件重命名
2 rename(原文件路径和名称,新文件路径和名称) 将文件移动到指定的路径,并可以修改名称
3 copy(原文件路径和名称,新文件路径和名称)) 可将文件复制到指定的路径,并可以修改名称
4 unlink(文件的路径和名称) 将指定的文件删除
PHP的文件属性的常用函数
序号 文件属性常用函数 说明
1 bool file_exists ( $指定文件名或者文件路径) 检测文件是否存在
2 bool is_readable ( $指定文件名或者文件路径) 检测文件是否可读
3 bool is_writeable ( $指定文件名或者文件路径) 检测文件是否可写
4 bool is_executable ( $指定文件名或者文件路径) 检测文件是否可执行
5 bool is_file ( $指定文件名或者文件路径) 检测是否为文件
6 void clearstatcache ( void )  清除文件的状态缓存
PHP文件的路径函数
序号 文件路径函数 说明
1 pathinfo(文件路径和名称) 返回一个关联数组包含有 path 的信息。返回关联数组还是字符串取决于 flags(如果指定了,将会返回指定元素;它们包括: PATHINFO_DIRNAME、 PATHINFO_BASENAME、 PATHINFO_EXTENSION、 PATHINFO_FILENAME

如果没有指定 flags 默认是返回全部的单元。

2 parse_url(url地址)

解析 URL 并返回关联数组,包含在 URL 中出现的各种组成部分。数组的元素值不会 URL 解码

PHP: parse_url - Manual

3 http_build_query()

生成 URL-encode 之后的请求字符串

PHP: http_build_query - Manual

4 http_build_url()

 产生一个 URL

http_build_url - [ php中文手册 ] - 在线原生手册

  1. <html>
  2. <head>
  3. <meta charset="UTF-8">
  4. <title>测试PHP常用的函数</title>
  5. </head>
  6. <body>
  7. <?php
  8. //指定PHP页面的内容类型和编码格式
  9. header("Content-Type:text/html; charset=utf-8");
  10. $dateInfos=date('Y-m-d H:i:s');
  11. $filePthAndName="../files/";
  12. //file_put_contents将内容写入到文件中(覆盖写入,先清空文件在写入),如果文件不存在则创建该文件;返回结果是文件的长度
  13. $result=file_put_contents($filePthAndName,"$dateInfos 这是测试写入文件的内容信息!\n这是第二行内容\n这是第三行内容");
  14. echo "[file_put_contents写入内容] $result";
  15. echo "<br>";
  16. //readfile返回的是读取内容的长度,但是读取文件后会自己就将文件的内容展示出来
  17. $fileinfo=readfile($filePthAndName);
  18. echo "<br>";
  19. echo "[readfile读取内容] $fileinfo <br>";
  20. //file_get_contents返回的是读取的文件内容
  21. $fileinfo2=file_get_contents($filePthAndName);
  22. echo "[file_get_contents读取文件内容] $fileinfo2 <br>";
  23. //file_get_contents支持读取网络url地址(可配合file_put_contents实现下载文件、图片等内容到本地保存)
  24. $networkFilePathName="/wp-includes/js/jquery/";
  25. $networkFile=file_get_contents($networkFilePathName);
  26. echo "[file_get_contents]读取的网络文件内容如下:<br> $networkFile <br>";
  27. //保存该文件
  28. $saveFilePathName="../files/";
  29. $downloadFile=file_put_contents($saveFilePathName,$networkFile);
  30. echo "<br> 从【$networkFilePathName 】下载文件保存到【$saveFilePathName 】 文件长度是【$downloadFile 】 ";
  31. echo "<br><br>";
  32. echo "<br>";
  33. //文件操作
  34. $filePathname22='../files/';
  35. //1、打开文件
  36. $openFile=fopen($filePathname22,'w');
  37. //2、写入文件(fwrite 返回写入的数据长度)
  38. $writeFile=fwrite($openFile,"你好,牛奶咖啡\n第二行内容\n第三行内容");
  39. echo "[fwrite写入文件]结果:$writeFile <br>";
  40. //3、写完后关闭打开的文件
  41. fclose($openFile);
  42. //1、打开文件
  43. $openFile2=fopen($filePathname22,'r');
  44. //2、读取文件方式一[fread]需要指定文件内容的长度读取,不方便
  45. $readfile1=fread($openFile2,6);
  46. echo "[fread读取文件]:$readfile1 <br>";
  47. //2、读取文件方式二【fgets】(调用一次读取一行数据)
  48. $readFile2=fgets($openFile2);
  49. echo "[fgets 第一次读取文件]:$readFile2 <br>";
  50. $readFile2=fgets($openFile2);
  51. echo "[fgets 第二次读取文件]:$readFile2 <br>";
  52. //3、文件操作完成后记得关闭文件释放资源
  53. fclose($openFile2);
  54. //1、打开文件(以在文件末尾追加方式)
  55. $openFile3=fopen($filePathname22,'a');
  56. //2、追加内容(成功后返回追加的内容长度)
  57. $appendInfo=fwrite($openFile3,"这是测试追加的内容");
  58. echo "追加内容结果:$appendInfo <br>";
  59. //3、文件操作完成后记得关闭文件释放资源
  60. fclose($openFile3);
  61. //1、打开文件
  62. $openFile4=fopen('../files/','x');
  63. $fileOpc=fwrite($openFile4,"---测试添加的内容aaa----");
  64. echo "添加内容结果:$fileOpc <br><br><br>";
  65. fclose($openFile4);
  66. //临时文件(windows系统的临时文件存储在【C:\Users\用户名\AppData\Local\Temp目录中】带有php内容的就是)
  67. //1、创建一个临时文件
  68. $tmpfile=tmpfile();
  69. //2、向临时文件写入内容
  70. $writeInfoToTmpfile=fwrite($tmpfile,"测试写入临时文件的信息1");
  71. echo "临时文件写入内容1结果:$writeInfoToTmpfile <br>";
  72. $writeInfoToTmpfile2=fwrite($tmpfile,"第二次写入测试临时文件信息2");
  73. echo "临时文件写入内容2结果:$writeInfoToTmpfile2 <br>";
  74. // //休眠15秒,方便我们去【C:\Users\用户名\AppData\Local\Temp目录中】查看文件内容
  75. // sleep(15);
  76. // //读取临时文件方式一
  77. // fseek($tmpfile,0);
  78. // rewind($tmpfile);
  79. // //指定读取1K的文件内容
  80. // $readTmpfileInfo=fread($tmpfile,1024);
  81. // //关闭临时文件(文件一关闭就会被删除)
  82. // fclose($tmpfile);
  83. //读取临时文件方式二
  84. $tmpfile_path = stream_get_meta_data($tmpfile)['uri'];
  85. $readTmpfileInfo=file_get_contents($tmpfile_path);
  86. echo "读取到的临时文件信息为: $readTmpfileInfo <br>";
  87. //移动拷贝和删除文件
  88. //1、使用rename方法若是在同一个路径下则表示重命名(返回结果1表示成功,否则失败)
  89. $renameresult=rename('./test/','./test/');
  90. echo "将文件重命名后的结果:$renameresult <br>";
  91. //2、使用rename方法若是在不同路径下则表示移动文件和文件重命名(返回结果1表示成功,否则失败)
  92. $renameresult2=rename('./test/','../test_2.php');
  93. echo "将文件移动且重命名后的结果:$renameresult2 <br>";
  94. //3、复制文件
  95. $copyfileresult=copy("../test_2.php","./test/");
  96. echo "复制且重命名文件后的结果:$copyfileresult <br>";
  97. //4、删除文件
  98. $delfileresult=unlink("../test_2.php");
  99. echo "删除文件后的结果:$delfileresult <br><br>";
  100. //5、获取文件路径的信息
  101. $curfilepath22=__FILE__;
  102. $filepathinfo=pathinfo($curfilepath22);
  103. echo "[$curfilepath22]的信息为:<br>";
  104. print_r ($filepathinfo);
  105. echo '<br>';
  106. echo"文件路径:".$filepathinfo['dirname'].'<br>';
  107. echo"文件名称:".$filepathinfo['basename'].'<br>';
  108. echo"文件扩展名称:".$filepathinfo['extension'].'<br>';
  109. echo"不包含文件扩展名称的文件名:".$filepathinfo['filename'].'<br>';
  110. ?>
  111. </body>
  112. </html>

 

临时文件内容 

1.3、PHP文件权限设置

Linux系统中文件权限详解_linux文件权限/xiaochenXIHUA/article/details/139974153?spm=1001.2014.3001.5501

Linux系统中,PHP可以使用chmod函数进行权限的设置,如下所示:

  1. <?php
  2. //修改linux 系统/var/log/nginx/的文件权限为755
  3. chmod("/var/log/nginx/", 755);
  4. chmod("/var/log/nginx/", "u+rwx,go+rx");
  5. //修改目录的权限为755
  6. chmod("/var/log/nginx", 0755);
  7. ?>

二、PHP文件的传输操作

2.1、文件上传的PHP配置

        使用PHP进行文件上传需要对【】配置文件进行操作(即:将【file_uploads = On】取消注释和启用);修改完成后保存配置文件且需要对PHP的服务进行重启才会生效。

PHP上传文件常用配置项
序号 上传文件常用配置项 说明
1 file_uploads on 表示开启文件上传功能,off 表示关闭文件上传功能
2 max_file_uploads 允许上传文件的最大数量(可根据自己项目需要修改)
3 upload_max_filesize 允许上传文件大小的最大值(默认是2M)(可根据自己项目需要修改)
4 post_max_size 通过表单POST方法给PHP所能接收的最大值(默认为8M)(可以根据自己项目需要修改)
5 upload_tmp_dir 临时文件的存放目录(默认是C:\Users\用户名\AppData\Local\Temp)
如果需要上传大文件,还需要对如下的三个配置项进行设置
1 max_execution_time 每个PHP脚本页面运行的最大时间值(单位:秒;默认30秒)
2 max_input_time 每个PHP脚本页面接收数据所需的最大时间(单位:秒;默认60秒)
3 memory_limit 每个PHP脚本页面限制的最大内存(默认:128M)

注意:PHP中的【】配置文件任意内容修改后,都需要重启PHP服务后才会生效

参数配置建议:需上传最大文件大小< upload_max_filesize < post_max_size < memory_limit

 

或者也可以使用【phpiP置息

 

  1. <?php
  2. phpinfo();
  3. ?>

2.2、文件上传的思路和实现

1、用户操作

1、选择文件;

2、提交文件;

2、上传文件流程思路

1、获取到提交的文件(推荐使用POST方法接收);

2、判断文件的大小(判断文件是否超出范围);

3、判断文件类型(获取到文件类型并判断是否符合要求);

4、生成新的文件名(因为使用原名可能存在一些敏感违反法律法规的内容;或者容易被黑客利用);

6、移动临时文件到指定的路径下永久保存;

如下是实现的一个简易网盘功能代码内容:

1、新建一个名为【】的页面,用于文件的上传、内容展现,代码如下:

  1. <!DOCTYPE>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>小网盘</title>
  6. </head>
  7. <body>
  8. <form method="post">
  9. <input type="submit" name="delBtn" value="删除">
  10. <input type="submit" name="moveBtn" value="移动">
  11. <input type="submit" name="copyBtn" value="复制">
  12. </form>
  13. <form method='post'><input type='submit' name='delBtn' value='删除'><input type='submit' name='moveBtn' value='移动'><input type='submit' name='copyBtn' value='复制'></form>
  14. <hr>
  15. <form action="../php/" method="post" enctype="multipart/form-data">
  16. <p style="font-size: 36px; color: orange;" >上传文件示例</p>
  17. <div border="3">
  18. <input type="file" name="uploadfile">
  19. <input type="submit" name="提交">
  20. </div>
  21. </form>
  22. <hr>
  23. <?php
  24. header("Content-Type:text/html;charset=utf-8");
  25. $rootPath=$_SERVER['DOCUMENT_ROOT'];
  26. echo "项目根目录为【$rootPath 】 <br>";
  27. $uploadFilePath=$rootPath."/files/uploadfiles";
  28. echo "上传文件的路径为【$uploadFilePath 】<br>";
  29. $uploadFileAllFile=scandir($uploadFilePath);
  30. showdir($uploadFileAllFile,$uploadFilePath);
  31. function showdir(array $curDirAllFiles,$curPath)
  32. {
  33. foreach($curDirAllFiles as $key => $value){
  34. //过滤.和..不显示
  35. if ($value=='.'||$value=='..'){
  36. echo "<a href='./?fullpathname=$curPath'>$value</a> <br>";
  37. continue;
  38. }
  39. $fullPath=$curPath."/".$value;
  40. $value=iconv('gbk','utf-8',$value);
  41. if(is_dir($fullPath)){
  42. $fullpath2=$fullPath.'/'.$value;
  43. // echo "<img src='../images/目录.png' width='20px' height='20px'/> <a href='./?fullpathname=$fullpath2'> $value</a> &nbsp;<a href='./?delCurFile=$fullPath'>删除</a> <a href='./?moveCurFile=$fullPath'>移动</a> <a href='./?copyCurFile=$fullPath'>复制</a><br>";
  44. echo "<img src='../images/目录.png' width='20px' height='20px'/> <a href='./?fullpathname=$fullpath2'> $value<br>";
  45. }
  46. else{
  47. echo "<img src='../images/文件.png' width='20px' height='20px'/> $value &nbsp;<a href='./?delCurFile=$fullPath'>删除</a> <a href='./?moveCurFile=$fullPath'>移动</a> <a href='./?copyCurFile=$fullPath'>复制</a><br>";
  48. }
  49. }
  50. }
  51. // echo "<script>var v=( '你确定要删除这条记录吗? ');
  52. // ='res=' + v;
  53. // </script>";
  54. // $res=$_COOKIE['res'];
  55. // echo "弹窗的选择结果:$res";
  56. if(isset($_POST["delBtn"])) {
  57. echo "你点击了删除按钮<br>";
  58. }
  59. if(isset($_POST["moveBtn"])) {
  60. echo "你点击了移动按钮<br>";
  61. }
  62. if(isset($_POST["copyBtn"])) {
  63. echo "你点击了复制按钮<br>";
  64. }
  65. ?>
  66. </body>
  67. </html>

 2、再新建一个名为【】的界面,用于目录和文件的展示和切换,代码如下:

  1. <?php
  2. header("Content-Type:text/html;charset=UTF-8");
  3. $fullpathname =$_GET['fullpathname'];
  4. $curpath=dirname($fullpathname);
  5. $curdirallfiles=scandir($curpath);
  6. showdir($curdirallfiles,$curpath);
  7. function showdir(array $curDirAllFiles,$curPath)
  8. {
  9. foreach($curDirAllFiles as $key => $value){
  10. //过滤.和..作为返回上一级的操作
  11. if ($value=='.'||$value=='..'){
  12. echo "<a href='./?fullpathname=$curPath'>$value</a> <br>";
  13. continue;
  14. }
  15. $value=iconv('gbk','utf-8',$value);
  16. $fullPath=$curPath."/".$value;
  17. // $value=iconv('gbk','utf-8',$value);
  18. if(is_dir($fullPath)){
  19. $fullpath2=$fullPath.'/'.$value;
  20. //显示目录图标和目录名称(且目录可以点击查看其包含的文件和文件夹内容)
  21. // echo "<img src='../images/目录.png' width='20px' height='20px'/> <a href='./?fullpathname=$fullpath2'> $value</a> &nbsp;<a href='./?delCurFile=$fullPath'>删除</a> <a href='./?moveCurFile=$fullPath'>移动</a> <a href='./?copyCurFile=$fullPath'>复制</a><br>";
  22. echo "<img src='../images/目录.png' width='20px' height='20px'/> <a href='./?fullpathname=$fullpath2'> $value</a> <br>";
  23. }
  24. else{
  25. //显示文件图标和文件名称(且可以对文件进行删除、移动、复制操作)
  26. echo "<img src='../images/文件.png' width='20px' height='20px'/> $value &nbsp;<a href='./?delCurFile=$fullPath'>删除</a> <a href='./?moveCurFile=$fullPath'>移动</a> <a href='./?copyCurFile=$fullPath'>复制</a><br>";
  27. // echo "<img src='../images/文件.png' width='20px' height='20px'/> $value <br>";
  28. }
  29. }
  30. }
  31. ?>

3、最后新建一个名为【】的界面,用于对文件的删除、移动和复制操作,代码如下:

  1. <?php
  2. header("Content-Type:text/html;charset=utf-8");
  3. echo "<a style='font-size:36px;color:blue' href='./'>返回主页</a> <br>";
  4. //删除文件
  5. $delCurFile =$_GET['delCurFile'];
  6. echo "[获取到需删除的文件] $delCurFile <br>";
  7. //获取文件名称
  8. $filename = pathinfo($delCurFile,PATHINFO_BASENAME);
  9. if(file_exists($delCurFile)){
  10. echo "[准备删除文件] $delCurFile <br>";
  11. $filePathInfo=pathinfo($delCurFile);
  12. $result = unlink($delCurFile);
  13. echo "删除文件【".$filePathInfo['basename']."】结果是:";
  14. if($result){
  15. echo "<p style='font-size:36px;color:green'>删除成功</P> <br>";
  16. }else{
  17. echo "<p style='font-size:36px;color:red'>删除失败</P> <br>";
  18. }
  19. }
  20. //移动文件
  21. $moveCurFile =$_GET['moveCurFile'];
  22. echo "[获取到需移动的文件] $moveCurFile <br>";
  23. if(file_exists($moveCurFile)){
  24. echo "[准备移动文件] $moveCurFile <br>";
  25. //获取文件内容
  26. $filePath=pathinfo($moveCurFile,PATHINFO_DIRNAME);
  27. echo "需移动的文件路径:$filePath <br>";
  28. //获取文件名称和拓展名称
  29. $fileNameExtension=pathinfo($moveCurFile,PATHINFO_BASENAME);
  30. echo "需移动的文件路径和拓展名为:$fileNameExtension <br>";
  31. //新文件路径和名称
  32. $newFilePathName=$filePath.'/test/'.$fileNameExtension;
  33. echo "新文件路径和名称:$newFilePathName <br>";
  34. $result=rename($moveCurFile, $newFilePathName);
  35. if($result){
  36. echo "<p style='font-size:36px;color:green'>移动成功,且移动后的路径是:test/.$fileNameExtension</P> <br>";
  37. }
  38. else{
  39. echo "<p style='font-size:36px;color:red'>移动失败</P> <br>";
  40. }
  41. }
  42. //复制文件
  43. $copyCurFile =$_GET['copyCurFile'];
  44. echo "[获取到需复制的文件] $copyCurFile <br>";
  45. if(file_exists($copyCurFile)){
  46. echo "[准备复制文件] $copyCurFile <br>";
  47. //获取文件内容
  48. $filePath=pathinfo($copyCurFile,PATHINFO_DIRNAME);
  49. echo "需复制的文件路径:$filePath <br>";
  50. $fileName = pathinfo($copyCurFile,PATHINFO_FILENAME);
  51. echo "需复制的文件名称:$fileName <br>";
  52. $fileExtension = pathinfo($copyCurFile,PATHINFO_EXTENSION);
  53. echo "需复制的文件拓展名:$fileExtension <br>";
  54. $newFilePathName=$filePath."/".$fileName."(1).".$fileExtension;
  55. echo "复制后的文件名称是:$newFilePathName <br>";
  56. $result=copy($copyCurFile,$newFilePathName);
  57. echo "【复制结果】$result";
  58. if($result){
  59. echo "<p style='font-size:36px;color:green'>复制成功,且复制后的文件名称是:$newFilePathName</P> <br>";
  60. }
  61. else{
  62. echo "<p style='font-size:36px;color:red'>复制失败</P> <br>";
  63. }
  64. }
  65. ?>

三、PHP的其他操作

3.1、PHP中可以执行系统命令的函数

PHP中可以执行系统命令的函数
序号 可以执行系统命令的函数 说明
1 exec(命令)

执行一个外部程序

PHP: exec - Manual

2 system(命令)

执行外部程序,并且显示输出(推荐使用)

PHP: system - Manual

  1. <?php
  2. header("Content-Type:text/html;charset=GB2312");
  3. //查看系统的IP信息内容命令
  4. $cmd="ipconfig";
  5. //查看PHP的系统配置信息命令
  6. $cmd=phpinfo();
  7. //执行[ipconfig]的系统命令并且将执行结果保存到文件中命令
  8. $cmd="ipconfig > ../files/";
  9. $cmdResult=system($cmd);
  10. echo "<br>";
  11. // $convertcmdResult=iconv("gbk","utf-8",$cmdResult);
  12. // $convertcmdResult=mb_convert_encoding($cmdResult,"utf-8","gb2312");
  13. echo "$cmdResult <br>";
  14. // $cmdResult2=exec($cmd);
  15. // $convertcmdResult=mb_convert_encoding($cmdResult2,"utf-8","gbk");
  16. // echo "exec执行命令【$cmd 】后的结果: $convertcmdResult <br>";
  17. ?>

3.2、PHP中的错误处理

        由于我们写的代码不能够保证没有任何Bug和错误,那么只有有这些异常和错误,如果不对这些异常和错误进行设置捕捉处理;那么这些异常错误内容就会展现在用户面前,这样会导致服务器的敏感信息暴漏出来,不利于系统和服务器的安全(我们希望异常和错误信息不会展示给用户,只是记录下来提供给内部开发和运维人员使用)。

PHP的错误类型
序号 PHP的错误类型 说明
1 E_ERROR  错误类型,文件代码直接中断,不再执行(最严重,必须解决)
2 E_WARNING 警告类型,问题比较严重;代码还会继续向下运行(也严重,必须解决)
3 E_NOTICE 提示类型,有些小问题不会影响到程序运行(常发生在项目代码中未定义的情况)(可以不用管,但notice类型错误会影响到PHP的执行效率
,看公司要求)
4 E_PARSE 编译时语法解析错误类型;解析错误仅仅由分析器产生(parse错误,是指语法错写错了,必须要解决)
5 E_ALL 所有的错误和警告
6 E_STRICT 启用PHP对代码的修改建议,以确保代码具有最佳的互操作性和向前兼容性
7 E_DEPRECATED 启用后将会对在未来版本中可能无法正常工作的代码给出警告

PHP: 错误处理 - Manual

PHP 错误处理 |

        PHP中【】的配置项【display_errors】就是可以控制错误信息是否输出到网页上显示。在生产环境下这个配置是必须要关闭显示错误的,只有开发的时候可以打开进行调试使用。

PHP中的配置文件的错误配置
序号 PHP中配置文件的错误配置 说明
1 display_errors = On

控制整个PHP环境的错误信息是否在界面上显示【on表示显示;off表示关闭】

PHP: 运行时配置 - Manual

2 error_reporting = E_ALL

控制PHP引擎发错误是否显示、输出、记录【

1、error_reporting = E_ALL (表示显示所有错误);

2、error_reporting = E_ALL & ~ E_NOTICE(表示显示所有错误但排除提示);

3、error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED(表示显示所有错误,但排除提示、兼容性和未来兼容性);

错误日志记录配置

(所有关于在【】操作过的内容,都需要重启PHP服务后才会生效)

1 log_errors

是否开启日志记录(on表示开启,off表示关闭)

PHP: 运行时配置 - Manual

2 log_errors_max_len 单行错误最大记录长度(默认是:1024 字节)
3 error_log

错误日志记录在什么地方(可以指定为syslog或者指定路径;其中syslog表示系统记录【windows系统在电脑的事件查看器--应用程序日志里面。linux默认在: /etc/里面)

PHP: 运行时配置 - Manual

没有修改服务器PHP配置文件权限处理错误方式
序号没有服务器PHP配置文件修改权限的处理错误方式
  1. <?php
  2. header("Content-Type:text/html;charset=utf-8");
  3. //修改服务器的错误状态[该设置是否将错误信息输出到网页显示,生产环境是必须关闭该设置]
  4. //(范围只限于当前PHP代码文件,一般用于代码开始启用)
  5. ini_set("display_errors",0);
  6. $display_errors0=ini_get("display_errors");
  7. echo "0-服务器中当前显示的错误状态为:$display_errors0 <br>";
  8. // //关闭所有错误
  9. // error_reporting(0);
  10. // //显示所有错误
  11. // error_reporting(E_ALL);
  12. //显示所有错误,但不显示提示
  13. error_reporting(E_ALL & ~ E_NOTICE);
  14. $tmp=$_GET['info'];
  15. echo "$tmp <br";
  16. $display_errors=ini_get("display_errors");
  17. echo "1-服务器中当前显示的错误状态为:$display_errors <br>";
  18. ?>
  1. <?php
  2. /* 错误消息类型 说明
  3. 0 发送至默认的error_log指定位置
  4. 1 发送到指定的邮件位置
  5. 3 发送至指定的文件位置
  6. */
  7. //无法连接到Mysql数据库服务器,直接记录到 中的error_log指定位置
  8. error_log("无法连接到Mysql数据库服务器服务器");
  9. //可以发送邮件,但是必须配置过邮件系统
  10. error_log('可以用邮件报告错误,让运维人员及时收到报警信息进行处理',1 ,'ptest@');
  11. //记录在指定的位置
  12. error_log("这是一个错误信息", 3, "d:/test/");
  13. ?>

3.3、PHP中序列化和反序列化

PHP: serialize - Manual /manual/zh/PHP: class_uses - Manual /manual/zh/PHP: Manual Quick Referencehttps:///?pattern=class&scope=quickrefPHP: unserialize - Manual /manual/zh/

  1. <?php
  2. header("Content-Type:text/html;charset=utf-8");
  3. //创建一个人类信息对象
  4. class peopleInfo{
  5. var $name; //定义名字属性
  6. var $sex; //定义性别属性
  7. var $age;
  8. // //构造函数
  9. // function __construct() {
  10. // }
  11. //定义一个构造函数(接受传入的信息)
  12. function peopleInfo($name,$sex,$age){
  13. $this->name = $name;
  14. $this->sex = $sex;
  15. $this->age= $age;;
  16. }
  17. //打印信息
  18. function printInfo() {
  19. echo "我的名字是:".$this->name." 性别是:".$this->sex." 年龄是:".$this->age."<br>";
  20. }
  21. //自动销毁对象的特殊方法(回收内存)
  22. function __destruct(){
  23. echo "对象已经被销毁<br>";
  24. echo phpinfo();
  25. }
  26. }
  27. //使用人类信息对象
  28. $peopleInfo=new peopleInfo("牛奶咖啡","男","26");
  29. //调用人类信息对象的打印方法
  30. $peopleInfo->printInfo();
  31. //单独指定人类信息对象的属性内容
  32. $peopleInfo->name = "周茜";
  33. $peopleInfo->sex = "女";
  34. $peopleInfo->age = "27";
  35. $peopleInfo->printInfo();
  36. echo gettype($peopleInfo);
  37. echo "<hr>";
  38. //序列化数组
  39. $tmpArray=array('牛奶咖啡','周茜','杨欣怡');
  40. $tmpSerialize=serialize($tmpArray);
  41. echo "序列化数组后的字符串是:$tmpSerialize <br><hr>";
  42. //反序列化数组字符串
  43. $tmpUnserialize=unserialize($tmpSerialize);
  44. echo "<br>反序列化字符串【$tmpSerialize 】后数据类型是:".gettype($tmpUnserialize)." 内容为:".$tmpUnserialize[0].$tmpUnserialize[1].$tmpUnserialize[2]."<br><hr>";
  45. //序列化类对象
  46. $tmpClassObj=new peopleInfo("杨欣怡","女","26");
  47. $tmpClassObjSerialize=serialize($tmpClassObj);
  48. echo "序列化类对象后的字符串是:$tmpClassObjSerialize <br><hr> ";
  49. //反序列化类对象的字符串
  50. $tmpClassObjUnserialize=unserialize($tmpClassObjSerialize);
  51. echo "<br>反序列化字符串【$tmpClassObjSerialize 】后数据类型是:".gettype($tmpClassObjSerialize)."<br>";
  52. //调用反序列化后的类对象方法内容
  53. $tmpClassObjUnserialize->printInfo();
  54. $tmpClassObjUnserialize->__destruct();
  55. ?>

运行结果如下:

3.4、PHP中操作Mysql数据库

PHP: Mysql(原始) - Manual /manual/zh/PHP: mysql_connect - Manual /manual/zh/PHP: mysql_query - Manual /manual/zh/

  1. <?php
  2. header("Content-Type:text/html;charset=utf-8");
  3. //模拟传入的用户名和密码到数据库查询
  4. $usr=$_GET['usr'];
  5. $pwd=$_GET['pwd'];
  6. echo "获取到的用户名是【$usr 】密码是【$pwd 】<br><hr>";
  7. //链接mysql数据库
  8. $mysqlDB=mysqli_connect("127.0.0.1","root","root","coffeemilk",3306);
  9. //查询sql
  10. $sql="select * from user where username='$usr' and password='$pwd';";
  11. $sqlresult = mysqli_query($mysqlDB,$sql);
  12. var_dump($sqlresult);
  13. $sqlRownum=$sqlresult->num_rows;
  14. if($sqlRownum == 1) {
  15. echo "<p style='font-size:26px;color:green;'>恭喜,登录成功!</p>";
  16. }
  17. else {
  18. echo "<p style='font-size:26px;color:red;'>很遗憾,登录失败!</p>";
  19. }
  20. echo "<hr>执行 $sql 查询的结果是:<br>";
  21. while($row = mysqli_fetch_array($sqlresult)) {
  22. echo "用户ID:".$row["id"]." 用户名:".$row["username"]." 密码:".$row['password']." 创建时间:".$row["reg_time"]."<br><hr>";
  23. }
  24. //插入sql
  25. $sqlInsert="insert into user(username,password,reg_time)value('zhangsan','987654',current_timestamp())";
  26. $sqlInsertResult=mysqli_query($mysqlDB,$sqlInsert);
  27. echo "执行【$sqlInsert 】插入语句的结果是:$sqlInsertResult <br>";
  28. if ($sqlInsertResult==1) {
  29. echo "<p style='font-size:26px;color:green;'>恭喜,插入数据成功!</p>";
  30. }else{
  31. echo "<p style='font-size:26px;color:red;'>很遗憾,插入数据失败!</p>";
  32. }
  33. //最后关闭Mysql数据库链接
  34. mysqli_close($mysqlDB);
  35. ?>

3.5、cookie和session

PHP: setcookie - Manual /manual/zh/PHP: $_COOKIE - Manual /manual/zh/PHP: Sessions - Manual /manual/zh/PHP: 简介 - Manual /manual/zh/

  1. <?php
  2. //1、设置cookie(内容都是明文展示,不安全)
  3. setcookie("usr",$usr);
  4. setcookie("loginStatus",1);
  5. //2、获取到cookie信息(内容都是明文展示,不安全)
  6. $usr=$_COOKIE['usr'];
  7. $loginStatus=$_COOKIE['loginStatus'];
  8. ?>
  1. <?php
  2. //1、设置session(一个令牌数据)
  3. session_start();
  4. $_SESSION['usr']=$usr;
  5. $_SESSION['loginTime']=time();
  6. $_SESSION['loginStatus']=1;
  7. //2、获取到session信息(一个令牌数据)
  8. session_start();
  9. $usr=isset($_SESSION['usr']);
  10. $loginStatus=isset($_SESSION['loginStatus']);
  11. ?>
(href 属性是一个可读可写的字符串,可设置或返回当前显示的文档的完整 URL)

1、新建一个商品主页名为【】代码如下:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>测试Cookie的商品首页</title>
  6. </head>
  7. <body>
  8. <div>
  9. <?php
  10. header("Content-Type:text/html;charset=utf-8");
  11. //设置本页面不显示错误信息
  12. ini_set("display_errors",0);
  13. // //1、获取到cookie信息(内容都是明文展示,不安全)
  14. // $usr=$_COOKIE['usr'];
  15. // $loginStatus=$_COOKIE['loginStatus'];
  16. //2、获取到session信息(一个令牌数据)
  17. session_start();
  18. $usr=isset($_SESSION['usr']);
  19. $loginStatus=isset($_SESSION['loginStatus']);
  20. if($loginStatus!=1){
  21. echo "<a href='./'>登录</a>";
  22. }
  23. ?>
  24. <hr>
  25. <div style="font-size:36px;color:orange">
  26. 如下是各种商业的列表信息
  27. </div>
  28. </div>
  29. </body>
  30. </html>

2、新建一个登录界面取名为【】代码如下:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>登录界面</title>
  6. </head>
  7. <body>
  8. <div>
  9. <form action="./" method="post">
  10. <p style="font-size: 36px; color: chocolate;">欢迎来到登录界面</p>
  11. <div>用户名: <input type="text" name="usr"></div>
  12. <div>密 码: <input type="password" name="pwd"></div>
  13. <input type="submit" name="提交">
  14. </form>
  15. </div>
  16. </body>
  17. </html>

3、新建一个数据库连接验证页面取名为【】代码如下:

  1. <?php
  2. header("Content-Type:text/html;charset=utf-8");
  3. //模拟传入的用户名和密码到数据库查询
  4. $usr=$_POST['usr'];
  5. $pwd=$_POST['pwd'];
  6. echo "获取到的用户名是【$usr 】密码是【$pwd 】<br><hr>";
  7. //链接mysql数据库
  8. $mysqlDB=mysqli_connect("127.0.0.1","root","root","coffeemilk",3306);
  9. //查询sql
  10. $sql="select * from user where username='$usr' and password='$pwd';";
  11. $sqlresult = mysqli_query($mysqlDB,$sql);
  12. var_dump($sqlresult);
  13. $sqlRownum=$sqlresult->num_rows;
  14. if($sqlRownum == 1) {
  15. echo "<p style='font-size:26px;color:green;'>恭喜,登录成功!</p>";
  16. // //1、设置cookie(内容都是明文展示,不安全)
  17. // setcookie("usr",$usr);
  18. // setcookie("loginStatus",1);
  19. //2、设置session(一个令牌数据)
  20. session_start();
  21. $_SESSION['usr']=$usr;
  22. $_SESSION['loginTime']=time();
  23. $_SESSION['loginStatus']=1;
  24. echo "自动返回首页<script>='./'</script>";
  25. }
  26. else {
  27. echo "<p style='font-size:26px;color:red;'>'很遗憾,登录失败!请重新登录'</p>";
  28. echo "<script>alert('很遗憾,登录失败!请重新登录'); ='./'</script>";
  29. }
  30. //最后关闭Mysql数据库链接
  31. mysqli_close($mysqlDB);
  32. ?>