在PHP中爆炸功能

时间:2010-01-21 01:13:23

标签: php

我有以下记事本文件;

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,在记事本文件中保留换行符?

谢谢。

6 个答案:

答案 0 :(得分:4)

查看file功能。它负责打开和读取文件,并从文件中返回一行数组。然后,您可以遍历数组并分别对每一行进行操作。

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

答案 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字符:

http://www.asciitable.com/

答案 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一次只能获得一行,因此列表赋值需要在循环之外进行。