php vfsStream не обрабатывает символы новой строки

Я пытаюсь изолировать методы модульного тестирования, которые работают с CSV-файлами, используя vsf-stream здесь: https://github.com/mikey179/vfsStream

Я создал двумерный массив данных для тестирования, но когда я пытаюсь добавить это в макетированный файл, он, кажется, анализирует символы новой строки вместо добавления новых строк. Я пробовал оба fputcsv а также fputs но оба имеют одинаковые результаты. Используя те же данные и функции php, которые я могу успешно записать в обычный файл, проблемы, похоже, связаны с vfs-stream. Не много документации в сети и полностью потеряно:

$this->data = array(
    array( 'col1', 'col2', 'col3', 'col4' ),
    array( 'row 0 1', 'row 0 2', ' row 0 3', ' row 0 4' ),
    array( 'row 1 1', 'row 1 2', ' row 1 3', ' row 1 4' ),
    array( 'row 2 1', 'row 2 2', ' row 2 3', ' row 2 4' ),
    array( 'row 3 1', 'row 3 2', ' row 3 3', ' row 3 4' ),
    array( 'row 4 1', 'row 4 2', ' row 4 3', ' row 4 4' ),
    array( 'row 5 1', 'row 5 2', ' row 5 3', ' row 5 4' ),
);
$this->root = vfsStream::setup('test-dir');
$file = vfsStream::url('test-dir/foo.csv');
    $handle = fopen($file, "a+");
foreach( $this->data as $arr)
    fputcsv($handle, $arr, "|"); //$content .= implode("|", $arr) . "\n";

Приведенный выше код создаст макет файла, но без каких-либо символов новой строки, поэтому анализ макета файла csv позже в тесте не будет работать, так как кажется, что все записано в одну длинную строку:

var_dump( file_get_contents( $file ) );

будет производить:

string(272) "col1|col2|col3|col4\n"row 0 1"|"row 0 2"|" row 0 3"|" row 0 4"\n"row 1 1"|"row 1 2"|" row 1 3"|" row 1 4"\n"row 2 1"|"row 2 2"|" row 2 3"|" row 2 4"\n"row 3 1"|"row 3 2"|" row 3 3"|" row 3 4"\n"row 4 1"|"row 4 2"|" row 4 3"|" row 4 4"\n"row 5 1"|"row 5 2"|" row 5 3"|" row 5 4"\n"

Я надеюсь, что мне не хватает флага для этого, и это не ошибка. Любая помощь приветствуется, ура.

1 ответ

Проблема использовала var_dump вместо print или же echo чтобы увидеть результаты. var_dump даст описательное и буквальное представление переменной, а не анализирует \n символы - print или же echo будет печатать и анализировать \n символы.

Поэтому приведенный выше код работает, и моя глупость или недосыпание - вот в чем проблема.

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