在PHP中,如何实现写入或创建另1个PHP文件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在PHP中,如何实现写入或创建另1个PHP文件?相关的知识,希望对你有一定的参考价值。

我想实现,用php写入另1个PHP,另1个PHP的文件格式是固定的,但部分内容是变量,有多行内容~

谁能给个范例?
具体来说,我在我的网站上安装了1个PHP的小游戏,游戏里敌人的参数是保存在一个PHP文件里的~
我想让实现每次登陆,敌人的参数会有细微的不同~
起先我直接在保存参数的PHP文件里用rand函数~
但是我发现游戏在读取和实际使用参数的时候,会分别读取参数的PHP文件,导致显示出来的参数和实际的参数不同~
因此我的目的就是,用A PHP文件产生参数,并覆盖B PHP文件。然后让游戏的主体程序读取B PHP文件。
最好顺便给1个让A PHP文件每24小时才产生一次的方法……

来个实际的,我如果找的到就不来这里了

    使用fopen,fwrite,fclose 方法

    简单的例子如下<?php
    $afile = fopen("afile.php", "w") or die("Unable to open file!");
    $txt = "Hi,\\n";
    fwrite($myfile, $txt);
    $txt = "success\\n";
    fwrite($afile, $txt);
    fclose($afile);
    ?>

    关键是写文件的地方,必须要有写的权限。尤其是linux服务器。 可用 chmod 方法 来更改权限。

参考技术A $data = <<<EOT
<?php
phpinfo();

EOT;

file_put_content('phpinfo.php', $data);

参考技术B $content="内容";//要写入B的内容
$file='b.php';
$r=@chmod($file,0777);
$hand=file_put_contents($file,$content);本回答被提问者采纳
参考技术C PHP写PHP好像还不可以吧。
你的游戏应该有个开始的按钮或者链接吧,在装参数的PHP文件里声明一个逻辑变量A,每当有人点击游戏开始的时候就 让A=1, 再定义一个函数用于给参数赋值:
if(检测到玩家点击开始)

$A=1;

function newRand()

global $A;
if($A)

$A=0;
global $B;
$B=rand(1,33);
return $B;

else

return $B;


$height=newRand();/*$height为敌人的身高参数.*/
这样每次开始游戏的参数都不一定相同,但是游戏读取的数据和实际运行的数据又是一样的.我刚开始学PHP。 如果说错了 还请各位多多包含,不要笑我哈。
参考技术D 网上好多啊

创建ini文件,在PHP中写入值

【中文标题】创建ini文件,在PHP中写入值【英文标题】:create ini file, write values in PHP 【发布时间】:2010-11-19 02:18:56 【问题描述】:

我找不到一种方法可以轻松地让我创建一个新文件,将其视为一个 ini 文件(不是 php.ini 或类似的...每个用户的单独 ini 文件),并使用 PHP 创建/删除值。 PHP 似乎没有提供简单的方法来创建 ini 文件和读取/写入/删除值。到目前为止,这一切都只是“读取”——与创建条目或操作键/值无关。

【问题讨论】:

当您说“每个用户”时,您是什么意思?每次使用 PHP 应用程序? 为什么每个用户都需要一个 .ini 文件?这种类型的信息不应该存储在数据库中吗? @netrox,我认为 Peter Bailey 理解了您所说的用户的意思 - 主机上的用户名(用户名 apache 在其下运行或其他),或者您的应用程序的最终用户(即在浏览器中访问它的人)? 顺便说一句 - 欢迎来到 ***.com - 第一个问题很好! 如果必须将其存储在文件或其他单字段字符串中 - 您可能需要考虑使用 JSON:json_encodejson_decode。更灵活(布尔值、整数、数组、对象等)和移动性更强(现在许多语言都有 JSON 编码器/解码器)。 【参考方案1】:

从 PHP 文档的 cmets 中找到以下代码 sn-p:

function write_ini_file($assoc_arr, $path, $has_sections=FALSE)  
    $content = ""; 
    if ($has_sections)  
        foreach ($assoc_arr as $key=>$elem)  
            $content .= "[".$key."]\n"; 
            foreach ($elem as $key2=>$elem2)  
                if(is_array($elem2)) 
                 
                    for($i=0;$i<count($elem2);$i++) 
                     
                        $content .= $key2."[] = \"".$elem2[$i]."\"\n"; 
                     
                 
                else if($elem2=="") $content .= $key2." = \n"; 
                else $content .= $key2." = \"".$elem2."\"\n"; 
             
         
     
    else  
        foreach ($assoc_arr as $key=>$elem)  
            if(is_array($elem)) 
             
                for($i=0;$i<count($elem);$i++) 
                 
                    $content .= $key."[] = \"".$elem[$i]."\"\n"; 
                 
             
            else if($elem=="") $content .= $key." = \n"; 
            else $content .= $key." = \"".$elem."\"\n"; 
         
     

    if (!$handle = fopen($path, 'w'))  
        return false; 
    

    $success = fwrite($handle, $content);
    fclose($handle); 

    return $success; 

用法:

$sampleData = array(
                'first' => array(
                    'first-1' => 1,
                    'first-2' => 2,
                    'first-3' => 3,
                    'first-4' => 4,
                    'first-5' => 5,
                ),
                'second' => array(
                    'second-1' => 1,
                    'second-2' => 2,
                    'second-3' => 3,
                    'second-4' => 4,
                    'second-5' => 5,
                ));
write_ini_file($sampleData, './data.ini', true);

祝你好运!

【讨论】:

if (!fwrite($handle, $content)) 之后,文件句柄应该被关闭。 另外在不使用section的时候代码有错误,变量$key2应该是$key 这不是官方解决方案,只是您的评论不是堆栈溢出的官方评论。 @MartinKonecny 是否暗示非官方解决方案中的错误是可以的? @TomášZato 不,这意味着他不应该说这是官方代码。据我所知,这可能是错误的。他从 cmets 部分抓起它。【参考方案2】:

PEAR 有两个(经过单元测试的)包可以完成您渴望的任务:

Config_Lite - 如果您只想要 .ini 文件,这是理想的选择 Config - 还读取 .php.xml 文件

我宁愿使用经过良好测试的代码,也不愿自己编写代码。

【讨论】:

【参考方案3】:

我不能保证它工作得有多好,但是在parse_ini_file 的文档页面上,有一些建议可以实现与parse_ini_file()(即write_ini_file,它不是标准的PHP 函数)相反的功能。

您可以使用write_ini_file 将值发送到文件,使用parse_ini_file 将它们读回 - 修改parse_ini_file 返回的关联数组,然后使用write_ini_file 将修改后的数组写回文件.

这对你有用吗?

【讨论】:

【参考方案4】:

在这部分代码中:

else  
    foreach ($assoc_arr as $key=>$elem)  
        if(is_array($elem)) 
         
            for($i=0;$i<count($elem);$i++) 
             
                $content .= $key2."[] = \"".$elem[$i]."\"\n"; 
             
         
        else if($elem=="") $content .= $key2." = \n"; 
        else $content .= $key2." = \"".$elem."\"\n"; 
     
 

$key2 必须替换为 $key 否则你会在你的 .ini 文件中找到空键

【讨论】:

【参考方案5】:

基于上述答案,我编写了这个可能有用的课程。适用于 PHP 5.3,但可以轻松适应以前的版本。

class Utils
    
        public static function write_ini_file($assoc_arr, $path, $has_sections)
        
            $content = '';

            if (!$handle = fopen($path, 'w'))
                return FALSE;

            self::_write_ini_file_r($content, $assoc_arr, $has_sections);

            if (!fwrite($handle, $content))
                return FALSE;

            fclose($handle);
            return TRUE;
        

        private static function _write_ini_file_r(&$content, $assoc_arr, $has_sections)
        
            foreach ($assoc_arr as $key => $val) 
                if (is_array($val)) 
                    if($has_sections) 
                        $content .= "[$key]\n";
                        self::_write_ini_file_r(&$content, $val, false);
                     else 
                        foreach($val as $iKey => $iVal) 
                            if (is_int($iKey))
                                $content .= $key ."[] = $iVal\n";
                            else
                                $content .= $key ."[$iKey] = $iVal\n";
                        
                    
                 else 
                    $content .= "$key = $val\n";
                
            
        
    

【讨论】:

从 PHP7 开始,这行 self::_write_ini_file_r(&amp;$content, $val, false) 应该是 self::_write_ini_file_r($content, $val, false)【参考方案6】:

我用这个,它似乎可以工作

function listINIRecursive($array_name, $indent = 0)

    global $str;
    foreach ($array_name as $k => $v)
    
        if (is_array($v))
        
            for ($i=0; $i < $indent * 5; $i++) $str.= " "; 
            $str.= " [$k] \r\n";
            listINIRecursive($v, $indent + 1);
        
            else
        
            for ($i=0; $i < $indent * 5; $i++) $str.= " "; 
            $str.= "$k = $v \r\n";
        
    
 

它返回要写入 .ini 文件的文本

【讨论】:

如果 $array_name 内部包含多维数组,您的 sn-p 将失败。也就是说,如果父数组的深度为 3 或更大。

以上是关于在PHP中,如何实现写入或创建另1个PHP文件?的主要内容,如果未能解决你的问题,请参考以下文章

php怎么对文件内容进行增删查改?

创建ini文件,在PHP中写入值

如何用自定义函数文件对另一个php里的函数重写

如何让这个 php 脚本在 data.txt 中添加一行或让它写入不同的

如何用php把一个未知结构的数组写入到一个文本文件,

php将数组或对象原样写入或保存到文件有三种方法可以实现