/*下面的程序是我在一个程序中用到的方法,因为程序当中牵扯到的东西太多也不好描述,所以我用下面三个php文件(在同一个目录下面)
举个例子方面理解,请问各位为什么生成的a.txt的文本文件当中是空的啊,如何解决这个问题啊?
*/
//a.php内容如下:
<?php
function a()
{
ob_start();
include("b.php");
file_put_contents("a.txt",ob_get_contents());
ob_end_clean();
}
a();
?>
//b.php内容如下:
<?php
include("c.php");
c();
?>
//c.php内容如下:
<?php
$test = "中国人";
function c()
{
global $test;
echo $test;
}
?>

解决方案 »

  1.   

    ob_start();
    include("b.php");
    $data = ob_get_contents();
    ob_clean();
    file_put_contents("a.txt",$data);      
          
                 
                 
    ---------------完美的签名线-----------------------
    网页游戏开发第一门户 http://dev.web863.com
      

  2.   

    顺序问题
    在c.php文件中
    先使用了$test变量,然后又将这个变量设为了全局变量,再输出,等于没有使用$test变量。
    把$test赋值这句,放到变量定义之后就可以了
    function c()
    {
        global $test;
        $test = "中国人";
        echo $test;
    }
      

  3.   

    //c.php内容如下: 
    <?php 
    $test = "中国人";
     function c( $test ) 
    {
     global $test;
     echo $test = $test; 

    ?>
      

  4.   

    $test是函数a()局部变量而不是全局变量,要改成以下那样//a.php内容如下:
    <?php
    function a()
    {
        ob_start();
        include("b.php");
        file_put_contents("a.txt",ob_get_contents());
        ob_end_clean();
    }
    a();
    ?>
    //b.php内容如下:
    <?php
        include("c.php");    
        c($test);  /*这边传入参数*/
    ?>
    //c.php内容如下:
    <?php
    $test = "中国人";
    function c($test)
    {
        echo $test;
    }
    ?>
      

  5.   

     //c.php内容如下:
    function c()
    {
        global $test;
        $test = "中国人";
        echo $test;
    }
      

  6.   


    //c函数改成这样function c()
    {
        echo $GLOBALS['test'];
    }
      

  7.   


    file_put_contents("a.txt",ob_get_contents());此处理之前,
    先检查一下ob_get_contents输出内容是什么。
    还有就是执行到这一部的时候,屏幕是否已经输出了要添加的内容?
      

  8.   

    测过了,正解$test是函数a()局部变量而不是全局变量估计是引用用时,如果是函数,则加载函数
    如果是变是,则包含变量
      

  9.   


    手册说:当一个文件被包含时,其中所包含的代码继承了 include 所在行的变量范围。从该处开始,调用文件在该行处可用的任何变量在被调用的文件中也都可用。不过所有在包含文件中定义的函数和类都具有全局作用域。 
    如果 include 出现于调用文件中的一个函数里,则被调用的文件中所包含的所有代码将表现得如同它们是在该函数内部定义的一样。所以它将遵循该函数的变量范围。