Tue, 23 Jun 2026 12:36 ignace nyamagana butera <[email protected]>:

> On Tue, Jun 23, 2026 at 9:56 AM Muhammed Arshid KV <[email protected]>
> wrote:
>
>> Hi,
>>
>> I propose deprecating SplFileObject CSV methods like fputcsv, fgetcsv,
>> setCsvControl, and getCsvControl.
>>
>> These APIs are complex and hard to maintain, and named arguments expose
>> design inconsistencies, causing long-standing issues.
>>
>> We should consider replacing them with a dedicated ext/csv that provides
>> a cleaner, stream-friendly CSV API.
>>
>> https://github.com/php/php-src/pull/22160
>>
>>
>> Regards.
>>
>> Arshid
>>
>>
>>
>> Hi  Arshid,
>
> While I agree that CSV handling can and should be improved in core PHP,
> deprecating the current API without providing at least the start of a
> replacement API seems premature to me.
> We should first focus on providing a better/improved CSV experience in
> PHP. Then, if:
>
> - we all agree on a new API
> - everyone starts using it and it becomes popular
> - and the path to migrate to the new API is made as straightforward as
> possible
>
> then we can start discussing the process of deprecating the current
> feature. Anything else would be counterproductive at the moment.
>
> Best regards,
> Ignace
>

Hi,

Apologies for bringing this up so close to the end of the vote.

I'd like to second this as a user, with two specific points about the
"Deprecate SplFileObject CSV methods" section.

First, the RFC does not say what existing code should migrate to. I often
use
SplFileObject::fputcsv() for generating CSV files. The procedural fputcsv()
is
not affected by this proposal, but it takes a stream resource, so it is not
a drop-in replacement for code that is structured around SplFileObject.
Is there an intended migration path that I have missed? If so, I think it
would
help to have it stated in the RFC, as the other sections in this RFC do.

Second, SplFileObject::READ_CSV is not part of the proposal, which I think
leaves
the outcome in an inconsistent state. setCsvControl() is the only way to
configure the delimiter, enclosure and escape character used by READ_CSV;
the
constructor does not accept them. If setCsvControl() is removed in PHP 9
while
READ_CSV remains, READ_CSV is permanently locked to its defaults and
tab-separated files can no longer be read through it. The default value of
$escape is also already deprecated and scheduled to change, so what would
survive
is a flag that cannot be configured and whose defaults are still unsettled.

Either READ_CSV should be deprecated alongside the four methods, or
setCsvControl() should be retained until a replacement API is available.

I would appreciate clarification on both points.

Regards,
Takuya

Reply via email to