首页 > 编程技术 > php

php读取本地php文件源代码输出显示

发布时间:2016-11-25 14:59

下在看一个利用fopen,file_get_contents读取本地服务器中.php文件的代码并显示的一些方法总结

如我有两个文件a.php,b.php。

a.php文件中的语句是:

 代码如下 复制代码

<?php
echo “i am a.php”;
?>

现在,我需要在b.php文件显示文件a.php中的源代码,是源代码,如下:

 代码如下 复制代码

<?php
$a_code = file_get_contents(‘a.php’);
echo htmlspecialchars($a_code);//www.111cn.net
?>

重点即在此htmlspecialchars()函数,htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体。


再看一实例fopen()函数

 代码如下 复制代码

$file = fopen("a.php","r");

效果与上面也是一样的,当然如果只是要在a.php中显示b.php 我们直接使用inlucde()调用即可

 

 代码如下 复制代码
inlucde('a.php');

即可

如果是想读取远程服务器的.php文件,那么返回的是html内容了,这个不要问为什么否则大家都不写程序了。

在php中header()函数是很大的作用可以发送各种状态代码,也可以实现一些输出下载,下面我们一起来看看一些相关实例吧。

什么是头信息?
这里只作简单解释,详细的自己看http协议。
在 HTTP协议中,服务器端的回答(response)内容包括两部分:头信息(header) 和 体内容,这里的头信息不是HTML中的<head></head>部分,同样,体内容也不是<BODY>< /BODY>。头信息是用户看不见的,里面包含了很多项,包括:服务器信息、日期、内容的长度等。而体内容就是整个HTML,也就是你所能看见的全 部东西。

头信息有什么用呢?
头信息的作用很多,最主要的有下面几个:

1、跳转:当浏览器接受到头信息中的 Location: xxxx 后,就会自动跳转到 xxxx 指向的URL地址,这点有点类似用 js 写跳转。但是这个跳转只有浏览器知道,不管体内容里有没有东西,用户都看不到。

2、指定网页的内容: 同样一个XML文件,如果头信息中指定:Content-type: application/xml 的话,浏览器会将其按照XML文件格式解析。但是,如果头信息中是:Content-type: text/xml 的话,浏览器就会将其看作存文本解析。(浏览器不是按照扩展名解析文件的)

3、附件:不知道大家有没 有注意,有些时候在一些网站下载东西,点下载连接以后,结果浏览器将这个附件当成网页打开了,里面显示的都是乱码,这个问题也和头信息有关。有时候浏览器 根据Content-type 来判断是打开还是保存,这样有时就会判断错误(主要是网站设计者忘记写Content-type)。其实,还有一个可以来指定该内容为附件、需要保存,这 个就是:Content-Disposition: attachment; filename=”xxxxx”

在PHP中如何写?
1、跳转:

 代码如下 复制代码
header(“Location: http://www.example.com/”);

2、指定内容:

 代码如下 复制代码
header(‘Content-type: application/pdf’);

3、附件:

 代码如下 复制代码
header(‘Content-type: application/pdf’); // 指定内容格式
header(‘Content-Disposition: attachment; filename=”downloaded.pdf”‘); // 指定内容为附件
readfile(‘original.pdf’); // 打开文件,并输出

最后要提醒大家注意一点,所有头信息都必须在体内容之前,如果一旦有任何输出了的话,header函数写的头信息就没用了。比如,在文件最开头 的<?php 处,如果前面有空格或者有空行,那header函数就没用了(其实可以通过设置:output_buffer来解决,anyway),为什么这样,可以看 看HTTP协议,很简单。

 

 代码如下 复制代码
<?php
//200 正常状态
header('HTTP/1.1 200 OK');
 
// 301 永久重定向,记得在后面要加重定向地址 Location:$url
header('HTTP/1.1 301 Moved Permanently');
 
// 重定向,其实就是302 暂时重定向
header('Location: http://www.111cn.net/');
 
// 设置页面304 没有修改
header('HTTP/1.1 304 Not Modified');
 
// 显示登录框,
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Basic realm="登录信息"');
echo '显示的信息!';
 
// 403 禁止访问
header('HTTP/1.1 403 Forbidden');
 
// 404 错误
header('HTTP/1.1 404 Not Found');
 
// 500 服务器错误
header('HTTP/1.1 500 Internal Server Error');
 
// 3秒后重定向指定地址(也就是刷新到新页面与 <meta http-equiv="refresh" content="10;http://www.111cn.net/ /> 相同)
header('Refresh: 3; url=http://www.111cn.net/');
echo '10后跳转到http://www.111cn.net';
 
// 重写 X-Powered-By 值
header('X-Powered-By: PHP/5.3.0');
header('X-Powered-By: Brain/0.6b');
 
//设置上下文语言
header('Content-language: en');
 
// 设置页面最后修改时间(多用于防缓存)
$time = time() - 60; //建议使用filetime函数来设置页面缓存时间
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $time).' GMT');
 
// 设置内容长度
header('Content-Length: 39344');
 
// 设置头文件类型,可以用于流文件或者文件下载
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="example.zip"');
header('Content-Transfer-Encoding: binary');
readfile('example.zip');//读取文件到客户端
 
//禁用页面缓存
header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Pragma: no-cache');
 
//设置页面头信息
header('Content-Type: text/html; charset=iso-8859-1');
header('Content-Type: text/html; charset=utf-8');
header('Content-Type: text/plain');
header('Content-Type: image/jpeg');
header('Content-Type: application/zip');
header('Content-Type: application/pdf');
header('Content-Type: audio/mpeg');
header('Content-Type: application/x-shockwave-flash');
//.... 至于Content-Type 的值 可以去查查 w3c 的文档库,那里很丰富
?>

例,文件下载

 代码如下 复制代码

header("Content-Type: application/vnd.ms-excel; charset=UTF-8");
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment;filename=".$title .".xls ");
header("Content-Transfer-Encoding: binary ");

php中变量可以不定义的但是我们如果不对错误进行一些处理在使用未定义的变量时会提示Undefined variable错误了,下面我给大家举几个实例。

PHP错误提示“Undefined variable”:变量未定义,如果你在php.ini设置中屏蔽了Notice这个等级的提示那么他就不会显示任何提示了,但是为了程序的严谨性考虑,我们尽量避免任何警告、错误等明显的程序缺陷。

例一:class.Chinese.php中以下代码就会出错“Undefined variable”:

 代码如下 复制代码

for ( $i=0; $i<strlen($hexdata); $i+=2 )
 $bindata.=chr(hexdec(substr($hexdata,$i,2)));

正确的写法应该是:

 代码如下 复制代码

$bindata='';
for ( $i=0; $i<strlen($hexdata); $i+=2 )
 $bindata.=chr(hexdec(substr($hexdata,$i,2)));

例二:以下代码也会出错“Undefined variable”:

 代码如下 复制代码

$sl = "zh-CN";
$tl = "en";
function app_out($c,$gbk){
 $data = app_get_translate($c,$sl,$tl);
 $out = str_replace($c,$data,$c);
 return app_js_out($out,$gbk);
}

正确的写法应该是:

 代码如下 复制代码

$sl = "zh-CN";
$tl = "en";
function app_out($c,$gbk){
 global $sl,$tl; //将此函数体内的这两个变量定义为全局变量,以便使用开头设定的值
 $data = app_get_translate($c,$sl,$tl);
 $out = str_replace($c,$data,$c);
 return app_js_out($out,$gbk);
}


本来php是不需要定义变量的,但是出现这种情况应该怎么办呢?

只要在C:WINDOWS找出php.ini的

  在php.ini中的302行 error_reporting = E_ALL

  修改成

  error_reporting = E_ALL & ~E_NOTICE再重启apache2.2就行了

解决方法:修改php.ini

  将: error_reporting = E_ALL

修改为:error_reporting = E_ALL & ~E_NOTICE

  如果什么错误都不想让显示,直接修改:

  display_errors = Off

  如果你没有php.ini的修改权限,可在php头部加入

  ini_set("error_reporting","E_ALL & ~E_NOTICE");

文件名:一律小写,单词间以下划线分隔,类名:采用首字母大写的驼峰命名方式 类中的方法名:采用首字母小写的驼峰方式命名 类中的私有方法和私有变量:以下划线开头 函数名(变量名):全小写,单词间以下划线分隔

下面具体介绍

Θ 类文件都以.class.php为后缀,使用驼峰法命名,并且首字母大写,例如 Pay.class.php;
Θ 类名和目录_文件名一致。例如:类名Zend_Autoloader的目录是Zend/Autoloader.class.php;
Θ 函数的命名使用小写字母和下划线的方式。例如:get_client_ip;
Θ 方法的命名使用驼峰法,首字母小写或者使用下划线”_”,例如listComment(),_getResource(),通常下划线开头的方法属于私有方法;
Θ 属性的命名使用驼峰法,首字母小写或者使用下划线”_”,如$username,$_instance,通常下划线开头的属性属于私有属性;
Θ 常量以大写字母和下划线”_”命名,如”HOME_URL”;

理解一下消化一下:

1.缩进及行的长度

缩进4个空格,而不是tab(有些编辑器可以配置一个tab代表多个空格,注意是空格);每行保持大约75-85个字符的长度

2.控制结构

这个部分最容易忽略,也是影响代码美感最重要的方面,例子很详细了,受益匪浅。

 代码如下 复制代码

<?php
if ((condition1) || (condition2)) {
    action1;
} elseif ((condition3) && (condition4)) {
    action2;
} else {
    defaultaction;
}
?>
<?php
switch (condition) {
case 1:
    action1;
    break;

case 2:
    action2;
    break;

default:
    defaultaction;
    break;
}
?>

<?php

if (($condition1
    || $condition2)
    && $condition3
    && $condition4
) {
    //code here
}
?>

<?php

$a = $condition1 && $condition2
    ? $foo : $bar;

$b = $condition3 && $condition4
    ? $foo_man_this_is_too_long_what_should_i_do
    : $bar;
?>

3.函数调用

 代码如下 复制代码

<?php
$var = foo($bar, $baz, $quux);
$short         = foo($bar);
$long_variable = foo($baz);
?>

4.类名规范

 代码如下 复制代码

<?php
class Foo_Bar
{

    //... code goes here

}
?>

5.方法名规范(驼峰命名 )

 代码如下 复制代码

<?php
function fooFunction($arg1, $arg2 = '')
{
    if (condition) {
        statement;
    }
    return $val;
}
?>

6.数组定义规范

 

 代码如下 复制代码

<?php

$some_array = array(
    'foo'  => 'bar',
    'spam' => 'ham',
);
?>

7.注释

http://pear.php.net/manual/en/standards.sample.php

http://pear.php.net/manual/en/standards.header.php

8.Including Code

任何时候都应该采用include_once或者require_once

require_once 'foo.php'

文章是一个简单应用实例利用foreach遍历数组,然后给数组增加一些值进去了,方法比较简单,本文章后来介绍了直接使用array_push 来给数组增加值两者本人更喜欢后者一些。

例1

 代码如下 复制代码

foreach($list as &$value){
  
   if(isOnline($value['uid'])){
   $value['sid'] = '1';
  
   }else{
      $value['sid'] = '0';
         }
         $value['likes']='1';
   $sql="SELECT uid,likes,flower  FROM ".DB::table("dmember_member_count")." WHERE uid='".$value['uid']."'";
   $fff = DB::query($sql);
   $ffff = DB::fetch($fff);
   //print_r($ffff);
  
   $value['flower']=$ffff['flower'];
   $value['likes']=$ffff['likes'];
  }

例子 2,array_push() 函数

 代码如下 复制代码

<?php
$a=array("Dog","Cat");
array_push($a,"Horse","Bird");
print_r($a);
?>

输出:

Array ( [0] => Dog [1] => Cat [2] => Horse [3] => Bird )

例子 3
带有字符串键的数组:

 代码如下 复制代码

<?php
$a=array("a"=>"Dog","b"=>"Cat");
array_push($a,"Horse","Bird");
print_r($a);
?>

输出:

Array ( [a] => Dog [b] => Cat [0] => Horse [1] => Bird )

标签:[!--infotagslink--]

您可能感兴趣的文章: