PHP即:超文本预处理器,它是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。该语言的主要目标是允许web开发人员快速编写动态网页。
把跟服务端/数据库交互的页面叫动态网页
一、PHP代码基本语法
1.1PHP函数知识介绍
新建php文件输入
<?php
phpinfo();
?>
在浏览器中运行,得到
phpinfo()函数显示当前电脑的详细PHP信息
输出
echo “hello word”;
echo "<h1>hello world</h1>";
字符串拼接
$message = "hello";
$name = "laoli";
echo $message." ".$name;//hello laoli
1.2常量变量
1.2.1变量
1.变量前加$符号,区别大小写
$this是一个特殊的变量,它不能被赋值
PHP中不需要初始化变量,但这是一个好习惯
未初始化的变量具有其类型的默认值
布尔类型-FALSE
整型和浮点型-0
字符串型=空字符串
数组=空数组
PHP没有声明变量的命令,变量在第一次赋值给它的时候被创建
不用声明变量的数据类型,它会根据变量的值自动把变量转换为正确的数据类型
2.变量的分类
(1)可变变量
<?php
// 服务器读取的 编码设置
header('Content-type:text/html;charset=utf-8');
//定义了一个变量叫作$shu 将$shu这个变量的值设为字符串的biao
$shu = ‘biao’;
//定义了一个变量叫作$biao 将他的值设置为鼠标
$biao = ‘鼠标’;
//$$shu就是可变变量;在已声明的变量$shu前又加上了一个变量符
echo $$shu;
?>
(2)外部变量(PHP在使用过程中规定好的一些变量)
<html>
<head>
</head>
<body>
<!-- 这一行method 对应的值改为post --->
<form action="req.php" method="post">
<input type="text" name="username"/>
<input type="password" name="pwd"/>
<input type="submit" name="提交"/>
</form>
</body>
</html>
PHP调用以上代码中的外部变量
<?php
//$_POST[‘username’],将username作为字符串放在中括号里面,就得到了表单里面的<input type=”text”name=”username”/>的值
$u = $_POST['username'];
echo $u.'<br />';
//$_POST[‘pwd’],将pwd作为字符串放在中括号里面,就得到了表单里面的<input type=”text”name=”pwd”/>的值
$passwd = $_POST['pwd'];
echo $passwd.'<br />';
?>
通过$_POST这个外部变量,可以得到从表单输入的值。
其他外部变量
(3)环境变量
主要用的有_SERVER 和 $_ENV两个环境变量。不过,$_ENV逐渐被PHP的新版本给废弃了。
3.变量作用域
函数内部定义的变量只能在函数内部调用
如果函数内部要使用函数外部的全局变量要加上global的声明
$x=1;
function fun(){
global $x;
$y=0;
echo "x=$x";
echo "<br>";
echo "y=$y";
}
fun();
echo"<br>";
echo "y=$y";
在函数执行完毕后,局部变量会销毁,如果不想销毁就在局部变量前加static
4.超全局变量superglobal
超全局变量是在全部作用域中始终可用的内置变量。
PHP 中的许多预定义变量都是超全局的,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行global $variable;就可以访问它们。
1.$GLOBALS是PHP的一个超级全局变量组,在一个PHP脚本的全部作用域中都可以访问,是一个包含了全部变量的全局组合数组,变量的名字就是数组的键
<?php
$x=31;
$y=36;
function addition(){
$GLOBALS['z']=$GLOBALS['x']+$GLOBALS['y'];
}
addition();
echo $z;
?>
//输出67
2.$_REQUEST用于收集HTML表单提交的数据
<form method="post" action="index.php">
Name:<input type="text" name="fname">
<input type="submit" value="提交">
</form>
<?php
$fname=$_REQUEST['fname'];
echo $fname;
?>
3.$_POST被广泛应用于收集表单数据,在HTML form标签指定该属性“method = “post””;
<form method="post" action="index.php">
Name:<input type="text" name="fname">
<input type="submit" value="提交">
</form>
<?php
$fname=$_POST['fname'];
echo $fname;
?>
4.$_GET 预定义的$_GET变量用于收集来自method="get"的表单中的值
<form method="get" action="index.php">
Name:<input type="text" name="name">
Passowrd:<input type="password" name="password">
<input type="submit" value="提交">
</form>
<?php
$name=$_GET['name'];
$password = $_GET['password'];
$messgae =<<<EOT
用户名称 $name 用户密码 $password;
EOT;
echo $messgae;
?>
5.$_SERVER是一个包含了诸如头信息(header)、路径(path)以及脚本位置(script locations)等信息的数组
6.$_COOKIE通过HTTP Cookies 方式传递给当前脚本的变量的数组
7.$_FILES 通过HTTP POST 方式上传到当前脚本的项目的数组
8.$_SESSION 当前脚本可用SESSION变量的数组
9.$_ENV 通过环境方式传递给当前脚本的变量的数组
1.2.2常量
定义
define(常量名,常量值,布尔值);
//布尔值可不写
const MESSAGE = "ABCDEF";
常量名通常大写,加引号,字符串中调用常量时,必须在引号外面
常量值只能是标量,如整型、浮点型、布尔型、null、字符串等,不能是数组、对象、资源
<?php
define('MY_NAME','PHP中文网');
echo MY_NAME;
echo '我的名字是'.MY_NAME;
?>
函数内部调用外部的常量不必加global,直接使用
内置常量
1.3数据类型
PHP中一共有八种数据类型,包括4种标量数据类型:boolean(布尔类型)、integer(整型)、float/double(浮点型)和string(字符串型),2种复合数据类型:array(数组类型)和object(对象类型),2种特殊的数据类型:resource(资源类型)与null(无/空白类型)。
1.3.1整型
英文简写为int;整形分为8进制、10进制、16进制,整形在计算机里面是有最大值和最小值范围的。32位计算机一次运算处理的最大范围是-2的32次方到2的32次方-1;而64位计算机就是一次运算处理的最大范围是-2的64次方到2的64次方-1。
八进制声明方式
$bajinzhi=03312 //在值前加0
十六进制声明方式:
$shiliujinzhi=0x6ff;//以0x开始,后面跟0-f的,0x的后面的abcdef不区分大小写
当给定的数值超出整型最大范围,将会被认为浮点型
1.3.2布尔类型
true/false(不区分大小写)
当转换为boolean时,以下值被认为是FALSE:
布尔值FALSE本身
整型值为0
浮点型值为0.0
空字符串以及字符串“0”
不包括任何元素的数组
特殊类型NULL(包括尚未赋值的变量)
从空标记生成的SimpleXML对象
所有其他值被认为是TRUE(包括任何资源和NAN)
1.3.3字符串类型
声明:单引号、双引号、字界符
字界符声明:
1、在变量后面的等号写三个小于号 <<<
2、然后在<<<后面写上字符(建议英文大写字符)
3、然后换行写上任意想写的字符
4、写完后,顶行。在行最开始处,再写上<<<后面的字符和分号。
<?php
$dingjie = <<<ABC
如果
非要在这个测试
前
面<br />
加上一段
<i>有趣的话</i>
我想说,<h1>努力学习不好么<h1>
ABC;
echo $dingjie
?>
#<<<提示符,定义heredoc类型的字符串
#标识符 自定义,有开始标记和结束标记,保持一致,分号结束
$name="老李";
$message=<<<EOT
hello $name
EOT;
echo $message;
#hello 老李
如果给标识符加上‘’,就不解析变量了
转换为字符串
一个值可以通过在其前面加上(string)或用strval()函数转变成字符串
在一个需要字符串的表达式中,会自动转换成string
NULL总是被转变成空字符串
单引号和双引号的区别
1.双引号解析变量,但是单引号不解析变量
2.在双引号里面插入变量,变量后面如果有英文或中文字符,会把这个字符和变量拼起来,视为一整个变量。一定要在变量后面接上特殊字符,例如空格等分开。
3.如果在双引号里面插变量的时候,后面不想有空格,可以拿大括号将变量包起来。
4.双引号解析转义字符,单引号不解析转义字符。但是单引号能解析\
5.单引号效率高于双引号,尽可能使用单引号
6.双引号和单引号可以互相嵌套,双引号中可以插入单引号,单引号当中插入变量,这个变量会被解析。
7.神奇的字符串拼接胶水——(.)点,用来拼接字符串。
8.一般将定界符声明字符串视为双引号一样的功能来看待。
$name = "laoli";
echo "my name is $name";
echo "<br>";
echo 'my name is $name';
//my name is laoli
//my name is $name
1.3.4浮点型
分为普通声明和科学声明
科学声明:var_dump() 函数用于输出变量的相关信息(调试函数,没有返回值)。显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
$f1=0.0025;
var_dump($f1);
如需高精度应选择任意精度数学函数或gmp函数
1.3.5查看数据类型和判断数据类型
查看数据类型:
1、gettype(传入一个变量)能获得变量的类型
2、var_dump(传入一个变量)输出变量类型和值判断数据类型方法:
使用is_*系列函数,is_types这一系列的函数,来进行判断某个数据属于哪种类型,如果是这个类型返回真,不是这个类型返回假。
$name = "老李";
var_dump($name);
//string(6) "老李"
//一个中文字符占3个字节
1.3.6特殊变量
null 不表示空格,也不表示0,也不表示空字符串,是一个变量的值为空,不区分大小写
标识变量是否为空,也用于区分空字符串与空值数据,通过把值设为null,将变量清空
在下列情况下,一个变量被认为是null
被赋值为null,尚未赋值,被unset()销毁指定的变量
资源(resource)在PHP中,我们经常使用到资源类型变量。例如:mysql 连接、文件句柄等,这些变量无法使用标量来表示。
资源数据类型是 PHP 4引进的。
资源是一种特殊的变量类型,保存了到外部资源的一个引用:如打开文件、数据库连接、图形画布区域等
php 操作数据库之前,必须先建立到数据库的链接,比如:
$conn=mysql_connect("localost" , "root", "123456");
然后对数据库的进一步操作需要使用该链接:
mysql_select_db("test",$conn);
这个$conn就是一种资源类型的变量,其他函数都会引用这个资源变量来执行其他操作。
由于 PHP 4 Zend引擎引进了引用计数系统,可以自动检测到一个资源不再被引用了(和Java一样)。
这种情况下此资源使用的所有外部资源都会被垃圾回收系统释放。因此,很少需要手工释放内存。
1.3.7数据类型比较
虽然 PHP是弱类型语言,但也需要明白变量类型及它们的意义,因为我们经常需要对 PHP变量进行比较,包含松散和严格比较。
松散比较:使用两个等号==比较,只比较值,不比较类型。
严格比较:用三个等号===比较,除了比较值,也比较类型。
null和string 将null转化成"",进行词汇的比较。
bool和任意其他的类型 转化为bool FALSE | TRUE。
string和number 将字符串转化成数字,按照普通数学比较。
1. 4流程控制语句
if( ){
}elseif(){
}else{
}
switch(变量){ //字符串,整形
case 具体值1:
执行代码1;
break;
case 具体值2:
执行代码2;
break;
case 具体值3:
执行代码3;
break;
defult:
}
上面的break是可选的,上面的default也是可选的,不要在case后面写成分号,后面是冒号.不要在case后面写判断区间,如($foo >20 或者 $foo == 30)
switch里面的变量最好是整型、字符串,因为布尔判断更适合if…else.
还有while do-while for break continue
foreach 遍历数组的常见方法
foreach语法结构提供了遍历数组的简单方式。foreach仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。
每进行一次循环,当前数组元素的值就会被赋值给$value变量(数组指针会逐一地移动),在进行下一次循环时,您将看到数组中的下一个值。
foreach ($array as $value){
}
1.5运算符
在除法的运算中
1.两数能整除,结果的数据类型为int(整数)
2.两数不能整除,结果的数据类型为float(浮点数)
取模的操作数在运算之前都会转换成整数(除去小数部分)
如果比较一个数字和字符串或者比较涉及到数字内容的字符串,
则字符串会被转换为数值并且比较按照数值来进行。此规则也适用于switch语句。
当用===或!==进行比较时则不进行类型转换,因为此时类型和数值都要比对。
运算符优先级中or和||、&&和and都是逻辑运算符,效果一样,但是其优先级却不一样。与:"&&"比"and"的优先级高。
或:“||”比 "or"的优先级高。
PHP有两个字符串运算符:
1.连接运算符(.),返回其左右参数连接后的字符串。
2.连接赋值运算符(.=),将右边参数附加到左边的参数之后。
下表按照优先级从高到低列出了运算符。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序。
说明:左=从左到右,右=从右到左。
数组运算符
三元运算符
(expr1) ? (expr2) : (expr3)
对expr1求值为TRUE时的值为expr2,在expr1求值为FALSE 时的值为expr3。
自PHP 5.3起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3在expr1求值为TRUE时返回expr1,否则返回expr3。
太空船操作符
PHP7+ 支持组合比较符,符号为<=>。组合比较运算符可以轻松实现两个变量的比较,当然不仅限于数值类数据的比较。
语法格式
$c = $a<=>$b;
解析如下:
·如果$a > $b,则$c的值为1。
·如果$a == $b,则$c的值为O。
·如果$a< $b,则$c的值为-1。
echo 1 <=>1;/ / 0
echo 1 <=>2;// -1
echo 2<=>1;// 1
二、函数
Function 函数名(参数名1=[值1], 参数名2=[值2] , 参数名n=[值n])
{
函数中的功能体
[return 返回值]
}
函数名只能是字母,数字,下划线的组合,并且之间不能包含空格,数字不能放在变量名首位.
函数名与变量命名规则一样,但是不同的是,函数名不区分大小写
函数体的参数若是定义了,未传参,代码会报错.
函数后的参数如果有默认值,参数可以不填,代码也不会报错
函数后的参数可以写多个
函数后如果有默认值和无默认值的参数,通常把无默认值的参数写在最前面
函数体的变量与函数体外的变量没有关系
函数体中若有return,return后的代码不执行.
函数执行完后,可把函数体内的值,带到函数体外
函数的执行没有顺序关系,可以在定义外之前的位置调用
在实际开发中,常常需要把程序中的共用代码放到一个文件中,使用这些代码的文件只需要包含这个文件即可.这种方法有助于提高代码的重用性,给代码的编写与维护带来很大的便利.在PHP中,有以下四种方法包含一个文件:
include函数功能实践:
创建一个functions.php文件,里面写上两个函数:
<?php
//functions-test-02文件
function demo(){
echo 'aaaa';
}
function test(){
echo 'bbbb';
}
?>
在functions.php的同级目录下,在创建一个user.php文件把functions.php文件包含进来.
这样函数信息就可以专门放在functions.php里面,哪需要用到这些函数的时候,就从哪包含进来.
<?php
//user.php
include "function-test-02.php";
//可以直接调用
demo();
test();
?>
数学常用函数总结:
字符串常用函数总结:
时间信息函数总结:
<?php
$mytime = getdate();
echo "年 :".$mytime['year']."\n";
echo "月 :".$mytime['mon']."\n";
echo "日 :".$mytime['mday']."\n";
echo "时 :".$mytime['hours']."\n";
echo "分 :".$mytime['minutes']."\n";
echo "秒 :".$mytime['seconds']."\n";
echo "一个小时中的第几钟 :".$mytime['minutes']."\n";
echo "这是一分钟的第几秒 :".$mytime['seconds']."\n";
echo "星期名称 :".$mytime['weekday']."\n";
echo "月份名称 :".$mytime['month']."\n";
echo "时间戳 :".$mytime[0]."\n";
?>
三、PHP数组结构
数组的英文是array,可以存入多个不同类型的数据,是一个复合数据类型。
分为索引数组:带有数字ID键的数组
关联数组:带有指定的键的数字,每个键关联一个值
多维数组:包含一个或多个数组的数组
案例:
<?php
$shu = array(1 , 1.5 , true ,'天王盖地虎,小鸡炖蘑菇');
echo '<pre>';
var_dump($shu);
echo '</pre>';
?>
/*
array(4) {
[0]=>
int(1)
[1]=>
float(1.5)
[2]=>
bool(true)
[3]=>
string(33) "天王盖地虎,小鸡炖蘑菇"
}
*/
在上例中,我们发现我们存入了:整型、浮点、布尔、字符串
注:上例中echo pre这个标签的主要目的是为原样输出,格式展示的更好看,更清晰。
可以用var_dump()打印出来显示看一下效果:
索引数组的下标必须要从0开始吗?
答:这个问题其实不然,索引数组并不一定要从0开始。
那如何能够不从0开始呢?
<?php
$kele = array('只有不断努力才能博得未来',10 => 'NoAlike', 'PHP中文网' , '去PHP中文网学PHP', 19 => '苹果和梨子我都爱' , '橘子我最爱');
//打印显示$kele
echo '<pre>';
var_dump($kele);
echo '</pre>';
?>
/*
array(6) {
[0]=>
string(36) "只有不断努力才能博得未来"
[10]=>
string(7) "NoAlike"
[11]=>
string(12) "PHP中文网"
[12]=>
string(21) "去PHP中文网学PHP"
[19]=>
string(24) "苹果和梨子我都爱"
[20]=>
string(15) "橘子我最爱"
}
*/
//修改值
$arr[0]="1";
$arr1["count"]="25";
//删除
unset($arr[0]);
unset($arr1["count"]);
3.1for循环遍历索引数组
<?php
//声明一个数组,值为1到10
$num = array(1,2,3,4,5,6,7,8,9,10);
//按照索引数组的特点,下标从0开始。所以1的下标为0,10的下标为9
echo $num[0].'<br />';
echo $num[9].'<br />';
//我们可以得到数组中元素的总个数,为10
echo count($num) .'<br />';
//遍历这个索引数组的话,我们就可以定义一个变量为$i
//$i 的值为0,从0开始
//可以设定一个循环条件为:$i 在下标的(9)最大值之内循环
for($i = 0 ; $i < count($num) ; $i++){
echo $num[$i].'<br />';
}
?>
3.2数组函数
四、正则表达式
定界符的规定如下:定界符,不能用a-zA-Z0-9\ 其他的都可以用。必须成对出现,有开始就有结束。
例子 说明
/中间写正则/ 正确
$中间写正则$ 正确
%中间写正则% 正确
^中间写正则^ 正确
@中间写正则@ 正确
(中间写正则) 错误 /\// \ 是转义字符,如果在以后正则表达示里面需要匹配/,如/ / /
A中间写正则A 错误
这个时候真要匹配/ 的时候,需要把定界符里面的/ 用转义字符转义一下,写成下面的例子:
/ \/ /
如果你觉得麻烦,遇到这种需要转义的字符的时候可以把两个正斜线(/ /)定界,改为其他的定界符(# #)。
正则表达式格式:preg_match ( string $正则 , string $字符串 , array&$结果] )
功能:根据正则变量,匹配正则变量,匹配正则变量,匹配字符串变量。如果存在则返回匹配的个数,把匹配到的结果放到$结果变量里。如果没有匹配到结果返回0。
<?php
$zz = '/wq/';
$string = 'ssssswqaaaaaa';
if(preg_match($zz, $string, $matches)){
echo '匹配到了,结果为:';
var_dump($matches);
}else{
echo '没有匹配到';
}
?>
正则函数
五、对象
<?php
//new Person();创建一个对象,new 类
class Person{//自定义的类
var $count = 1;//声明一个属性
function getCount(){
echo $this->count;//this指正在调用这个方法的实例
}
}
//还有内置的类
//类里有什么东西?
#类属性-变量
#类方法-函数
$instance=new Person();
echo $instance->count;//注意这里count前不加$
echo "<br>";
$instance->getCount();
?>
六、文件管理系统
6.1fopen、fread、fclose操作读取文件
读取文件函数 readfile ( string: $文件名) 功能:传入一个文件路径,输出一个文件。
//linux类的读了方式
readfile("/home/paul/test.txt");
//windows类的读取方式
readfile("c:\\oldboy\oldboy\boot.ini");
打开文件函数 file_get_contents
$filename = 'NoAlike.txt';
$filestring = file_get_contents($filename);
echo $filestring;
resource fopen ( string $文件名, string 模式)
string fread ( resource $操作资源, int 读取长度)
bool fclose ( resource $操作资源 )
fopen模式
6.2创建和修改文件内容
写入文件 file_put_contents ( string $文件路径, string $写入数据) 功能:向指定的文件当中写入一个字符串,如果文件不存在则创建文件。返回的是写入的字节长度
<?php
$data = "在PHP中文网学好PHP,妹子票子不再话下!";
$numbytes = file_put_contents('test.txt', $data);
if($numbytes){
echo '写入成功,我们读取看看结果试试:';
echo file_get_contents('test.txt');
}else{
echo '写入失败或者没有权限,注意检查';
}
?>
fwrite配合fopen进行写入操作
<?php
$filename = 'test.txt';
$fp= fopen($filename, "w");
$len = fwrite($fp, '我是一只来自北方的狼,却在南方冻成了狗');
fclose($fp);
print $len .'字节被写入了\n';
?>
代码说明:
· 不论有没有新建都会打开文件重新写入
· 原有的文件内容会被覆盖掉
· 文件不存在会创建
6.3创建临时文件
<?php
//创建了一个临时文件
$handle = tmpfile();
//向里面写入了数据
$numbytes = fwrite($handle, '写入临时文件');
//关闭临时文件,文件即被删除
fclose($handle);
echo '向临时文件中写入了'.$numbytes . '个字节';
?>
6.4移动、拷贝和删除文件
重命名文件 rename($旧名,$新名); 函数返回一个bool值
<?php
//旧文件名
$filename = 'test.txt';
//新文件名
$filename2 = $filename . '.old';
//复制文件
rename($filename, $filename2);
?>
复制文件 copy(源文件,目标文件);
<?php
//旧文件名
$filename = 'copy.txt';
//新文件名
$filename2 = $filename . '_backup';
//修改名字。
copy($filename, $filename2);
?>
说明:会通过上面的例子,发现多出来了一个文件。
删除文件 unlink(指定路径的文件);
<?php
$filename = 'test.txt';
if (unlink($filename)) {
echo "删除文件成功 $filename!\n";
} else {
echo "删除 $filename 失败!\n";
}
?>
检测文件属性函数
假设安装界面的网址是:install.php,安装的锁文件是install.lock。我们就可以检测install.lock文件是否存在。
<?php
if(file_exists('install.lock')){
echo '已安装,请不要再次进行安装';
exit;
}
?>
目录处理函数
1.读取某个路径的时候判断是否是文件夹
2.是文件夹的话,打开指定文件夹,返回文件目录的资源变量
3.使用readdir读取一次目录中的文件,目录指针向后偏移一次
4.使用readdir读取到最后,没有可读的文件返回false
5.关闭文件目录
<?php
//设置打开的目录是D盘
$dir = "d:/";
//判断是否是文件夹,是文件夹
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
//读取到最后返回false,停止循环
while (($file = readdir($dh)) !== false) {
echo "文件名为: $file : 文件的类型是: " . filetype($dir . $file) . "<br />";
}
closedir($dh);
}
}
?>
文件权限设置 chmod
<?php
//修改linux系统/var/wwwroot/某文件权限为755
chmod("/var/wwwroot/index.html", 755);
chmod("/var/wwwroot/index.html", "u+rwx,go+rx");
chmod("/somedir/somefile", 0755);
?>
文件路径函数
我们经常会遇到处理文件路径的情况。例如:
1.文件后缀需要取出来
2.路径需要取出名字不取目录
3.只需要取出路径名中的目录路径
4.或者把网址中的各个部份进行解析取得独立值
5.甚至是自己组成一个url出来
文件留言本
文件结构
index.php 展示输入框和留言内容
write.php 向message.txt写入数据
message.txt 存入聊天内容
<?php
//设置时区
date_default_timezone_set('PRC');
//读了内容
@$string = file_get_contents('message.txt');
//如果$string 不为空的时候执行,也就是message.txt中有留言数据
if (!empty($string)) {
//每一段留言有一个分格符,但是最后多出了一个&^。因此,我们要将&^删掉
$string = rtrim($string, '&^');
//以&^切成数组
$arr = explode('&^', $string);
//将留言内容读取
foreach ($arr as $value) {
//将用户名和内容分开
list($username, $content, $time) = explode('$#', $value);
echo '用户名为<font color="gree">' . $username . '</font>内容为<font color="red">' . $content . '</font>时间为' . date('Y-m-d H:i:s', $time);
echo '<hr />';
}
}
?>
<h1>基于文件的留言本演示</h1>
<form action="write.php" method="post">
用户名:<input type="text" name="username" /><br />
留言内容:<textarea name="content"></textarea><br />
<input type="submit" value="提交" />
</form>
文件存储时:
1、段与段之间进行了分割
2、内容与用户之前用一个特殊的符号进行了分割
写入留言至文件的代码:
<?php
//追加方式打开文件
$fp=fopen('message.txt','a');
//设置时间
$time=time();
//得到用户名
$username=trim($_POST['username']);
//得到内容
$content=trim($_POST['content']);
//组合写入的字符串:内容和用户之间分开,使用$#
//行与行之间分开,使用&^
$string=$username.'$#'.$content.'$#'.$time.'&^';
//写入文件
fwrite($fp,$string);
//关闭文件
fclose($fp);
header('location:index.php');
?>
学习来源:PHP语言基础知识(超详细)_php语言基础知识(超详细)_seaof0的博客-csdn博客_SeaOf0的博客-CSDN博客
各大php教学视频