本例演示如何在本地读取远程文件的数据,运行结果如图11.16所示。
读取指定文件 显示文件内容
图11.16 读取远程文件
【操作步骤】
第1步,创建index.php,首先设计网页页面,然后创建一个表单,通过文本框提交要访问的远程文件的地址,最后获取表单中提交的远程文件路径,并通过header()函数跳转到read.php文件中,在该文件中完成对远程文件的读取操作。
<?php if(isset($_POST ['files']) && $_POST ['files']!=""){ $filenames=urlencode($_POST ['files']); header("Location: read.php?filename=$filenames"); } ?><!doctype html> <html> <head> <meta charset="utf-8"> </head> <body> <h2>访问远程文件</h2> <form name="form1" method="post" action="index.php"> <p>远程文件地址:<input name="files" type="text" id="files" size="40"> <br> (路径、文件名称必须是英文字符串)</p> <p> <input type="submit" value="提 交"> </p> </form> </body> </html>
第2步,创建read.php文件,获取header()函数传递的参数值,应用file()函数读取参数值中传递的远程文件,并通过foreach语句输出远程文件的内容。
<?php$filename = $_GET['filename'];
$arr = file ( $filename) ; //读取远程文件的内容 foreach ( $arr as $value ) { //循环输出数据 echo htmlspecialchars ( $value )."<br>"; } ?>
file()函数能够把整个文件读入一个数组中,其语法如下所示:
array file ( string $filename [, int $flags = 0 [, resource $context ]] )
参数说明如下:
- filename:文件的路径。
- flags:可选参数,可以是以下一个或多个常量:
- FILE_USE_INCLUDE_PATH:在include_path中查找文件。
- FILE_IGNORE_NEW_LINES:在数组每个元素的末尾不要添加换行符。
- FILE_SKIP_EMPTY_LINES:跳过空行。
- context:使用stream_context_create()函数创建的背景资源。
另外,使用file_get_contents()函数可以将整个文件读入一个字符串。其语法如下所示:
string file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = -1 [, int $maxlen ]]]] )
参数说明如下:
- filename:要读取的文件的名称。
- use_include_path:在PHP 5中file_use_include_path可以用来触发包括路径搜索。
- context:使用stream_context_create()函数创建的背景资源。如果不需要自定义context,可以用 NULL 来忽略。
- offset:读取文件流的起始偏移量。
- maxlen:读取数据的最大长度。默认是读取全部内容,直到文件结束。
【提示】
如果要访问远程文件,必须将配置文件php.ini中的参教allow_url_ fopen设置为开启。allow_url_ fopen参数默认是开启的,允许打开HTTP协议和FTP协议指定的远程文件,如果allow_url_ fopen设置off,则不允许打开远程文件,函数将返回FALSE。
严格地说,远程文件的访问功能有时是不被支持的,因为它涉及服务器中文件的安全问题,所以在多数的服务器中,allow_url_ fopen的值都是关闭的。