网站开发涉及到的技术内容介绍——后端PHP(1)/xiaochenXIHUA/article/details/141000752?spm=1001.2014.3001.5501
一、PHP的常用函数
1.1、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、新建一个名为【】的文件,内容如下:
-
<html>
-
-
<head>
-
<meta charset="UTF-8">
-
<title>测试PHP常用的函数</title>
-
</head>
-
-
<body>
-
<?php
-
-
//指定PHP页面的内容类型和编码格式
-
header("Content-Type:text/html; charset=utf-8");
-
-
//获取到根目录
-
$rootPath=$_SERVER['DOCUMENT_ROOT'];
-
echo "项目根目录为【$rootPath 】 <br>";
-
-
//目录操作
-
$curfilepathname=__FILE__;
-
echo "当前程序所在的路径和名称为:$curfilepathname <br>";
-
//判断当前内容是否为路径
-
echo "【$curfilepathname 】是否为路径: ".is_dir($curfilepathname)."<br><br>";
-
-
$curfilepath=dirname(__FILE__);
-
echo "当前程序所在的路径为:$curfilepath <br>";
-
//判断当前内容是否为路径
-
echo "【$curfilepath 】是否为路径: ".is_dir($curfilepath)."<br><br>";
-
-
$curdirallfiles=scandir($curfilepath);
-
echo "当前程序所在目录【$curfilepath 】下的所有文件为:<br>";
-
showdir($curdirallfiles,$curfilepath);
-
echo "<br><br>";
-
-
//指定的目录
-
$testPath='E:\AllSoftware\phpStudy\PHPTutorial\WWW\php\test';
-
-
if (is_dir($testPath)){
-
echo "[$testPath] 目录下的内容为:<br>";
-
//打开指定的目录
-
if($curOpenDir=opendir($testPath)) {
-
//readdir方法每次只读取一个内容
-
while (($file=readdir($curOpenDir))!==false) {
-
//获取到完整的文件路径和文件名称
-
$fullPathFile=$testPath."\\".$file;
-
//获取到文件的类型
-
$fileType=filetype($fullPathFile);
-
if($fileType== "file"){
-
echo "文件类型是[$fileType],[$file]是文件,文件完整路径和名称是[$fullPathFile]<br>";
-
}
-
else{
-
echo "文件类型是[$fileType],[$file]是目录,文件完整路径和名称是[$fullPathFile]<br>";
-
}
-
-
}
-
//关闭指定的目录
-
closedir($curOpenDir);
-
}
-
}
-
-
echo "<br><br>";
-
-
-
function showdir(array $curdirallfiles,$curpath)
-
{
-
foreach($curdirallfiles as $key => $value){
-
//过滤.和..作为返回上一级的操作
-
if ($value=='.'||$value=='..'){
-
echo "<a href='./?fullpathname=$curpath'>$value</a> <br>";
-
continue;
-
}
-
-
$value=iconv('gbk','utf-8',$value);
-
$fullPath=$curpath."\\".$value;
-
if(is_dir($fullPath)){
-
$fullpath2=$fullPath.'\\'.$value;
-
//显示目录图标和目录名称(且目录可以点击查看其包含的文件和文件夹内容)
-
echo "<img src='../images/目录.png' width='20px' height='20px'/> <a href='./?fullpathname=$fullpath2'> $value</a> <br>";
-
}
-
else{
-
//显示文件图标和文件名称
-
echo "<img src='../images/文件.png' width='20px' height='20px'/> $value <br>";
-
}
-
-
}
-
}
-
-
?>
-
-
</body>
-
-
</html>
2、再新建一个名为【】的文件,且内容如下:
-
<?php
-
header("Content-Type:text/html;charset=UTF-8");
-
-
$fullpathname =$_GET['fullpathname'];
-
-
$curpath=dirname($fullpathname);
-
$curdirallfiles=scandir($curpath);
-
showdir($curdirallfiles,$curpath);
-
-
-
function showdir(array $curDirAllFiles,$curPath)
-
{
-
foreach($curDirAllFiles as $key => $value){
-
//过滤.和..作为返回上一级的操作
-
if ($value=='.'||$value=='..'){
-
echo "<a href='./?fullpathname=$curPath'>$value</a> <br>";
-
continue;
-
}
-
-
$value=iconv('gbk','utf-8',$value);
-
$fullPath=$curPath."/".$value;
-
// $value=iconv('gbk','utf-8',$value);
-
if(is_dir($fullPath)){
-
$fullpath2=$fullPath.'/'.$value;
-
//显示目录图标和目录名称(且目录可以点击查看其包含的文件和文件夹内容)
-
echo "<img src='../images/目录.png' width='20px' height='20px'/> <a href='./?fullpathname=$fullpath2'> $value</a> <br>";
-
}
-
else{
-
//显示文件图标和文件名称(且可以对文件进行删除、移动、复制操作)
-
echo "<img src='../images/文件.png' width='20px' height='20px'/> $value <br>";
-
}
-
-
}
-
}
-
-
?>
1.2、PHP文件的常用函数
序号 | 文件操作方法 | 说明 |
1 | fopen(文件路径和名称,模式) | 以指定模式打开文件,且返回对应的文件资源 |
2 | fwrite(打开的文件资源,需写入数据) | 将数据写入到文件中,且返回写入的数据长度 |
3 | fread(打开的文件资源,需读取的数据长度) | 读取指定长度的文件内容 |
4 | fgets(打开的文件资源) | 调用一次该方法读取文件的一行内容 |
5 | readfile(文件路径和名称) | 读取文件并自动打印展示 |
6 | file_put_contents(文件路径和名称,需保存数据) | 将内容保存到文件中(覆盖写入,先清空文件在写入),如果文件不存在则创建该文件;返回结果是保存内容的长度 |
7 | file_get_contents(本地文件路径和名称或者远程的URL地址) | 将整个文件的内容读取到一个字符串中 |
序号 | 模式内容 | 说明 |
1 | w | 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建 |
2 | w+ | 读写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建 |
3 | r | 只读方式打开,将文件指针指向文件头 |
4 | r+ | 读写方式打开,将文件指针指向文件头 |
5 | a | 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建 【追加文件内容】 |
6 | a+ | 读写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建 |
7 | x | 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则文件打开 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建 |
8 | x+ | 创建并以读写入方式打开,将文件指针指向文件头。如果文件已存在,则文件打开 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建 |
前面我们将内容写入到文件保存到磁盘的都是永久文件;而创建临时文件对我们开发也有用处(即:建临时文件,用完后会自动删除,我们不需要去维护这个文件的删除状态)。 |
序号 | 文件的操作 | 说明 |
1 | rename(原文件路径和名称,原文件路径和新名称) | 将文件重命名 |
2 | rename(原文件路径和名称,新文件路径和名称) | 将文件移动到指定的路径,并可以修改名称 |
3 | copy(原文件路径和名称,新文件路径和名称)) | 可将文件复制到指定的路径,并可以修改名称 |
4 | unlink(文件的路径和名称) | 将指定的文件删除 |
序号 | 文件属性常用函数 | 说明 |
1 | bool file_exists ( $指定文件名或者文件路径) | 检测文件是否存在 |
2 | bool is_readable ( $指定文件名或者文件路径) | 检测文件是否可读 |
3 | bool is_writeable ( $指定文件名或者文件路径) | 检测文件是否可写 |
4 | bool is_executable ( $指定文件名或者文件路径) | 检测文件是否可执行 |
5 | bool is_file ( $指定文件名或者文件路径) | 检测是否为文件 |
6 | void clearstatcache ( void ) | 清除文件的状态缓存 |
序号 | 文件路径函数 | 说明 |
1 | pathinfo(文件路径和名称) | 返回一个关联数组包含有 path 的信息。返回关联数组还是字符串取决于 flags( 如果指定了,将会返回指定元素;它们包括: PATHINFO_DIRNAME 、 PATHINFO_BASENAME 、 PATHINFO_EXTENSION 、 PATHINFO_FILENAME 。 如果没有指定 )
|
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中文手册 ] - 在线原生手册 |
-
<html>
-
-
<head>
-
<meta charset="UTF-8">
-
<title>测试PHP常用的函数</title>
-
</head>
-
-
<body>
-
<?php
-
-
//指定PHP页面的内容类型和编码格式
-
header("Content-Type:text/html; charset=utf-8");
-
-
$dateInfos=date('Y-m-d H:i:s');
-
$filePthAndName="../files/";
-
-
//file_put_contents将内容写入到文件中(覆盖写入,先清空文件在写入),如果文件不存在则创建该文件;返回结果是文件的长度
-
$result=file_put_contents($filePthAndName,"$dateInfos 这是测试写入文件的内容信息!\n这是第二行内容\n这是第三行内容");
-
echo "[file_put_contents写入内容] $result";
-
echo "<br>";
-
-
//readfile返回的是读取内容的长度,但是读取文件后会自己就将文件的内容展示出来
-
$fileinfo=readfile($filePthAndName);
-
echo "<br>";
-
echo "[readfile读取内容] $fileinfo <br>";
-
-
//file_get_contents返回的是读取的文件内容
-
$fileinfo2=file_get_contents($filePthAndName);
-
echo "[file_get_contents读取文件内容] $fileinfo2 <br>";
-
-
//file_get_contents支持读取网络url地址(可配合file_put_contents实现下载文件、图片等内容到本地保存)
-
$networkFilePathName="/wp-includes/js/jquery/";
-
$networkFile=file_get_contents($networkFilePathName);
-
echo "[file_get_contents]读取的网络文件内容如下:<br> $networkFile <br>";
-
-
//保存该文件
-
$saveFilePathName="../files/";
-
$downloadFile=file_put_contents($saveFilePathName,$networkFile);
-
echo "<br> 从【$networkFilePathName 】下载文件保存到【$saveFilePathName 】 文件长度是【$downloadFile 】 ";
-
echo "<br><br>";
-
-
echo "<br>";
-
//文件操作
-
$filePathname22='../files/';
-
-
//1、打开文件
-
$openFile=fopen($filePathname22,'w');
-
-
//2、写入文件(fwrite 返回写入的数据长度)
-
$writeFile=fwrite($openFile,"你好,牛奶咖啡\n第二行内容\n第三行内容");
-
echo "[fwrite写入文件]结果:$writeFile <br>";
-
-
//3、写完后关闭打开的文件
-
fclose($openFile);
-
-
-
//1、打开文件
-
$openFile2=fopen($filePathname22,'r');
-
//2、读取文件方式一[fread]需要指定文件内容的长度读取,不方便
-
$readfile1=fread($openFile2,6);
-
echo "[fread读取文件]:$readfile1 <br>";
-
-
//2、读取文件方式二【fgets】(调用一次读取一行数据)
-
$readFile2=fgets($openFile2);
-
echo "[fgets 第一次读取文件]:$readFile2 <br>";
-
$readFile2=fgets($openFile2);
-
echo "[fgets 第二次读取文件]:$readFile2 <br>";
-
-
//3、文件操作完成后记得关闭文件释放资源
-
fclose($openFile2);
-
-
-
//1、打开文件(以在文件末尾追加方式)
-
$openFile3=fopen($filePathname22,'a');
-
//2、追加内容(成功后返回追加的内容长度)
-
$appendInfo=fwrite($openFile3,"这是测试追加的内容");
-
echo "追加内容结果:$appendInfo <br>";
-
//3、文件操作完成后记得关闭文件释放资源
-
fclose($openFile3);
-
-
//1、打开文件
-
$openFile4=fopen('../files/','x');
-
$fileOpc=fwrite($openFile4,"---测试添加的内容aaa----");
-
echo "添加内容结果:$fileOpc <br><br><br>";
-
fclose($openFile4);
-
-
-
//临时文件(windows系统的临时文件存储在【C:\Users\用户名\AppData\Local\Temp目录中】带有php内容的就是)
-
//1、创建一个临时文件
-
$tmpfile=tmpfile();
-
//2、向临时文件写入内容
-
$writeInfoToTmpfile=fwrite($tmpfile,"测试写入临时文件的信息1");
-
echo "临时文件写入内容1结果:$writeInfoToTmpfile <br>";
-
$writeInfoToTmpfile2=fwrite($tmpfile,"第二次写入测试临时文件信息2");
-
echo "临时文件写入内容2结果:$writeInfoToTmpfile2 <br>";
-
// //休眠15秒,方便我们去【C:\Users\用户名\AppData\Local\Temp目录中】查看文件内容
-
// sleep(15);
-
// //读取临时文件方式一
-
// fseek($tmpfile,0);
-
// rewind($tmpfile);
-
// //指定读取1K的文件内容
-
// $readTmpfileInfo=fread($tmpfile,1024);
-
// //关闭临时文件(文件一关闭就会被删除)
-
// fclose($tmpfile);
-
-
//读取临时文件方式二
-
$tmpfile_path = stream_get_meta_data($tmpfile)['uri'];
-
$readTmpfileInfo=file_get_contents($tmpfile_path);
-
echo "读取到的临时文件信息为: $readTmpfileInfo <br>";
-
-
//移动拷贝和删除文件
-
//1、使用rename方法若是在同一个路径下则表示重命名(返回结果1表示成功,否则失败)
-
$renameresult=rename('./test/','./test/');
-
echo "将文件重命名后的结果:$renameresult <br>";
-
-
//2、使用rename方法若是在不同路径下则表示移动文件和文件重命名(返回结果1表示成功,否则失败)
-
$renameresult2=rename('./test/','../test_2.php');
-
echo "将文件移动且重命名后的结果:$renameresult2 <br>";
-
-
//3、复制文件
-
$copyfileresult=copy("../test_2.php","./test/");
-
echo "复制且重命名文件后的结果:$copyfileresult <br>";
-
-
//4、删除文件
-
$delfileresult=unlink("../test_2.php");
-
echo "删除文件后的结果:$delfileresult <br><br>";
-
-
//5、获取文件路径的信息
-
$curfilepath22=__FILE__;
-
$filepathinfo=pathinfo($curfilepath22);
-
echo "[$curfilepath22]的信息为:<br>";
-
print_r ($filepathinfo);
-
echo '<br>';
-
echo"文件路径:".$filepathinfo['dirname'].'<br>';
-
echo"文件名称:".$filepathinfo['basename'].'<br>';
-
echo"文件扩展名称:".$filepathinfo['extension'].'<br>';
-
echo"不包含文件扩展名称的文件名:".$filepathinfo['filename'].'<br>';
-
-
?>
-
-
</body>
-
-
</html>
临时文件内容
1.3、PHP文件权限设置
Linux系统中文件权限详解_linux文件权限/xiaochenXIHUA/article/details/139974153?spm=1001.2014.3001.5501
在Linux系统中,PHP可以使用chmod函数进行权限的设置,如下所示:
-
<?php
-
//修改linux 系统/var/log/nginx/的文件权限为755
-
chmod("/var/log/nginx/", 755);
-
chmod("/var/log/nginx/", "u+rwx,go+rx");
-
//修改目录的权限为755
-
chmod("/var/log/nginx", 0755);
-
?>
二、PHP文件的传输操作
2.1、文件上传的PHP配置
使用PHP进行文件上传需要对【】配置文件进行操作(即:将【file_uploads = On】取消注释和启用);修改完成后保存配置文件且需要对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置息
-
<?php
-
phpinfo();
-
?>
2.2、文件上传的思路和实现
1、用户操作
1、选择文件;
2、提交文件;
2、上传文件流程思路
1、获取到提交的文件(推荐使用POST方法接收);
2、判断文件的大小(判断文件是否超出范围);
3、判断文件类型(获取到文件类型并判断是否符合要求);
4、生成新的文件名(因为使用原名可能存在一些敏感违反法律法规的内容;或者容易被黑客利用);
6、移动临时文件到指定的路径下永久保存;
如下是实现的一个简易网盘功能代码内容:
1、新建一个名为【】的页面,用于文件的上传、内容展现,代码如下:
-
<!DOCTYPE>
-
<html>
-
<head>
-
<meta charset="utf-8">
-
<title>小网盘</title>
-
</head>
-
<body>
-
-
<form method="post">
-
<input type="submit" name="delBtn" value="删除">
-
<input type="submit" name="moveBtn" value="移动">
-
<input type="submit" name="copyBtn" value="复制">
-
</form>
-
-
<form method='post'><input type='submit' name='delBtn' value='删除'><input type='submit' name='moveBtn' value='移动'><input type='submit' name='copyBtn' value='复制'></form>
-
<hr>
-
<form action="../php/" method="post" enctype="multipart/form-data">
-
<p style="font-size: 36px; color: orange;" >上传文件示例</p>
-
<div border="3">
-
<input type="file" name="uploadfile">
-
<input type="submit" name="提交">
-
</div>
-
</form>
-
<hr>
-
-
<?php
-
header("Content-Type:text/html;charset=utf-8");
-
-
$rootPath=$_SERVER['DOCUMENT_ROOT'];
-
echo "项目根目录为【$rootPath 】 <br>";
-
$uploadFilePath=$rootPath."/files/uploadfiles";
-
echo "上传文件的路径为【$uploadFilePath 】<br>";
-
$uploadFileAllFile=scandir($uploadFilePath);
-
showdir($uploadFileAllFile,$uploadFilePath);
-
-
function showdir(array $curDirAllFiles,$curPath)
-
{
-
foreach($curDirAllFiles as $key => $value){
-
//过滤.和..不显示
-
if ($value=='.'||$value=='..'){
-
echo "<a href='./?fullpathname=$curPath'>$value</a> <br>";
-
continue;
-
}
-
-
$fullPath=$curPath."/".$value;
-
$value=iconv('gbk','utf-8',$value);
-
if(is_dir($fullPath)){
-
$fullpath2=$fullPath.'/'.$value;
-
// echo "<img src='../images/目录.png' width='20px' height='20px'/> <a href='./?fullpathname=$fullpath2'> $value</a> <a href='./?delCurFile=$fullPath'>删除</a> <a href='./?moveCurFile=$fullPath'>移动</a> <a href='./?copyCurFile=$fullPath'>复制</a><br>";
-
echo "<img src='../images/目录.png' width='20px' height='20px'/> <a href='./?fullpathname=$fullpath2'> $value<br>";
-
}
-
else{
-
echo "<img src='../images/文件.png' width='20px' height='20px'/> $value <a href='./?delCurFile=$fullPath'>删除</a> <a href='./?moveCurFile=$fullPath'>移动</a> <a href='./?copyCurFile=$fullPath'>复制</a><br>";
-
}
-
-
}
-
}
-
-
// echo "<script>var v=( '你确定要删除这条记录吗? ');
-
// ='res=' + v;
-
// </script>";
-
// $res=$_COOKIE['res'];
-
// echo "弹窗的选择结果:$res";
-
-
-
-
if(isset($_POST["delBtn"])) {
-
echo "你点击了删除按钮<br>";
-
}
-
-
if(isset($_POST["moveBtn"])) {
-
echo "你点击了移动按钮<br>";
-
}
-
-
if(isset($_POST["copyBtn"])) {
-
echo "你点击了复制按钮<br>";
-
}
-
-
?>
-
</body>
-
</html>
-
-
2、再新建一个名为【】的界面,用于目录和文件的展示和切换,代码如下:
-
<?php
-
header("Content-Type:text/html;charset=UTF-8");
-
-
$fullpathname =$_GET['fullpathname'];
-
-
$curpath=dirname($fullpathname);
-
$curdirallfiles=scandir($curpath);
-
showdir($curdirallfiles,$curpath);
-
-
function showdir(array $curDirAllFiles,$curPath)
-
{
-
foreach($curDirAllFiles as $key => $value){
-
//过滤.和..作为返回上一级的操作
-
if ($value=='.'||$value=='..'){
-
echo "<a href='./?fullpathname=$curPath'>$value</a> <br>";
-
continue;
-
}
-
-
$value=iconv('gbk','utf-8',$value);
-
$fullPath=$curPath."/".$value;
-
// $value=iconv('gbk','utf-8',$value);
-
if(is_dir($fullPath)){
-
$fullpath2=$fullPath.'/'.$value;
-
//显示目录图标和目录名称(且目录可以点击查看其包含的文件和文件夹内容)
-
// echo "<img src='../images/目录.png' width='20px' height='20px'/> <a href='./?fullpathname=$fullpath2'> $value</a> <a href='./?delCurFile=$fullPath'>删除</a> <a href='./?moveCurFile=$fullPath'>移动</a> <a href='./?copyCurFile=$fullPath'>复制</a><br>";
-
echo "<img src='../images/目录.png' width='20px' height='20px'/> <a href='./?fullpathname=$fullpath2'> $value</a> <br>";
-
}
-
else{
-
//显示文件图标和文件名称(且可以对文件进行删除、移动、复制操作)
-
echo "<img src='../images/文件.png' width='20px' height='20px'/> $value <a href='./?delCurFile=$fullPath'>删除</a> <a href='./?moveCurFile=$fullPath'>移动</a> <a href='./?copyCurFile=$fullPath'>复制</a><br>";
-
// echo "<img src='../images/文件.png' width='20px' height='20px'/> $value <br>";
-
}
-
-
}
-
}
-
-
?>
3、最后新建一个名为【】的界面,用于对文件的删除、移动和复制操作,代码如下:
-
<?php
-
header("Content-Type:text/html;charset=utf-8");
-
-
echo "<a style='font-size:36px;color:blue' href='./'>返回主页</a> <br>";
-
-
//删除文件
-
$delCurFile =$_GET['delCurFile'];
-
echo "[获取到需删除的文件] $delCurFile <br>";
-
//获取文件名称
-
$filename = pathinfo($delCurFile,PATHINFO_BASENAME);
-
-
if(file_exists($delCurFile)){
-
echo "[准备删除文件] $delCurFile <br>";
-
$filePathInfo=pathinfo($delCurFile);
-
$result = unlink($delCurFile);
-
echo "删除文件【".$filePathInfo['basename']."】结果是:";
-
if($result){
-
echo "<p style='font-size:36px;color:green'>删除成功</P> <br>";
-
}else{
-
echo "<p style='font-size:36px;color:red'>删除失败</P> <br>";
-
}
-
}
-
-
-
//移动文件
-
$moveCurFile =$_GET['moveCurFile'];
-
echo "[获取到需移动的文件] $moveCurFile <br>";
-
if(file_exists($moveCurFile)){
-
echo "[准备移动文件] $moveCurFile <br>";
-
//获取文件内容
-
$filePath=pathinfo($moveCurFile,PATHINFO_DIRNAME);
-
echo "需移动的文件路径:$filePath <br>";
-
//获取文件名称和拓展名称
-
$fileNameExtension=pathinfo($moveCurFile,PATHINFO_BASENAME);
-
echo "需移动的文件路径和拓展名为:$fileNameExtension <br>";
-
-
//新文件路径和名称
-
$newFilePathName=$filePath.'/test/'.$fileNameExtension;
-
echo "新文件路径和名称:$newFilePathName <br>";
-
-
$result=rename($moveCurFile, $newFilePathName);
-
-
if($result){
-
echo "<p style='font-size:36px;color:green'>移动成功,且移动后的路径是:test/.$fileNameExtension</P> <br>";
-
}
-
else{
-
echo "<p style='font-size:36px;color:red'>移动失败</P> <br>";
-
}
-
-
}
-
-
//复制文件
-
$copyCurFile =$_GET['copyCurFile'];
-
echo "[获取到需复制的文件] $copyCurFile <br>";
-
if(file_exists($copyCurFile)){
-
echo "[准备复制文件] $copyCurFile <br>";
-
//获取文件内容
-
$filePath=pathinfo($copyCurFile,PATHINFO_DIRNAME);
-
echo "需复制的文件路径:$filePath <br>";
-
$fileName = pathinfo($copyCurFile,PATHINFO_FILENAME);
-
echo "需复制的文件名称:$fileName <br>";
-
$fileExtension = pathinfo($copyCurFile,PATHINFO_EXTENSION);
-
echo "需复制的文件拓展名:$fileExtension <br>";
-
$newFilePathName=$filePath."/".$fileName."(1).".$fileExtension;
-
echo "复制后的文件名称是:$newFilePathName <br>";
-
-
$result=copy($copyCurFile,$newFilePathName);
-
echo "【复制结果】$result";
-
if($result){
-
echo "<p style='font-size:36px;color:green'>复制成功,且复制后的文件名称是:$newFilePathName</P> <br>";
-
}
-
else{
-
echo "<p style='font-size:36px;color:red'>复制失败</P> <br>";
-
}
-
}
-
-
-
?>
三、PHP的其他操作
3.1、PHP中可以执行系统命令的函数
序号 | 可以执行系统命令的函数 | 说明 |
1 | exec(命令) | 执行一个外部程序 PHP: exec - Manual |
2 | system(命令) | 执行外部程序,并且显示输出(推荐使用) PHP: system - Manual |
-
<?php
-
header("Content-Type:text/html;charset=GB2312");
-
-
//查看系统的IP信息内容命令
-
$cmd="ipconfig";
-
//查看PHP的系统配置信息命令
-
$cmd=phpinfo();
-
//执行[ipconfig]的系统命令并且将执行结果保存到文件中命令
-
$cmd="ipconfig > ../files/";
-
-
$cmdResult=system($cmd);
-
echo "<br>";
-
// $convertcmdResult=iconv("gbk","utf-8",$cmdResult);
-
// $convertcmdResult=mb_convert_encoding($cmdResult,"utf-8","gb2312");
-
echo "$cmdResult <br>";
-
-
-
// $cmdResult2=exec($cmd);
-
// $convertcmdResult=mb_convert_encoding($cmdResult2,"utf-8","gbk");
-
// echo "exec执行命令【$cmd 】后的结果: $convertcmdResult <br>";
-
-
?>
3.2、PHP中的错误处理
由于我们写的代码不能够保证没有任何Bug和错误,那么只有有这些异常和错误,如果不对这些异常和错误进行设置捕捉处理;那么这些异常错误内容就会展现在用户面前,这样会导致服务器的敏感信息暴漏出来,不利于系统和服务器的安全(我们希望异常和错误信息不会展示给用户,只是记录下来提供给内部开发和运维人员使用)。
序号 | 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中配置文件的错误配置 | 说明 |
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配置文件修改权限的处理错误方式 | ||
|
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/
-
<?php
-
header("Content-Type:text/html;charset=utf-8");
-
//创建一个人类信息对象
-
class peopleInfo{
-
var $name; //定义名字属性
-
var $sex; //定义性别属性
-
var $age;
-
-
// //构造函数
-
// function __construct() {
-
-
// }
-
-
//定义一个构造函数(接受传入的信息)
-
function peopleInfo($name,$sex,$age){
-
$this->name = $name;
-
$this->sex = $sex;
-
$this->age= $age;;
-
}
-
-
//打印信息
-
function printInfo() {
-
echo "我的名字是:".$this->name." 性别是:".$this->sex." 年龄是:".$this->age."<br>";
-
}
-
-
//自动销毁对象的特殊方法(回收内存)
-
function __destruct(){
-
echo "对象已经被销毁<br>";
-
echo phpinfo();
-
}
-
-
-
}
-
-
//使用人类信息对象
-
$peopleInfo=new peopleInfo("牛奶咖啡","男","26");
-
//调用人类信息对象的打印方法
-
$peopleInfo->printInfo();
-
//单独指定人类信息对象的属性内容
-
$peopleInfo->name = "周茜";
-
$peopleInfo->sex = "女";
-
$peopleInfo->age = "27";
-
$peopleInfo->printInfo();
-
-
echo gettype($peopleInfo);
-
-
echo "<hr>";
-
-
-
//序列化数组
-
$tmpArray=array('牛奶咖啡','周茜','杨欣怡');
-
$tmpSerialize=serialize($tmpArray);
-
echo "序列化数组后的字符串是:$tmpSerialize <br><hr>";
-
//反序列化数组字符串
-
$tmpUnserialize=unserialize($tmpSerialize);
-
echo "<br>反序列化字符串【$tmpSerialize 】后数据类型是:".gettype($tmpUnserialize)." 内容为:".$tmpUnserialize[0].$tmpUnserialize[1].$tmpUnserialize[2]."<br><hr>";
-
-
-
//序列化类对象
-
$tmpClassObj=new peopleInfo("杨欣怡","女","26");
-
$tmpClassObjSerialize=serialize($tmpClassObj);
-
echo "序列化类对象后的字符串是:$tmpClassObjSerialize <br><hr> ";
-
//反序列化类对象的字符串
-
$tmpClassObjUnserialize=unserialize($tmpClassObjSerialize);
-
echo "<br>反序列化字符串【$tmpClassObjSerialize 】后数据类型是:".gettype($tmpClassObjSerialize)."<br>";
-
//调用反序列化后的类对象方法内容
-
$tmpClassObjUnserialize->printInfo();
-
$tmpClassObjUnserialize->__destruct();
-
-
-
?>
运行结果如下:
3.4、PHP中操作Mysql数据库
PHP: Mysql(原始) - Manual /manual/zh/PHP: mysql_connect - Manual /manual/zh/PHP: mysql_query - Manual /manual/zh/
-
<?php
-
header("Content-Type:text/html;charset=utf-8");
-
-
//模拟传入的用户名和密码到数据库查询
-
$usr=$_GET['usr'];
-
$pwd=$_GET['pwd'];
-
echo "获取到的用户名是【$usr 】密码是【$pwd 】<br><hr>";
-
-
//链接mysql数据库
-
$mysqlDB=mysqli_connect("127.0.0.1","root","root","coffeemilk",3306);
-
//查询sql
-
$sql="select * from user where username='$usr' and password='$pwd';";
-
$sqlresult = mysqli_query($mysqlDB,$sql);
-
var_dump($sqlresult);
-
$sqlRownum=$sqlresult->num_rows;
-
if($sqlRownum == 1) {
-
echo "<p style='font-size:26px;color:green;'>恭喜,登录成功!</p>";
-
}
-
else {
-
echo "<p style='font-size:26px;color:red;'>很遗憾,登录失败!</p>";
-
}
-
-
echo "<hr>执行 $sql 查询的结果是:<br>";
-
-
while($row = mysqli_fetch_array($sqlresult)) {
-
echo "用户ID:".$row["id"]." 用户名:".$row["username"]." 密码:".$row['password']." 创建时间:".$row["reg_time"]."<br><hr>";
-
-
}
-
-
//插入sql
-
$sqlInsert="insert into user(username,password,reg_time)value('zhangsan','987654',current_timestamp())";
-
$sqlInsertResult=mysqli_query($mysqlDB,$sqlInsert);
-
echo "执行【$sqlInsert 】插入语句的结果是:$sqlInsertResult <br>";
-
if ($sqlInsertResult==1) {
-
echo "<p style='font-size:26px;color:green;'>恭喜,插入数据成功!</p>";
-
}else{
-
echo "<p style='font-size:26px;color:red;'>很遗憾,插入数据失败!</p>";
-
}
-
-
//最后关闭Mysql数据库链接
-
mysqli_close($mysqlDB);
-
-
-
?>
3.5、cookie和session
PHP: setcookie - Manual /manual/zh/PHP: $_COOKIE - Manual /manual/zh/PHP: Sessions - Manual /manual/zh/PHP: 简介 - Manual /manual/zh/
-
<?php
-
-
//1、设置cookie(内容都是明文展示,不安全)
-
setcookie("usr",$usr);
-
setcookie("loginStatus",1);
-
-
//2、获取到cookie信息(内容都是明文展示,不安全)
-
$usr=$_COOKIE['usr'];
-
$loginStatus=$_COOKIE['loginStatus'];
-
-
?>
-
<?php
-
-
//1、设置session(一个令牌数据)
-
session_start();
-
$_SESSION['usr']=$usr;
-
$_SESSION['loginTime']=time();
-
$_SESSION['loginStatus']=1;
-
-
//2、获取到session信息(一个令牌数据)
-
session_start();
-
$usr=isset($_SESSION['usr']);
-
$loginStatus=isset($_SESSION['loginStatus']);
-
-
?>
(href 属性是一个可读可写的字符串,可设置或返回当前显示的文档的完整 URL)
1、新建一个商品主页名为【】代码如下:
-
<!DOCTYPE html>
-
<html>
-
<head>
-
<meta charset="UTF-8">
-
<title>测试Cookie的商品首页</title>
-
</head>
-
-
<body>
-
<div>
-
<?php
-
header("Content-Type:text/html;charset=utf-8");
-
//设置本页面不显示错误信息
-
ini_set("display_errors",0);
-
-
// //1、获取到cookie信息(内容都是明文展示,不安全)
-
// $usr=$_COOKIE['usr'];
-
// $loginStatus=$_COOKIE['loginStatus'];
-
-
//2、获取到session信息(一个令牌数据)
-
session_start();
-
$usr=isset($_SESSION['usr']);
-
$loginStatus=isset($_SESSION['loginStatus']);
-
-
if($loginStatus!=1){
-
echo "<a href='./'>登录</a>";
-
}
-
-
?>
-
-
<hr>
-
<div style="font-size:36px;color:orange">
-
如下是各种商业的列表信息
-
</div>
-
</div>
-
-
</body>
-
-
</html>
2、新建一个登录界面取名为【】代码如下:
-
<!DOCTYPE html>
-
<html>
-
<head>
-
<meta charset="UTF-8">
-
<title>登录界面</title>
-
</head>
-
-
<body>
-
<div>
-
<form action="./" method="post">
-
<p style="font-size: 36px; color: chocolate;">欢迎来到登录界面</p>
-
<div>用户名: <input type="text" name="usr"></div>
-
<div>密 码: <input type="password" name="pwd"></div>
-
<input type="submit" name="提交">
-
</form>
-
</div>
-
-
</body>
-
-
</html>
3、新建一个数据库连接验证页面取名为【】代码如下:
-
<?php
-
header("Content-Type:text/html;charset=utf-8");
-
-
//模拟传入的用户名和密码到数据库查询
-
$usr=$_POST['usr'];
-
$pwd=$_POST['pwd'];
-
echo "获取到的用户名是【$usr 】密码是【$pwd 】<br><hr>";
-
-
//链接mysql数据库
-
$mysqlDB=mysqli_connect("127.0.0.1","root","root","coffeemilk",3306);
-
//查询sql
-
$sql="select * from user where username='$usr' and password='$pwd';";
-
$sqlresult = mysqli_query($mysqlDB,$sql);
-
var_dump($sqlresult);
-
$sqlRownum=$sqlresult->num_rows;
-
if($sqlRownum == 1) {
-
echo "<p style='font-size:26px;color:green;'>恭喜,登录成功!</p>";
-
// //1、设置cookie(内容都是明文展示,不安全)
-
// setcookie("usr",$usr);
-
// setcookie("loginStatus",1);
-
-
//2、设置session(一个令牌数据)
-
session_start();
-
$_SESSION['usr']=$usr;
-
$_SESSION['loginTime']=time();
-
$_SESSION['loginStatus']=1;
-
-
echo "自动返回首页<script>='./'</script>";
-
}
-
else {
-
echo "<p style='font-size:26px;color:red;'>'很遗憾,登录失败!请重新登录'</p>";
-
echo "<script>alert('很遗憾,登录失败!请重新登录'); ='./'</script>";
-
}
-
-
//最后关闭Mysql数据库链接
-
mysqli_close($mysqlDB);
-
-
-
?>