Чтение из простой базы данных файлов с помощью PHP - PullRequest
2 голосов
/ 06 января 2012

Я ищу самый простой способ извлечь строку данных из базы данных плоских файлов с помощью PHP на основе идентификатора переменной.

Например, если странице передается идентификатор 10001, она захватывает имя, фамилию, компанию, адрес и другую демографическую информацию пользователя и т. Д.

База данных - это текстовый файл с именами полей в первой строке, а следующие строки содержат данные. Его табуляция разделена и каждая строка отделяется переводом каретки.

Есть идеи? Заранее спасибо.

Редактировать: проблема скорости, поднятая Эдди, определенно является действительной. Поэтому, чтобы обойти необходимость взаимодействия с базой данных плоских файлов PHP, я вместо этого использовал WebDNA для извлечения данных базы данных на странице, предшествующей моей странице PHP. Затем я передал данные со страницы WebDNA на страницу PHP через форму сообщения. Таким образом, есть 1 дополнительный шаг в процессе оплаты для клиента, но данные проверяются стандартным и быстрым способом.

Ответы [ 3 ]

4 голосов
/ 06 января 2012

Я делал это раньше и очень беспокоился о скорости. Файл данных содержал около 10000 строк, но он довольно быстрый. Однако при наличии одновременных запросов у вас могут возникнуть проблемы с доступом к файлу.

По сути, откройте файл в режиме только для чтения, прочитайте одну строку за раз, проанализируйте строку в массиве, найдите идентификатор и повторяйте, пока не найдете нужный идентификатор.

В зависимости от размера текстового файла, вы, конечно, можете рассмотреть базу данных.

3 голосов
/ 06 января 2012

База данных представляет собой текстовый файл с именами полей в первой строке, а последующие строки ниже содержат данные.Его табуляция разделена, и каждая строка отделяется переводом каретки.

Звучит как тип файла CSV .В PHP есть функции и классы для работы с ними, вам нужно только указать разделитель полей и позаботиться о разделителе строк: fgetcsv Документы

Следуя указаниям Эдди, функция будет выглядеть примерно так:

function get_data_field_from_tsv($id_to_look_for, $filename){
   $id_field_im_interested_in_position = '0'; //if it's the first field in the line
   $row = 1;
   if (($handle = fopen($filename, "r")) !== FALSE) {
      while (($data = fgetcsv($handle, 0, "\t")) !== FALSE) {
         $row++;
         if (trim($data[$id_field_im_interested_in_position])==$id_to_look_for){
            fclose($handle);
            return $data;
         }
      }
      fclose($handle);
      return false;
   }
}

Так что пример использования для следующего файла "testfile.db":

ID  SECOND  THIRD   FOURTH
12  test2   test3   test4
13  test22  test33  test44
14  test222 test333 test444

будетбыть:

$data = get_data_field_from_tsv(14, '/path/to/testfile.db');
print_r($data);

Что приводит к:

Array
(
    [0] => 14
    [1] => test222
    [2] => test333
    [3] => test444
)
0 голосов
/ 07 января 2012

Эта функция может упростить поиск, если файл правильно сформирован:

http://us3.php.net/fgetcsv

Это для CSV, но если у вас есть стандартный разделитель, вы меняете разделитель какпараметр функции.

...