Основной вопрос о файле в PHP / - PullRequest
0 голосов
/ 27 марта 2011

У меня есть 12 XML-файлов, из которых я извлекаю ОДИН CSV-файл, из которого - я извлекаю столбец 1 и добавляю значения в файл tt.txt.

СЕЙЧАС, мне нужно извлечь значенияиз этого .txt файла ... каждый раз, когда в него записываются данные ... Но проблема в том, что я использую

$ contents = fread ($ fd, filesize ($ filename));
fclose ($ fd);
$ delimiter = ',';
$ splitcontents = explode ($ delimiter, $ contents);

ОНА ЧИТАЕТ ТОЛЬКО из первого значения файла, каждый раз, когда добавляется файл tt.txt!

Надеюсь, вы понимаете проблему .. Что мне нужно, яхотите, чтобы $ content содержал только новые данные, которые были добавлены ... вместо этого он каждый раз читает с начала файла ...

Есть ли способ добиться этого или php терпит неудачу? /

Этот пробник извлекается из файла TXT-> выполняет вычисления-> записывает INTO новый текстовый файл.Проблема в том, что я не могу прочитать от среднего значения до нового значения. PHP всегда читает с начала файла.

Ответы [ 3 ]

0 голосов
/ 27 марта 2011

Это только чтение первого поля, потому что PHP автоматически не предполагает, что символ новой строки (\n) означает новую запись;Вы сами должны справиться с этим.

Используя то, что у вас уже есть, я бы сделал следующее:

$contents = fread($fd, filesize($filename));
close($fd);

/* Now, split up $contents by newline, turning this into an array, where each element
 * is, in effect, a new line in the CSV file. */
$contents = explode("\n", $contents);

/* Now, explode each element in the array, into itself. */
foreach ($contents as &$c) {
   $c = explode(",", $c);
}

В будущем, если вы захотите построчнотак как вы рискуете перегрузить слишком много ресурсов, прочитав весь файл, используйте fgets().

0 голосов
/ 30 января 2014

Я не очень хорош в массивах, но для меня это звучит так, как будто вам нужен ассоциативный массив (я делаю аналогичную вещь со следующим кодом.*

foreach ($lines as $line) {

 $parts = explode(',', $line);
    if (count($parts) > 0) {
           $posts = array();
        $posts[] = array('name' => $parts[3],'email' => $parts[4],'phone' =>           $parts[5],'link' => $parts[6],'month' => $parts[0],'day' => $parts[1],'year' =>    $parts[2]);      }


     foreach ($posts as $post):
            $post = array_filter(array_map('trim', $post));
0 голосов
/ 27 марта 2011

Я думаю, вам нужно сохранить последнюю позицию файла.

Вызовите размер файла, чтобы получить текущую длину, прочитайте файл, позже проверьте, отличается ли размер файла (или, может быть, вы знаете это как-то иначе, и используйтеfseek, чтобы переместить курсор в файл, а затем прочитать оттуда.

IE:

$previousLength = 0;

// your loop when you're calling your new read function
$length = filesize($filename);
fseek($fd,$previousLength);
$contents = fread($fd,$length - $previousLength);
$previousLength = $length;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...