fwrite读写文件时,如果写2行fwrite,是做一次操作?还是做了2次操作?

hgwyl 2019-08-07 11:43:29
先上代码,如下
//指定文件
$TxtFileName = "test04a.php";
//以读写方式打写指定文件,如果文件不存则创建
$TxtRes=fopen($TxtFileName,"w");
fwrite ($TxtRes,"111\n");
fwrite ($TxtRes,"222");
fclose ($TxtRes);//关闭指针

其中,写了2行fwrite
fwrite ($TxtRes,"111\n");
fwrite ($TxtRes,"222");

是为了代码更清晰可读
如果按照代码的意思,就是做了2次操作?(如果有50行,就做50次操作?浪费资源?)
还是PHP会智能一点,只做了1次fwrite操作?
(不懂怎么测试……)
...全文
993 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
廖展程 2019-10-12
  • 打赏
  • 举报
回复
可以先拼接好,一次性写进去
hgwyl 2019-10-08
  • 打赏
  • 举报
回复
楼上各位,不好意思,很久没结贴。
先把贴结了,后面慢慢研究吧。
于小九 2019-10-08
  • 打赏
  • 举报
回复
您好,c的fwrite是先写入的缓冲区后再写入的文件,所以php也是如此的,下面是多次测试后的结果: 初始: 347888B 使用: 348352B 释放: 348016B 峰值: 381992B 已用:464B,n次fwrite后其占用均为464B,故证明php中fwrite函数也是先写入缓冲区后再写入文件
  • 打赏
  • 举报
回复
把所有的字符串拼接起来 , 赋值个变量 (不适用变量也可以) , 再进行写操作
下雨的声音丶 2019-08-19
  • 打赏
  • 举报
回复
引用 7 楼 hgwyl 的回复:
[quote=引用 6 楼 phpxiazai01 的回复:] $fp = fopen('a.txt', 'r'); $fp2 = fopen('b.txt', ab); while(!feof($fp)){ $str = fgets($fp); fwrite($fp2, $str."\r\n"); } fclose($fp); fclose($fp2);
大兄弟,这个…… 我是个新手,代码都是要逐个逐个看和想,没太看懂原理……[/quote] 大胸弟,你都活跃这论坛这么久了还是新手?
weixin_42218739 2019-08-19
  • 打赏
  • 举报
回复
你可以直接拼接字符串 最后执行一次写就行了 我就不贴代码了 思路就是 $a="this is first words \n"; $b="this is second words" fwrite ($TxtRes,print_r($a.$b)); 如果想把符号打进去 就用单引号 或者加\转义 你按照这个思路试一试
phpxiazai01 2019-08-18
  • 打赏
  • 举报
回复
引用 7 楼 hgwyl 的回复:
[quote=引用 6 楼 phpxiazai01 的回复:] $fp = fopen('a.txt', 'r'); $fp2 = fopen('b.txt', ab); while(!feof($fp)){ $str = fgets($fp); fwrite($fp2, $str."\r\n"); } fclose($fp); fclose($fp2);
大兄弟,这个…… 我是个新手,代码都是要逐个逐个看和想,没太看懂原理……[/quote] $fp = fopen('a.txt', 'r');//以读的方式打开文件a $fp2 = fopen('b.txt', 'ab');//以写的方式打开文件b,文件没有会创建,并且写入指向文件最后面,前面的内容不会被清空,ab的b指的是二进制模式 while(!feof($fp)){//判断是否到达文件a的末尾,就是有没有读完,没有读完就继续循环获取文件内容 $str = fgets($fp);//获取一行内容 fwrite($fp2, $str."\r\n");//写到b文件 } //完成关闭文件句柄 fclose($fp); fclose($fp2); 你写几次fwrite就执行几次,如果是以w打开的文件,重新请求,你前面写的内容会被清空, 你要只想写一次fwrite,就带上换行符,拼接成一个字符串,再写入~
hgwyl 2019-08-18
  • 打赏
  • 举报
回复
引用 6 楼 phpxiazai01 的回复:
$fp = fopen('a.txt', 'r');
$fp2 = fopen('b.txt', ab);

while(!feof($fp)){
$str = fgets($fp);

fwrite($fp2, $str."\r\n");
}

fclose($fp);
fclose($fp2);


大兄弟,这个……
我是个新手,代码都是要逐个逐个看和想,没太看懂原理……
phpxiazai01 2019-08-17
  • 打赏
  • 举报
回复
$fp = fopen('a.txt', 'r'); $fp2 = fopen('b.txt', ab); while(!feof($fp)){ $str = fgets($fp); fwrite($fp2, $str."\r\n"); } fclose($fp); fclose($fp2);
hgwyl 2019-08-07
  • 打赏
  • 举报
回复
另外,额外问一个细节,怎么将双引号写入文件?
fwrite ($TxtRes,"11(这里生成个双引号)1\n");
智商众筹 2019-08-07
  • 打赏
  • 举报
回复
linux内核的读写文件系统调用支持设置缓冲区,也就是C语言层面可以灵活控制 php的fwrite函数应该是不带缓冲的,需要你自己拼接字符串然后统一写入 但拼接完一口气写入会占用大量内存,因为整个字符串在写入前都要在内存待着 可以每次拼接后判断一下长度,满足一定值就写入一次,内核缓冲区也是这么干的
YYYYolanda 2019-08-07
  • 打赏
  • 举报
回复
引用 3 楼 hgwyl 的回复:
[quote=引用 2 楼 YYYYolanda 的回复:] 调用两次fwrite函数,当然是执行了两次。
那该写代码可以让代码清晰可读一些,又只执行一次操作?[/quote] 先将字符串拼接
hgwyl 2019-08-07
  • 打赏
  • 举报
回复
引用 2 楼 YYYYolanda 的回复:
调用两次fwrite函数,当然是执行了两次。


那该写代码可以让代码清晰可读一些,又只执行一次操作?
YYYYolanda 2019-08-07
  • 打赏
  • 举报
回复
调用两次fwrite函数,当然是执行了两次。

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧