如何使用php将echo中的所有变量结果保存到txt文件中?

如何使用php将echo中的所有变量结果保存到txt文件中?,php,Php,我编写了一个php脚本来生成随机标记,我想将这些标记输出到一个.txt文件中 代码如下: do { $token = bin2hex(random_bytes(2)); echo("token: $token"); $myfile = fopen("output.txt", "w+") or die("Unable to open file!"); fwrite($myfile,

我编写了一个php脚本来生成随机标记,我想将这些标记输出到一个.txt文件中

代码如下:

do {

    $token = bin2hex(random_bytes(2));

    echo("token: $token");

    $myfile = fopen("output.txt", "w+") or die("Unable to open file!");
    fwrite($myfile, $token);
    fclose($myfile);

} while ($token != "e3b0");

它回显多个标记,直到echo=e3b0,但当我尝试在txt文件上写入结果时,它只写入“e3b0”,这是将“echo”的所有结果写入txt文件的一种方式吗?

编辑:在最初的OP问题中从未询问效率。这篇文章正在被编辑以提高效率,即不需要重新打开和关闭文件

使用
w+
将始终将文件指针放在文件的开头,并在此过程中截断文件。因此,您总是以最后写入的值结束

fopen w+
上的
php.net

Open for reading and writing; place the file pointer at the beginning of the file
and truncate the file to zero length. If the file does not exist, attempt to create it.
使用现有代码,解决方案如下:

fwrite($myfile, $token . "\n");
$myfile=fopen(“output.txt”,“a+”)或die(“无法打开文件!”)

fclose($myfile)

其中
a+
在同一文档中表示:

Open for reading and writing; place the file pointer at the end of the file. 
If the file does not exist, attempt to create it. In this mode, fseek() 
only affects the reading position, writes are always appended.
资料来源:

修正案:

正如@andreas所提到的,在循环中重复打开和关闭文件是没有必要的(也没有效率)。由于您正在追加,因此可以在循环开始之前使用
a+
打开它一次;循环结束后关闭它

就在写入文件的令牌之间使用分隔符char而言,回车符(换行符)是一个不错的选择。通过这种方式,可以减少以编程方式读取文件时必须编程的解析量。为此,您的写入可以按如下方式编写:

fwrite($myfile, $token . "\n");

在我看来,做这件事最有效的方法就是每件事都做足够的次数。 这意味着我们必须循环并生成代码,但我们只需要向文件写入一次,回音也是如此

$code = "start value";
while ($code != "e3b0"){
    $arr[] = $code = bin2hex(random_bytes(2));
}

echo $str = implode("\n", $arr);
file_put_contents("output.txt", $str);
这是做任何事情都只需要足够的次数,以及更优化的代码。
但如果您在浏览器中运行此命令,则不会在屏幕上的单独行中输出这些命令,仅在txt文件中输出。但是如果您打开源代码,它将在单独的行中。

这是因为我在内爆中没有使用br标记。

您是只想写入文件,还是还想将其回显到浏览器/客户端?而($token!=“e3b0”)很可怕,因为它有可能在任何随机时刻循环很长时间。用
文件内容替换
echo
。@incredible现在它只在浏览器中循环,im使用xampp本地服务器,在浏览器上显示所有生成的令牌,我希望此结果保存在txt文件中,关于循环,这并不重要,我只是为了我自己,所以“额外的时间”不会真的困扰我。@user3783243文件的内容与fopen()、fwrite()和fclose()相同,对吗?如果我用它替换echo,就会发生这种情况“解析错误:语法错误,C:\xampp\htdocs\random\u bytes\index.php中意外的“$myfile”(T_变量),在第14行”我试图删除fopen/fwrite/fclose,并用file\u put\u内容替换它,但它仍然在txt文件中只显示一个标记,以便在每次迭代时打开和关闭文件?真的吗?谢谢,成功了!如何在每个令牌之间添加任何类型的“空格”?就像一个“-”,它输出所有的值,但是所有的值加在一起,就像它是一个单一的值一样,谢谢你的回答@安德烈亚斯:还有更优化的方法吗?@ChristopherCalson有更优化的方法吗?是的,见下面的答案。