脚本输出一个列表,必须将整个列表写入文件。为什么脚本只将最后一行写入.txt文件,而不是整个列表?如何修复脚本以将整个列表写入.txt文件?
$dir = "./radio/radio_stantion/";
$name = scandir($dir);
for($i=2; $i<=(sizeof($name)-1); $i++) {
$fopen=file( $dir.$name[$i] );
$line = $fopen[3];
$url = $fopen[2];
$radio_name = explode(") ", $line);
$radio_url = explode("//", $url);
$link = $radio_url[1];
$http = explode(":", $link);
$fff = $http[1];
$port = explode("/", $fff);
$zzz = $radio_name[1];
$finalname = preg_replace ("/[^a-zа-я\s]/si","",$zzz);
$sss = $finalname."-".$http[0]."-".$port[0];
--------------------------
A list is displayed:
FRESH FM IBADAN s4.voscast.com 8442
Bestfriend FM 178.32.62.172 8217
COOLfahrenheit 111.223.51.7 8005
RThess 37.59.32.115 6156
SmoothJazzcom 149.56.155.209 80
--------------------------
$f = fopen("../top_100/radio_top_100_v2.txt", "w");
fwrite($f, $sss);
fclose($f);
}
答案 0 :(得分:1)
我几乎不了解那里发生了什么,但问题是你在每次循环迭代时都是以写模式打开文件。
使用fopen
w
模式清除文件并写入文件:
'w'仅供写作;将文件指针放在开头 该文件并将文件截断为零长度。如果文件没有 存在,试图创造它。
你应该在循环之前fopen
文件。每次迭代fwrite
。循环后{和fclose
。
$f = fopen("../top_100/radio_top_100_v2.txt", "w");
for($i=2; $i<=(sizeof($name)-1); $i++) {
...
fwrite($f, $sss);
...
}
fclose($f);
答案 1 :(得分:0)
我认为你在每次迭代中都会覆盖以前的写入。尝试首先将所有内容写入字符串变量(并在每行附加\n
),然后将字符串内容一次写入文件。如果您正在处理大量数据,那么每次迭代都使用fwrite
是有意义的,所以不要消耗太多内存。
文件IO很昂贵,所以只打开文件一次,写一次,也应该提高性能。