PHP中的爆发函数

问题描述:

我有以下记事本文件;PHP中的爆发函数

dbName:    

tableName:  

numberOfFields: 

我试图写一个PHP应用程序,它DBNAME到$ DBNAME,表名至$表名的价值和numberOfFields赋给$ numFields。

我的代码是:

$handle = @fopen("config.txt", "r"); 
if ($handle) { 
    while (!feof($handle)) { 
     $buffer = fgets($handle, 4096); 
     list($dbName, $tableName, $numFields) = explode(":", "$buffer"); 
    } 
    fclose($handle); 
} 

然而,“:”因为有行数据库名和表名之间打破了不起作用。如何分解$ buffer,在记事本文件中保留换行符?

谢谢。

+0

我会建议几件事情 - 不使用'@'来压制警告或错误,并且使用file_get_contents或file()而不是fopen。 – JAL 2010-01-21 01:24:59

+0

注意,谢谢=) – user254688 2010-01-21 03:00:07

看一看的file功能。它负责打开和读取文件,并从文件返回一行数组。然后您可以遍历数组并在每一行上单独运行。

http://us.php.net/manual/en/function.file.php

+0

伟大的工程!我如何选择,可以说,第3行?谢谢 – user254688 2010-01-21 01:33:03

+0

$ lines = file('/ path/to/file.txt'); $ line3 = $ lines [2]; – echo 2010-01-21 02:00:54

+0

可能会提到在那个结尾会有\ n或\ r或\ r \ n(换行符)。所以如果它像用户/密码(不是标记)那样重要,你会想'做'rtrim($ lines [2])。 – 2010-01-21 02:52:22

您可以使用chr($ INT);函数在爆炸调用中寻找换行符。

你可以找到更多的CHR功能位置:

http://php.net/manual/en/function.chr.php

添加你可以找到换行符的ASCII字符:

http://www.asciitable.com/

fgets只返回一行。 $buffer没有办法同时拥有所有三项,因此分配到list()是错误的。对于第一行,explode()将返回包含两项的数组:"dbName"(冒号前的文本)和""(冒号后的文本)。

这是否工作:

list ($dbName, $tableName, $numFields) = explode (':', implode ('', file ('config.txt'))); 
+0

不,它返回 “dbName tableName numberOfFields”当我echo $ dbName – user254688 2010-01-21 02:42:03

你可以这样做:如果你确定的行内容

$data=file_get_contents("file"); 
$s = preg_split("/\n\n+/m", $data); 
print_r($s); 

,该文件将不会增长任意大:

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一次只能获取一行,因此列表分配需要在循环之外进行。