PHP语言基础学习笔记

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教学视频

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值