Разнесите функцию в PHP - PullRequest
       12

Разнесите функцию в PHP

0 голосов
/ 21 января 2010

У меня есть следующий файл блокнота;

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 и именем таблицы есть разрывы строк. Как мне разобрать буфер $, сохраняя разрывы строк в файле блокнота?

Спасибо.

Ответы [ 6 ]

4 голосов
/ 21 января 2010

Посмотрите на функцию file. Он заботится об открытии и чтении файла и возвращает массив строк из файла. Затем вы можете выполнить итерацию по массиву и работать с каждой строкой отдельно.

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

1 голос
/ 21 января 2010

вы можете сделать это:

$data=file_get_contents("file");
$s  = preg_split("/\n\n+/m", $data);
print_r($s);
0 голосов
/ 21 января 2010

Если вы уверены в содержимом строки, и файл не будет расти произвольно большим:

  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 будет проходить через все строки и объединяться в один и тот же буфер после удаления пробелов. Это оставляет только содержимое, разделенное ":". Теперь это можно взорвать.

Как писал Николас, feof получает по одной строке за раз, поэтому назначение списка должно происходить вне цикла.

0 голосов
/ 21 января 2010

Работает ли это:

list ($dbName, $tableName, $numFields) = explode (':', implode ('', file ('config.txt')));
0 голосов
/ 21 января 2010

fgets возвращает только одну строку. Нет никакого способа, которым $buffer мог бы когда-либо иметь все три элемента одновременно, так что присвоение list() неверно. Для первой строки explode() вернет массив с двумя элементами: "dbName" (текст перед двоеточием) и "" (текст после двоеточия).

0 голосов
/ 21 января 2010

Вы можете использовать chr ($ INT); функция для поиска разрыва строки в вашем вызове разнесения.

Подробнее о функции chr вы можете узнать здесь:

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

Добавьте вы можете найти символы ascii для разрыва строки по адресу:

http://www.asciitable.com/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...