High-performance CSV parser with SIMD optimizations (AVX-512/AVX2) for PHP - 10-50x faster than fgetcsv

Maintainers

Package info

github.com/Sanix-Darker/cisv-php

Documentation

Language:C

Type:php-ext

Ext name:ext-cisv

pkg:composer/sanix-darker/cisv

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 1

Open Issues: 0

v0.4.7 2026-03-07 10:34 UTC

This package is auto-updated.

Last update: 2026-03-08 00:22:55 UTC


README

PHP Install

CI

Packagist Version

License

PHP extension distribution for CISV with SIMD-accelerated CSV parsing via native C code.

FEATURES

  • Native extension parser for PHP
  • Full parse API (parseFile, parseString)
  • Row-by-row iterator API (openIterator / fetchRow)
  • Fast row counting (CisvParser::countRows)
  • Better memory behavior with iterator mode on very large files

INSTALLATION

FROM SOURCE

git clone --recurse-submodules https://github.com/Sanix-Darker/cisv-php
cd cisv-php
make -C core/core all
cd cisv
phpize
./configure --enable-cisv
make -j"$(nproc)"
sudo make install

Then enable extension in php.ini:

extension=cisv.so

CORE DEPENDENCY (SUBMODULE)

This repository tracks cisv-core via the ./core git submodule.

To fetch the latest cisv-core (main branch) in your local clone:

git submodule update --init --remote --recursive

CI and release workflows also run this update command, so new cisv-core releases are pulled automatically during builds.

QUICK START

<?php

$parser = new CisvParser(['delimiter' => ',', 'trim' => true]);
$rows = $parser->parseFile('data.csv');
print_r($rows[0]);

API EXAMPLES

PARSE FILE AND STRING

<?php

$parser = new CisvParser(['trim' => true, 'skip_empty' => true]);
$fileRows = $parser->parseFile('data.csv');
$stringRows = $parser->parseString("id,name\n1,alice\n2,bob\n");

FAST ROW COUNTING

<?php

$total = CisvParser::countRows('large.csv');
echo "Rows: $total\n";

ITERATOR MODE (RECOMMENDED FOR HUGE FILES)

<?php

$parser = new CisvParser(['delimiter' => ',', 'trim' => true]);
$parser->openIterator('very_large.csv');

while (($row = $parser->fetchRow()) !== false) {
    if (!empty($row) && $row[0] === 'STOP') {
        break;
    }
    // process row
}

$parser->closeIterator();

EXAMPLES DIRECTORY

Runnable examples are available in examples/:

  • basic.php
  • iterator.php
  • sample.csv

VALIDATION

php -d extension=cisv/modules/cisv.so cisv/scripts/verify_api.php

BENCHMARKS

docker build -t cisv-php-bench -f cisv/benchmarks/Dockerfile .
docker run --rm --platform linux/amd64 --cpus=2 --memory=4g cisv-php-bench

PHP Benchmarks

The benchmark output includes both full parse and iterator paths (including cisv-iterator).

UPSTREAM CORE