2017.7.25
1、PHP包含/引用文件
服务器端包含 (SSI) 用于创建可在多个页面重复使用的函数、页眉、页脚或元素。
include (或 require)语句会获取指定文件中存在的所有文本/代码/标记,并复制到使用 include或 require 语句的文件中。
PHP include 和 require 语句
通过 include 或 require 语句,可以将 PHP 文件的内容插入另一个 PHP 文件(在服务器执行它之前)。
include 和 require 语句是相同的,除了错误处理方面:
- require 会生成致命错误(E_COMPILE_ERROR)并停止脚本;当文件被应用程序请求时。
- include 只生成警告(E_WARNING),并且脚本会继续执行;当文件不是必需的,且应用程序在文件未找到时应该继续运行时。
因此,如果您希望继续执行,并向用户输出结果,即使包含文件已丢失,那么请使用 include。
否则,在框架、CMS 或者复杂的 PHP 应用程序编程中,请始终使用 require 向执行流引用关键文件。这有助于提高应用程序的安全性和完整性,在某个关键文件意外丢失的情况下。
包含文件省去了大量的工作。这意味着您可以为所有页面创建标准页头、页脚或者菜单文件。然后,在页头需要更新时,您只需更新这个页头包含文件即可。
语法:include 'filename'; 或 require 'filename';
语法:include_once 'filename'; 或 require_once 'filename';//加上once不会重复引用
例子
假设我们有一个名为 "vars.php" 的文件,其中定义了一些变量:
<?php $color='银色的'; $car='奔驰轿车'; ?>
然后,如果我们引用这个 "vars.php" 文件,就可以在调用文件中使用这些变量:
<?php include 'vars.php';//引用路径为相对路径:如果在同一个文件夹下,则可直接引用,如本例 echo "我有一辆" . $color . $car "。"; ?>
2、PHP文件处理
fopen() 函数用于在 PHP 中打开文件。注释:如果 fopen() 函数无法打开指定文件,则返回 0 (false)。
打开文件
fopen() 函数用于在 PHP 中打开文件。
此函数的第一个参数含有要打开的文件的名称,第二个参数规定了使用哪种模式来打开文件:
<html> <body> <?php $file=fopen("welcome.txt","r");//文件名,打开模式 ?> </body> </html>
文件可能通过下列模式来打开:#+,带有加号表示,同时拥有了读写功能
模式 | 描述 |
---|---|
r | 只读。在文件的开头开始。 |
r+ | 读/写。在文件的开头开始。 |
w | 只写。打开并清空文件的内容;如果文件不存在,则创建新文件。 |
w+ | 读/写。打开并清空文件的内容;如果文件不存在,则创建新文件。 |
a | 追加。打开并向文件末尾进行写操作,如果文件不存在,则创建新文件。 |
a+ | 读/追加。通过向文件末尾写内容,来保持文件内容。 |
x | 只写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误。 |
x+ | 读/写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误。 |
实例
如果 fopen() 函数不能打开指定的文件,下面的实例会生成一段消息:
<html> <body> <?php $file=fopen("welcome.txt","r") or die("Unable to open file!");//输出引号中的话后会退出此文件 ?></body> </html>
关闭文件
fclose() 函数用于关闭打开的文件:
<?php $file = fopen("test.txt","r"); //执行一些代码 fclose($file); ?>
检测文件末尾(EOF)
feof() 函数检测是否已到达文件末尾(EOF)。
在循环遍历未知长度的数据时,feof() 函数很有用。
注释:在 w 、a 和 x 模式下,您无法读取打开的文件!
逐行读取文件
fgets() 函数用于从文件中逐行读取文件。
注释:在调用该函数之后,文件指针会移动到下一行。
实例
下面的实例逐行读取文件,直到文件末尾为止:
<?php $file = fopen("welcome.txt", "r") or exit("无法打开文件!"); // 读取文件每一行,直到文件结尾 while(!feof($file))//如果没有到达文件末尾,进入循环 { echo fgets($file). "<br>"; } fclose($file); ?>
逐字符读取文件
fgetc() 函数用于从文件中逐字符地读取文件。
注释:在调用该函数之后,文件指针会移动到下一个字符。
实例
下面的实例逐字符地读取文件,直到文件末尾为止:
<?php $file=fopen("welcome.txt","r") or exit("无法打开文件!"); while (!feof($file)) { echo fgetc($file); } fclose($file); ?>
小计一笔:可以从数据库的多个个表中读取数据,通过array_merge()函数 把获得的数组类型的数据进行合并,使之成为一个数组,进行后续其他处理,重命名......。
if($_SESSION["account"]==$v)//通过访问2次数据库,并且合并所得数据,一次json返回 { /**/ //首先保证赛事编码是唯一的 $sql = selectFrom1($mysqli,$sql,"s",$_GET["eventId"]);//owner_user $sql = "select marathon_name,eventId,year,bib_format from marathon_info where eventId = ?"; $stmt = $mysqli->prepare($sql); $stmt->bind_param("s",$_GET["eventId"]);//修改$_POST["eventId"] $stmt->execute(); $result_events = $stmt->get_result(); //获取所有数据 $data_events = $result_events->fetch_all(MYSQLI_ASSOC); // echo '<hr />'; // var_dump($data_events); # 3.根据请求字段,查询数据库 $sql = "SELECT account FROM racepower_user_info.photographer_accounts where belongToUser = ?";//表名,字段改变 $data = selectFrom1($mysqli,$sql,"s",$_SESSION["account"]);//数据库,语句,类型,变量 //修改合并两个数据库的数据 $result=(array_merge($data_events,$data));// $cd=count($result); /**/ for($i=0;$i<$cd;$i++) { if($result[$i][account]) $result[$i][allow_photographer]=$result[$i][account]; unset($result[$i][account]); } // var_dump($result); // echo '<hr />'; $jsonString = json_encode($result); echo "{\"events\":".$jsonString."}";
整合自W3school和菜鸟教程。