Разнесите функцию в 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 ответов

Решение

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

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

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

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

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

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

Это работает:

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

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

Вы можете найти больше информации о функции chr здесь:

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

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

http://www.asciitable.com/

Другие вопросы по тегам