用PHP即时将行插入文件中

问题描述

| 我想让我的用户下载一个.php文件。 每个文件对于一个用户来说都是不同的: 在第20行,我定义了一个等于用户ID的变量。 为此,我尝试了以下操作:复制原始文件。读取它,直到19行(
fgets
),然后
fputs
PHP行,然后提供要下载的文件。 问题是,该行不是在第19行之后插入,而是在.php文件的末尾插入。这是代码:
if (is_writable($filename)) {

    if (!$handle = fopen($filename,\'a+\')) {
         echo \"Cannot open file ($filename)\";
         exit;
    }

    for ($i = 1; $i <= 19; $i++) {
        $offset = fgets($handle);
    }

    if (fwrite($handle,$somecontent) === FALSE) {
        exit;
    }

    fclose($handle);
}
你会怎么做 ?     

解决方法

        fopen()中的追加模式
+a
将句柄的指针放在文件末尾。您的fgets()循环将失败,因为在文件末尾没有任何可读取的内容。您基本上要进行19次无操作。然后,fwrite将按预期在文件末尾输出新值。 要进行插入,您需要将“ 4”开头的句柄,然后进行fgets()循环。 但是,如果您只是想让人们获得此修改后的文件,为什么还要麻烦做“打开文件,浏览,写入更改,提供文件”?这会在您的系统上留下大量重复的记录。更好的方法是将文件分为两部分,然后您可以执行简单的操作:
readfile(\'first_part.txt\');
echo \"The value you want to insert\";
readfile(\'last_part.txt\');
这样省去了您每次保存\'new \'文件的麻烦。这也将允许任意长度的插入。您的fwrite方法可能会破坏文件的后续部分。例如您扫描以偏移\“ 10 \”并写出4个字节,它将替换原始文件中该位置的原始4个字节。在某个时候,它可能会变成5个字节的输出,现在您已经在原始文件中浪费了一个字节,并且文件可能已损坏。     ,        a +模式表示: \'a + \'开放供阅读和写作;将文件指针放在文件末尾。如果该文件不存在,请尝试创建它。 你可能想要r + \'r + \'开放供阅读和写作;将文件指针放在文件的开头。     ,        将所需的代码放在一个字符串变量中。您想要自定义代码的位置将有%s的位置。之后,只需使用php MIME类型响应即可。 例如;
$phpCode = \"if (foo == blah) { lala lala + 4; %s  = 5; }\",$user_specific_variable;
header(\'Content-type: text/php\');
echo $phpCode; 
瞧 注意:也许哑剧类型不正确,我在这里是在说话。     ,        我认为与其以\“ a + \”模式打开文件,不应该以\“ r + \”模式打开文件,因为\“ a \”总是附加在文件后面。但是我认为写操作总会覆盖您当前的数据。因此,这个想法是,您需要从打算写入EOF的位置开始缓冲文件。然后添加行,然后添加缓冲的行。 另一种方法可能是在您的PHP文件中保留一些模式,例如######。然后,您可以: 1.复制原始PHP脚本 2.使用file_get_contents()将完整的PHP脚本读入单个变量,即$ fileContent。 3.使用str_replace()函数将$ fileContent中的######替换为所需的用户ID 4.以“ a”模式打开复制的PHP脚本,然后将$ fileContent重写为该脚本。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...