Sign in

Ignace Nyamagana Butera

@nyamsprod.com
207 followers 22 following 96 posts

Software developer. Creator of PHP centric package like league/csv, league/uri and bakame/http-structured-fields. Sponsor me at github.com/sponsors/nyamsprod

PostsRepliesMedia
Ignace Nyamagana Butera @nyamsprod.com · 25/09/2026
Just released a new minor version of league/period. It: - drops support for PHP8.1 - add support for PHP8.6 Time\Duration. And there's always that small bug fixe in between Happy upgrading and coding! github.com/thephpleague... #period #duration #php81 #php86 #time
github.com
Release version 5.4.0 · thephpleague/period
Added Support for Time\Duration Fixed Fix inconsistent behaviour in Duration named constructor #141 Deprecated None Removed PHP8.1 support Full Changelog: 5.3.3...5.4.0
010
Ignace Nyamagana Butera @nyamsprod.com · 15/09/2026
#tokei is now officially stable. I just released version 1.0.0 nicknamed Daria. Using duration and local time in PHP has never been that straightforward. Along with the release a documentation website and a logo are now avaiable at bakame-php.github.io/tokei/ #PHP #Duration #localtime #interval
bakame-php.github.io
Tokei. Duration, Local time and interval primitives without timezone complexity - Tokei
A framework-agnostic PHP library to handle duration, time, circular 24-hour intervals, and interval sets, without timezone complexity.
030
Ignace Nyamagana Butera @nyamsprod.com · 10/09/2026
What if URI Templates could work both ways? Template → URI Template ← URI With the next minor version of league/uri, you will be able to extract variables from a URI into an ExtractionResult. Same template. Both directions. #PHP #URI #URITemplate
PHP code showing URI Template extraction with League\Uri. A template contains repeated variables, including {term:1} and {term}, plus an exploded query variable {q*}. The URI /1.1/search/j/john/?q=a&q=b&limit=10 is extracted into an ExtractionResult, producing version "1.1", term "john", q as ["a", "b"], and limit "10".
010
Ignace Nyamagana Butera @nyamsprod.com · 20/08/2026
league/csv warnings on the README page are getting bigger on each PHP version upgrade 😂 😂 #PHP86 #maintenance #CSV
000
Ignace Nyamagana Butera @nyamsprod.com · 18/07/2026
The Duration class in Tokei 0.2.0 introduces the modulo() and dividedInto() methods that provide an easy way to retrieve the remainder of a duration division. This is especially useful when dealing with circular ranges. #duration #localtime #php #circular-range bakame-php.github.io/tokei/
Example demonstrating the difference between Duration::modulo() and the remainder returned by Duration::dividedInto(). For a positive duration of 3 hours and 35 seconds divided by 1 hour, both methods return a remainder of 35 seconds. For the negated duration, modulo() returns a positive remainder (59 minutes and 25 seconds), while dividedInto()->remainder preserves the sign of the original duration and returns −35 seconds.
000
Ignace Nyamagana Butera @nyamsprod.com · 17/07/2026
🎉 tokei 0.2.0 — codename Botan is out! New features, bug fixes, BC breaks, and official docs: bakame-php.github.io/tokei/ Tokei is a small #PHP package for working with local time, durations, and intervals. Try it, share feedback, and leave a ⭐ if you find it useful: github.com/bakame-php/t...
bakame-php.github.io
Tokei. Duration, Local time and interval primitives without timezone complexity - Tokei
A framework-agnostic PHP library to handle duration, time, circular 24-hour intervals, and interval sets, without timezone complexity.
000
Reposted by Ignace Nyamagana Butera
Alexandre Daubois @alexdaubois.bsky.social · 28/04/2026
Ember 1.3 is out! 🔥🐘 I wrote a blog post about the new features of 1.2 & 1.3: plugin system, access and runtime logs live visualisation, upstreams health, Docker Hub... a lot to discover! Everything you need to know 👉 les-tilleuls.coop/en/blog/embe...
021
Ignace Nyamagana Butera @nyamsprod.com · 11/04/2026
Did you know that you can map #CSV row to DTO using league/csv ? in the next version you will be able in #PHP8.5+ to use a static closure to allow specific casting rules
The script shows how using the League/csv package you will be able in the next minor version to use in PHP8.5+ closure to further specify row cell casting to DTO properties so that each CSV record is converted into a fully PHP typed structure.
001
Reposted by Ignace Nyamagana Butera
Alexandre Daubois @alexdaubois.bsky.social · 02/04/2026
#PHP streams have a built-in notification system. Set a callback in the stream context. Get called on CONNECT, MIME_TYPE, FILE_SIZE, PROGRESS, COMPLETED. Download progress bars. In pure PHP. No curl_setopt. No ReactPHP. This callback has existed since PHP 5.2!
052
Reposted by Ignace Nyamagana Butera
Alexandre Daubois @alexdaubois.bsky.social · 30/03/2026
#PHP has a built-in stream filter that converts character encoding on the fly. convert.iconv.FROM/TO. Attach it to any stream. Data is re-encoded as it flows through. Read a Shift_JIS file as UTF-8. No iconv() call. No mb_convert. Just fopen + filter.
032
Reposted by Ignace Nyamagana Butera
Alexandre Daubois @alexdaubois.bsky.social · 19/03/2026
The #JsonPath @symfony component just got an upgrade! Per the RFC, it is now possible to declare custom functions to be parsed and used in your JSON paths. The component is now complete: RFC-compliant, extendable... Maybe you have ideas for it? github.com/symfony/symf...
023
Ignace Nyamagana Butera @nyamsprod.com · 12/02/2026
A straight forward package in PHP to parse, manipulate and generate The Cache-Status HTTP Header Field. github.com/bakame-php/h... #php #http-cache-status #http-structured-fields
github.com
GitHub - bakame-php/http-cache-status: Cache-Status HTTP Response Header Field
Cache-Status HTTP Response Header Field. Contribute to bakame-php/http-cache-status development by creating an account on GitHub.
000
Ignace Nyamagana Butera @nyamsprod.com · 10/02/2026
firefish.imirhil.fr/notes/aijate...
firefish.imirhil.fr
aeris (@aeris)
C’est qui qui a fuité aujourd’hui ? C’est La Carte Avantage Jeune https://bonjourlafuite.eu.org/#La%20Carte%20Avantage%20Jeune-2026-02-09
000
Ignace Nyamagana Butera @nyamsprod.com · 17/01/2026
nyamsprod.com/blog/dealing... a new blog post explaining the new fetures in the #PHP #URI Toolkit but also encourage developers to participate in shaping the future of PHP
nyamsprod.com
Dealing with a PHP BC break | nyamsprod
000
Ignace Nyamagana Butera @nyamsprod.com · 16/01/2026
I just released version 7.8.0 of all my #PHP #URI packages. The new version adds support for BackedEnum everywhere, improve string coercion and allow migrating and mitigating the BC breaks introduced in http_build_query in #PHP8.4 full changelog github.com/thephpleague...
This example show the usage of the new QueryString::compose method with the new QueryComposeMode Enum.  It highlights the different ways to compose an query string to better migrate between the BC breaks in http_build_query  behaviours .
the QueryComposeMode::Native mode just encode using http_build_query so it is PHP version dependent.
020
Ignace Nyamagana Butera @nyamsprod.com · 27/12/2025
Last release of the year #CSV github.com/thephpleague... also last release which supports #PHP8.1 . It adds Enum formatting support on writing
github.com
Release version 9.28.0 · thephpleague/csv
Added EnumFormatter to format Enum for CSV serialization Deprecated None Fixed None Remove None This is the last version supporting PHP8.1
020
Ignace Nyamagana Butera @nyamsprod.com · 08/12/2025
League URI Toolkit 7.7.0 is released. 🎉 - It fixes a regression introduced in version 7.6.0 - adds a redact URI components API via the Modifier class - Improve host parsing and host handling Learn more on the uri.thephpleague.com documentation website. #PHP #URI #OSS
The picture shows some of the new features and fixes added to the package. Like the public Redact API and the improved path modification. see more on the documentation website
000
Ignace Nyamagana Butera @nyamsprod.com · 18/11/2025
This is now live and for everyone to use just do `composer require league/uri-polyfill league/uri-component` and you will be good to go with version 7.6
010
Ignace Nyamagana Butera @nyamsprod.com · 18/11/2025
I am very happy to announce that the League #URI toolkit for #PHP developers 7.6 has been released! This release includes a new uri-polyfill package, a new URN object, a new FragmentDirectives object and tons of improvements please check the uri.thephpleague.com for more information
uri.thephpleague.com
000
Ignace Nyamagana Butera @nyamsprod.com · 29/10/2025
Here's a sneak peak at what you will be able to do with version 7.6 of the PHP league uri toolkit. The toolkit adds support for the new PHP URI extension and gives you a nice API to work with URI in PHP. learn more on uri.thephpleague.com #PHP #URI #RFC3986 #WHATWGURL
The League\Uri\Modifier class wraps any URI object and perform the correct modification on the wrapped URI. After any applied modification you can access the changed URI using the Modifier::unwrap() method.
The method will always return an URI of the same instance of the one you give to the Modifier::wrap method.
The Modifier class works for League Uri own URI class but also for PSR-7 UriInterface implementing classes and PHP's new native URI classes.
020
Ignace Nyamagana Butera @nyamsprod.com · 24/10/2025
Finishing adding these imports everywhere in league/uri codebase version 7.6 is almost ready!! #PHP #URI #OSS #thephpleague
The image highlights the addition of import definition for PHP new native URI extension in league/uri codebase. This extension will always be available when PHP8.5 is released and support for them is being added to league/uri.
010
Ignace Nyamagana Butera @nyamsprod.com · 15/10/2025
There's a new league/uri package in town guess which one it is ? uri.thephpleague.com It will be release with version 7.6 of all the other packages 🥳 #PHP #URI #polyfill special thanks to github.com/TimWolla, github.com/kocsismate and github.com/TRowbotham for the help and support
The league URI toolkit has a new package ready to be released named uri-polyfill and it brings PHP's new URI extension to PHP8.1+ version
000
Ignace Nyamagana Butera @nyamsprod.com · 14/10/2025
Coming in the next version of league/csv named constructors simplification. All the current named constructors are deprecated in favor of just two. which will simplify the user choice and improve DX #csv #php #oss #thephpleague Read the doc for more informations csv.thephpleague.com/9.0/connecti...
All the current named constructors are being deprecated and replaced by 2 simple named constructors that are easier and more powerful to work with.
For instance Reader::createFromString is replaced by Reader::fromString
and all the other methods are replaced by the more easy to use Reader::from.
010
Ignace Nyamagana Butera @nyamsprod.com · 26/09/2025
Coming in the next minor version of #LeagueCSV the JsonConverter #ndjson support is improved you can now do the following #php #csv #oss
You load a CSV written in french iso-8895-15 and using the ";" as delimiter
You first load the CSV document. 
Then using the stream feature you convert on the fly the document into UTF-8 using mb_string extension. 
You convert and store the CSV document as a NDJson file using a list with a header. Last but not least you convert the strings into integer where it makes sense using the JsonConverter formatter capabilities.
000
Ignace Nyamagana Butera @nyamsprod.com · 25/09/2025
New minor versions of the league/uri packages are coming in a couple of weeks. They will contain new features and deprecations. Please head over the documentation site or play around with the dev-master and report bugs or regressions now. #PHP #URI #OOS uri.thephpleague.com
uri.thephpleague.com
Modern API to process URIs in PHP - URI
Modern API to process URIs in PHP
000
Ignace Nyamagana Butera @nyamsprod.com · 13/09/2025
PHP warnings: Sometimes harmless 🤷 Sometimes critical 💥 Always annoying 😅 My fix: a Warning class to cloak or trap them, once and for all. nyamsprod.com/blog/dealing... #php #warnings #error_handling
nyamsprod.com
Dealing with Warnings in PHP, the Right Way | nyamsprod
001
Ignace Nyamagana Butera @nyamsprod.com · 05/09/2025
A new version of #stackwatch is out with tons of new features, fixes and removal for instance the new version nows comes with a PHPUnit helper traits to ease testing callback or method performances. See more on the documentation website bakame-php.github.io/stackwatch/ #php #profiling #OOP
A fluent, unit-aware PHPUnit helper for asserting profiler metrics. Straightforward to use by adding a simple trait to your PHPUnit test class. And Since all the data are in bytes or nanoseconds you can assert using other units and they will be automatically converted into the proper unit.
010
Ignace Nyamagana Butera @nyamsprod.com · 18/08/2025
I usually hate traits but I hate even more the PHP error control operator so I made this trait #PHP #trait
This PHP trait safely executes a callback while suppressing PHP warnings and notices during its execution.

Useful for calling functions or methods that may trigger non-critical errors without interrupting program flow like most PHP internal functions.
110
Ignace Nyamagana Butera @nyamsprod.com · 15/08/2025
I created a new package called #stackwatch and If someone is interested I have 3 open issues on #stackwatich which I need help for github.com/bakame-php/s... to tag the first stable version. Of course feel free to add more issues if you test the package #php #profiling
github.com
bakame-php/stackwatch
A minimalist multi-metric PHP Profiler. Contribute to bakame-php/stackwatch development by creating an account on GitHub.
010
Ignace Nyamagana Butera @nyamsprod.com · 13/08/2025
Periodic reminder: stop using boolean as options flags in #PHP use Enum instead. Boolean flags are hard to read and to remember and lead to tricky bugs and requiring a trip to the method/function definition, Enum are explicit and readable and offer granularity instead of a simple yes/no answer
010
Ignace Nyamagana Butera @nyamsprod.com · 03/07/2025
I have updated my RFC around data encoding in PHP to allow users to migrate to the new API. wiki.php.net/rfc/data_enc... comments and remarks are welcomed #PHP #RFC #base64 #base16 #base58 #base32
wiki.php.net
PHP: rfc:data_encoding_api
001
Ignace Nyamagana Butera @nyamsprod.com · 03/07/2025
github.com/bakame-php/a... is almost stable if you could give a spin an report issues or improvement it would be nice. It is a nice non brainer straightforward profiler in PHP which seats between Xdebug and you double call to microtime 😂 Give it a shot. #PHP #profiler #OSS
github.com
GitHub - bakame-php/aide-profiler: A minimalist multi-metric PHP Profiler
A minimalist multi-metric PHP Profiler. Contribute to bakame-php/aide-profiler development by creating an account on GitHub.
000
Ignace Nyamagana Butera @nyamsprod.com · 26/06/2025
An entry level package to profile your code it's not #xdebug but it does the job needed github.com/bakame-php/a... #php #profiling #memoryusage #microtime
github.com
GitHub - bakame-php/aide-profiler: A simple profiler in PHP
A simple profiler in PHP. Contribute to bakame-php/aide-profiler development by creating an account on GitHub.
010
Ignace Nyamagana Butera @nyamsprod.com · 22/05/2025
It's official #PHP8.5 will get not one but two URI/URL compliant parsers 🎉 externals.io/message/1273... #RFC3986 #WHATWG-URL
externals.io
[RFC] [Vote] Add WHATWG compliant URL parsing API - Externals
#externals - Opening PHP's #internals to the outside
000
Reposted by Ignace Nyamagana Butera
Alexandre Daubois @alexdaubois.bsky.social · 20/05/2025
The new @symfony.com #JsonPath component just got more useful: directly integrate it in your test cases to ensure everything is at the right place in your #JSON string/resource 👀 Experimental and to be tested in #Symfony 7.3 🙌 Pull request: github.com/symfony/symf...
0123
Ignace Nyamagana Butera @nyamsprod.com · 06/05/2025
#PHP may be the first language to correctly support #RFC3986 #URI and #WHATWG #URL at the same time if RFC wiki.php.net/rfc/url_pars... passes. I created a polyfill which works on PHP8.1+ github.com/bakame-php/a... It will get tagged as stable once the RFC has passed.
wiki.php.net
PHP: rfc:url_parsing_api
031
Reposted by Ignace Nyamagana Butera
Lars Moelleken @voku.bsky.social · 01/05/2025
phpdocs in 2025 suckup.de/2025/05/the-... #php #coding
suckup.de
The PHPDoc Guide (2025 Edition)
String-based pseudo-types Numeric & bounded pseudo-types Arrays, lists, and shapes Object & class-based types Callable types Generics with @template, @extends, @implements Constant values ...
032
Ignace Nyamagana Butera @nyamsprod.com · 26/04/2025
A new release of PHP domain parser has been released github.com/jeremykendal... Please clear your cache if you are using one to make sure your will get access to the fixes and to the new features in the release #PHP #Domain-parser #PublicSuffixList #IANA
github.com
Release 6.4.0 · jeremykendall/php-domain-parser
Added DomainName::withRootLabel, DomainName::withoutRootLabel, DomainName::isAbsolute methods to handle absolute domain names. DomainName::when to allow conditionable when building the domain. Fi...
010
Ignace Nyamagana Butera @nyamsprod.com · 28/02/2025
League/csv 9.22.0 is out with a new class the Buffer which enable buffering and performing CRUD operation on your data. Please read the documentation csv.thephpleague.com/9.0/writer/b... and the release notes for more github.com/thephpleague... #php #csv #leagueCSV
The Buffer class loads the first 1000 rows of the CSV Reader object. Delete records where the rating is equal to 0.
Update records without tags and a the book and the sci-fi tags
And insert a new record that was not present
Finally, the buffer is stored in a new CSV document with the update made to it.
000
Reposted by Ignace Nyamagana Butera
Randall Munroe @xkcd.com · 26/02/2025
RNA xkcd.com/3056
154177422541
Ignace Nyamagana Butera @nyamsprod.com · 25/01/2025
Today, the #LeagueURI package has joined the 100M+ downloads club! Thanks for using my work in your codebase. I’d be truly grateful if you considered showing your support by becoming a sponsor to keep the adventure going! Thanks in advance! #PHP #OSS github.com/sponsors/nya... uri.thephpleague.com
github.com
Sponsor @nyamsprod on GitHub Sponsors
Ignace Nyamagana Butera, a PHP Developer, creator and maintainer of popular open-source software for PHP like league/uri and league/csv
131
Ignace Nyamagana Butera @nyamsprod.com · 18/01/2025
OK this still need some ironing but... in #LeagueCSV 9.22.0 a new interface is added `TabularData` which enables the following magic 😍 #PHP #interoperability #extension #tabulardata for more information and limitations check the documentation csv.thephpleague.com/9.0/reader/r...
The picture illustrate how you can user League\CSV package to directly interact with popular RDBMS system in PHP to turn any query result into a object processable by the package.
020
Ignace Nyamagana Butera @nyamsprod.com · 10/01/2025
Would anyone be interested in a talk around #LeagueCSV I promise it won't be boring. I have never done a talk on it so if you have a #PHP group not too far away from Brussels I'll be more than happy to present to your group the package and some hidden gems inside it!!
001
Ignace Nyamagana Butera @nyamsprod.com · 08/01/2025
#LeagueCSV 9.21.0 is out with a full rewrite of the exposed #PHP stream filter API to improve its usage. github.com/thephpleague...
The new stream filter API using the League\Csv\Writer object. You can register any callback and attach it to the object in a read or write mode depending on the situationThe API can be use with native PHP stream resource too register, append or remove the stream filter
000
Ignace Nyamagana Butera @nyamsprod.com · 04/01/2025
One of the most underrated, under-used, unknown feature of #PHP is the powerful PHP stream filter API with the weirdest class of them all www.php.net/php_user_fil... I use them heavily in #LeagueCSV 😈 and they are getting a clean fresh API in the next minor version to improve their usages
Enabling parsing a file using the carriage return character as end of line character using PHP stream filter via the new CallbackStreamFilter class in League/CSV in the upcoming release 9.21.0
010
Ignace Nyamagana Butera @nyamsprod.com · 03/01/2025
Coming to the next minor version of #LeagueURI more string representation to help you display your URI the right way #php #URI
020
Ignace Nyamagana Butera @nyamsprod.com · 28/12/2024
When a person tells you that #PHP is old not like #javascript just tell them that they were both released in 1995 then slowly but with confidence drop out of the conversation to preserve your lifespan for some productive activities like playing with your kids or watching a movie
172
Ignace Nyamagana Butera @nyamsprod.com · 23/12/2024
#LeagueURI will expose the methods from the upcoming native PHP URI interface to allow easier upgrade to using PHP URI native extension when it will be released github.com/thephpleague... comments and remarks are welcomed in the PR. #uri #rfc3986 #rfc3987
github.com
URI package and the upcoming PHP native URI extension · Issue #148 · thephpleague/uri-src
Feature Request Q A Package yes New Feature yes BC Break no Introduction A proposed URI extension will probably land in PHP in the next version. The extension will expose two URI classes which shar...
010
Ignace Nyamagana Butera @nyamsprod.com · 21/12/2024
Periodic reminder: The PHP parse_url function splits the URL in its different components. It does not validate the URL. To correctly validate an URL you are required to use an URL validator per scheme. #php #URL #URI
parse_url tries to split an URL into its defined component. It does not validate the URL. You need an URL validator for that
020
Ignace Nyamagana Butera @nyamsprod.com · 17/12/2024
Did you know you could treat a query string a la #php or a la #javascript using #LeagueURI component package
Processing a query string in PHP using PHP or Javascript algorithm
062