我有以下记事本文件;
dbName:
tableName:
numberOfFields:
我正在尝试编写一个php应用程序,它将dbName的值分配给$ dbName,tableName分配给$ tableName,将numberOfFields分配给$ numFields。
我的代码是:
$handle = @fopen("config.txt", "r");
if ($handle) {
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
list($dbName, $tableName, $numFields) = explode(":", "$buffer");
}
fclose($handle);
}
但是,“:”不起作用,因为dbName和表名之间存在换行符。如何爆炸$ buffer,在记事本文件中保留换行符?
谢谢。
答案 0 :(得分:4)
查看file
功能。它负责打开和读取文件,并从文件中返回一行数组。然后,您可以遍历数组并分别对每一行进行操作。
答案 1 :(得分:1)
你可以这样做:
$data=file_get_contents("file");
$s = preg_split("/\n\n+/m", $data);
print_r($s);
答案 2 :(得分:0)
你可以使用chr($ INT);用于查找爆炸调用中的换行符。
您可以在此处找到有关chr功能的更多信息:
http://php.net/manual/en/function.chr.php
添加你可以找到换行符的ascii字符:
答案 3 :(得分:0)
fgets
只返回一行。 $buffer
无法同时拥有所有三个项目,因此分配给list()
是错误的。对于第一行,explode()
将返回一个包含两个项的数组:"dbName"
(冒号前的文本)和""
(冒号后的文本)。
答案 4 :(得分:0)
这是否有效:
list ($dbName, $tableName, $numFields) = explode (':', implode ('', file ('config.txt')));
答案 5 :(得分:0)
如果您确定行内容,并且文件不会任意增大:
1 <?php
2
3 $handle = @fopen("config.txt", "r");
4 if ($handle) {
5 $buffer = "";
6 while (!feof($handle)) {
7 $buffer = $buffer . trim(fgets($handle, 4096));
8 }
9 fclose($handle);
10
11 list($dbName, $tableName, $numFields) = explode(":", $buffer);
12 }
13
14 ?>
while循环将遍历所有行,并在删除空格后连接到同一缓冲区。这只留下以“:”分隔的内容。现在可以爆炸了。
正如Nicolas所写,feof一次只能获得一行,因此列表赋值需要在循环之外进行。