Commit ac3ff655ea8 for php.net

commit ac3ff655ea806994b6856893f0042e270755e2e0
Author: Gina Peter Banyard <girgias@php.net>
Date:   Tue Aug 25 11:03:22 2026 +0100

    spl: deprecate SplFileObject CSV methods (#23437)

    RFC: https://wiki.php.net/rfc/deprecations_php_8_6#deprecate_splfileobject_csv_methods

diff --git a/ext/phar/tests/phar_oo_008.phpt b/ext/phar/tests/phar_oo_008.phpt
index f1ef081f12a..8121ca8f105 100644
--- a/ext/phar/tests/phar_oo_008.phpt
+++ b/ext/phar/tests/phar_oo_008.phpt
@@ -29,53 +29,34 @@
     echo "$k=>$v\n";
 }

-class MyCSVFile extends SplFileObject
+class MyFile extends SplFileObject
 {
-    function current(): array|false
+    function current(): string
     {
-        return parent::fgetcsv(',', '"', escape: '');
+        return parent::fgets();
     }
 }

-$phar->setInfoClass('MyCSVFile');
-/** @var MyCSVFile $v */
+$phar->setInfoClass('MyFile');
+/** @var MyFile $v */
 $v = $phar['a.csv'];

 echo "===3===\n";
 while(!$v->eof())
 {
-    echo $v->key() . "=>" . join('|', $v->fgetcsv(escape: '')) . "\n";
+    echo $v->key() . "=>" . $v->fgets() . "\n";
 }

 echo "===4===\n";
 $v->rewind();
 while(!$v->eof())
 {
-    $l = $v->fgetcsv(escape: '');
-    echo $v->key() . "=>" . join('|', $l) . "\n";
+    $l = $v->fgets();
+    echo $v->key() . "=>" . $l . "\n";
 }

 echo "===5===\n";
 foreach($v as $k => $d)
-{
-    echo "$k=>" . join('|', $d) . "\n";
-}
-
-class MyCSVFile2 extends SplFileObject
-{
-    function getCurrentLine(): string
-    {
-        echo __METHOD__ . "\n";
-        return implode('|', parent::fgetcsv(',', '"', escape: ''));
-    }
-}
-
-$phar->setInfoClass('MyCSVFile2');
-/** @var MyCSVFile2 $v */
-$v = $phar['a.csv'];
-
-echo "===6===\n";
-foreach($v as $k => $d)
 {
     echo "$k=>" . $d . "\n";
 }
@@ -98,21 +79,18 @@ function getCurrentLine(): string
 1=>2,a,b
 2=>3,"c","'e'"
 ===3===
-0=>1|2|3
-0=>2|a|b
-1=>3|c|'e'
+0=>1,2,3
+
+1=>2,a,b
+
+2=>3,"c","'e'"
 ===4===
-0=>1|2|3
-1=>2|a|b
-2=>3|c|'e'
+1=>1,2,3
+
+2=>2,a,b
+
+3=>3,"c","'e'"
 ===5===
-0=>1|2|3
-1=>2|a|b
-2=>3|c|'e'
-===6===
-MyCSVFile2::getCurrentLine
-1=>1|2|3
-MyCSVFile2::getCurrentLine
-3=>2|a|b
-MyCSVFile2::getCurrentLine
-5=>3|c|'e'
+1=>1,2,3
+
+3=>3,"c","'e'"
diff --git a/ext/phar/tests/phar_oo_009_fgetcsv.phpt b/ext/phar/tests/phar_oo_009_fgetcsv.phpt
new file mode 100644
index 00000000000..edcb98b825a
--- /dev/null
+++ b/ext/phar/tests/phar_oo_009_fgetcsv.phpt
@@ -0,0 +1,142 @@
+--TEST--
+Phar object: iterating via SplFileObject
+--EXTENSIONS--
+phar
+--INI--
+phar.require_hash=0
+--FILE--
+<?php
+
+$pharconfig = 1;
+
+require_once 'files/phar_oo_test.inc';
+
+$phar = new Phar($fname);
+$phar->setInfoClass('SplFileObject');
+
+$f = $phar['a.csv'];
+echo "===1===\n";
+foreach($f as $k => $v)
+{
+    echo "$k=>$v\n";
+}
+
+$f->setFlags(SplFileObject::DROP_NEW_LINE);
+
+echo "===2===\n";
+foreach($f as $k => $v)
+{
+    echo "$k=>$v\n";
+}
+
+class MyCSVFile extends SplFileObject
+{
+    function current(): array|false
+    {
+        return parent::fgetcsv(',', '"', escape: '');
+    }
+}
+
+$phar->setInfoClass('MyCSVFile');
+/** @var MyCSVFile $v */
+$v = $phar['a.csv'];
+
+echo "===3===\n";
+while(!$v->eof())
+{
+    echo $v->key() . "=>" . join('|', $v->fgetcsv(escape: '')) . "\n";
+}
+
+echo "===4===\n";
+$v->rewind();
+while(!$v->eof())
+{
+    $l = $v->fgetcsv(escape: '');
+    echo $v->key() . "=>" . join('|', $l) . "\n";
+}
+
+echo "===5===\n";
+foreach($v as $k => $d)
+{
+    echo "$k=>" . join('|', $d) . "\n";
+}
+
+class MyCSVFile2 extends SplFileObject
+{
+    function getCurrentLine(): string
+    {
+        echo __METHOD__ . "\n";
+        return implode('|', parent::fgetcsv(',', '"', escape: ''));
+    }
+}
+
+$phar->setInfoClass('MyCSVFile2');
+/** @var MyCSVFile2 $v */
+$v = $phar['a.csv'];
+
+echo "===6===\n";
+foreach($v as $k => $d)
+{
+    echo "$k=>" . $d . "\n";
+}
+
+?>
+--CLEAN--
+<?php
+unlink(__DIR__ . '/files/phar_oo_009_fgetcsv.phar.php');
+__halt_compiler();
+?>
+--EXPECTF--
+===1===
+0=>1,2,3
+
+1=>2,a,b
+
+2=>3,"c","'e'"
+===2===
+0=>1,2,3
+1=>2,a,b
+2=>3,"c","'e'"
+===3===
+
+Deprecated: Method SplFileObject::fgetcsv() is deprecated since 8.6 in %s on line %d
+0=>1|2|3
+
+Deprecated: Method SplFileObject::fgetcsv() is deprecated since 8.6 in %s on line %d
+0=>2|a|b
+
+Deprecated: Method SplFileObject::fgetcsv() is deprecated since 8.6 in %s on line %d
+1=>3|c|'e'
+===4===
+
+Deprecated: Method SplFileObject::fgetcsv() is deprecated since 8.6 in %s on line %d
+0=>1|2|3
+
+Deprecated: Method SplFileObject::fgetcsv() is deprecated since 8.6 in %s on line %d
+1=>2|a|b
+
+Deprecated: Method SplFileObject::fgetcsv() is deprecated since 8.6 in %s on line %d
+2=>3|c|'e'
+===5===
+
+Deprecated: Method SplFileObject::fgetcsv() is deprecated since 8.6 in %s on line %d
+0=>1|2|3
+
+Deprecated: Method SplFileObject::fgetcsv() is deprecated since 8.6 in %s on line %d
+1=>2|a|b
+
+Deprecated: Method SplFileObject::fgetcsv() is deprecated since 8.6 in %s on line %d
+2=>3|c|'e'
+===6===
+MyCSVFile2::getCurrentLine
+
+Deprecated: Method SplFileObject::fgetcsv() is deprecated since 8.6 in %s on line %d
+1=>1|2|3
+MyCSVFile2::getCurrentLine
+
+Deprecated: Method SplFileObject::fgetcsv() is deprecated since 8.6 in %s on line %d
+3=>2|a|b
+MyCSVFile2::getCurrentLine
+
+Deprecated: Method SplFileObject::fgetcsv() is deprecated since 8.6 in %s on line %d
+5=>3|c|'e'
diff --git a/ext/spl/spl_directory.stub.php b/ext/spl/spl_directory.stub.php
index 57407007c0a..9e2ebd9ccc4 100644
--- a/ext/spl/spl_directory.stub.php
+++ b/ext/spl/spl_directory.stub.php
@@ -239,15 +239,19 @@ public function fgets(): string {}
     public function fread(int $length): string|false {}

     /** @tentative-return-type */
+    #[\Deprecated(since: '8.6')]
     public function fgetcsv(string $separator = ",", string $enclosure = "\"", string $escape = "\\"): array|false {}

     /** @tentative-return-type */
+    #[\Deprecated(since: '8.6')]
     public function fputcsv(array $fields, string $separator = ",", string $enclosure = "\"", string $escape = "\\", string $eol = "\n"): int|false {}

     /** @tentative-return-type */
+    #[\Deprecated(since: '8.6')]
     public function setCsvControl(string $separator = ",", string $enclosure = "\"", string $escape = "\\"): void {}

     /** @tentative-return-type */
+    #[\Deprecated(since: '8.6')]
     public function getCsvControl(): array {}

     /**
diff --git a/ext/spl/spl_directory_arginfo.h b/ext/spl/spl_directory_arginfo.h
index 3a5bd37d49d..0eb6969cb51 100644
Binary files a/ext/spl/spl_directory_arginfo.h and b/ext/spl/spl_directory_arginfo.h differ
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_fflush_basic_001.phpt b/ext/spl/tests/SplFileObject/SplFileObject_fflush_basic_001.phpt
index b399a852008..7d5d90f43d6 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fflush_basic_001.phpt
+++ b/ext/spl/tests/SplFileObject/SplFileObject_fflush_basic_001.phpt
@@ -5,7 +5,7 @@
 /*
  * test a successful flush
 */
-$obj = New SplFileObject(__DIR__.'/SplFileObject_testinput.csv');
+$obj = New SplFileObject(__DIR__.'/SplFileObject_testinput.txt');
 var_dump($obj->fflush());

 /*
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_escape_empty.phpt b/ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_escape_empty.phpt
deleted file mode 100644
index 0498b6c9129..00000000000
--- a/ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_escape_empty.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-SplFileObject::fgetcsv() with empty $escape
---FILE--
-<?php
-$contents = <<<EOS
-"cell1","cell2\\","cell3","cell4"
-"\\\\\\line1
-line2\\\\\\"
-EOS;
-$file = new SplTempFileObject;
-$file->fwrite($contents);
-$file->rewind();
-while (($data = $file->fgetcsv(',', '"', ''))) {
-    print_r($data);
-}
-?>
---EXPECT--
-Array
-(
-    [0] => cell1
-    [1] => cell2\
-    [2] => cell3
-    [3] => cell4
-)
-Array
-(
-    [0] => \\\line1
-line2\\\
-)
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_fpassthru_basic.phpt b/ext/spl/tests/SplFileObject/SplFileObject_fpassthru_basic.phpt
index a79047830b6..f32ecc9fbad 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fpassthru_basic.phpt
+++ b/ext/spl/tests/SplFileObject/SplFileObject_fpassthru_basic.phpt
@@ -2,7 +2,7 @@
 SplFileObject::fpassthru function - basic functionality test
 --FILE--
 <?php
-$obj = New SplFileObject(__DIR__.'/SplFileObject_testinput.csv');
+$obj = New SplFileObject(__DIR__.'/SplFileObject_testinput.txt');
 $obj->fpassthru();
 ?>
 --EXPECT--
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_fscanf_basic.phpt b/ext/spl/tests/SplFileObject/SplFileObject_fscanf_basic.phpt
index 02de3f8d127..c7f3fee0c62 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fscanf_basic.phpt
+++ b/ext/spl/tests/SplFileObject/SplFileObject_fscanf_basic.phpt
@@ -2,7 +2,7 @@
 SplFileObject::fscanf function - basic functionality test
 --FILE--
 <?php
-$obj = New SplFileObject(__DIR__.'/SplFileObject_testinput.csv');
+$obj = New SplFileObject(__DIR__.'/SplFileObject_testinput.txt');
 var_dump($obj->fscanf('%s'));
 ?>
 --EXPECT--
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_fstat_with_basic_fstat_disabled.phpt b/ext/spl/tests/SplFileObject/SplFileObject_fstat_with_basic_fstat_disabled.phpt
index dda7f1e4283..26573b6af17 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fstat_with_basic_fstat_disabled.phpt
+++ b/ext/spl/tests/SplFileObject/SplFileObject_fstat_with_basic_fstat_disabled.phpt
@@ -4,7 +4,7 @@
 disable_functions="fstat"
 --FILE--
 <?php
-$obj = New SplFileObject(__DIR__.'/SplFileObject_testinput.csv');
+$obj = New SplFileObject(__DIR__.'/SplFileObject_testinput.txt');
 var_dump($obj->fstat());
 ?>
 --EXPECTF--
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_testinput.csv b/ext/spl/tests/SplFileObject/SplFileObject_testinput.txt
similarity index 100%
rename from ext/spl/tests/SplFileObject/SplFileObject_testinput.csv
rename to ext/spl/tests/SplFileObject/SplFileObject_testinput.txt
diff --git a/ext/spl/tests/SplFileObject/bug46569.phpt b/ext/spl/tests/SplFileObject/bug46569.phpt
deleted file mode 100644
index be5d20ce99e..00000000000
--- a/ext/spl/tests/SplFileObject/bug46569.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-Bug #46569 (SplFileObject: fgetcsv after seek returns wrong line)
---FILE--
-<?php
-$file = new SplFileObject(__DIR__ . '/bug46569.csv');
-$file->setCsvControl(escape: "");
-$file->seek(1);
-print_r($file->fgetcsv());
-?>
---EXPECT--
-Array
-(
-    [0] => second
-    [1] => line
-)
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_basic.phpt b/ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_basic.phpt
similarity index 74%
rename from ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_basic.phpt
rename to ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_basic.phpt
index dd42be924cd..1c59408a058 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_basic.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_basic.phpt
@@ -23,7 +23,10 @@
 <?php
 unlink('SplFileObject__fgetcsv1.csv');
 ?>
---EXPECT--
+--EXPECTF--
+Deprecated: Method SplFileObject::setCsvControl() is deprecated since 8.6 in %s on line %d
+
+Deprecated: Method SplFileObject::fgetcsv() is deprecated since 8.6 in %s on line %d
 array(4) {
   [0]=>
   string(6) "field1"
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_delimiter_basic.phpt b/ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_delimiter_basic.phpt
similarity index 75%
rename from ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_delimiter_basic.phpt
rename to ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_delimiter_basic.phpt
index 13bbfd9064a..8eafc3780b6 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_delimiter_basic.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_delimiter_basic.phpt
@@ -24,7 +24,10 @@
 <?php
 unlink('SplFileObject__fgetcsv2.csv');
 ?>
---EXPECT--
+--EXPECTF--
+Deprecated: Method SplFileObject::setCsvControl() is deprecated since 8.6 in %s on line %d
+
+Deprecated: Method SplFileObject::fgetcsv() is deprecated since 8.6 in %s on line %d
 array(4) {
   [0]=>
   string(6) "field1"
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_delimiter_error.phpt b/ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_delimiter_error.phpt
similarity index 76%
rename from ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_delimiter_error.phpt
rename to ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_delimiter_error.phpt
index 99ce5203edf..1551d4034dc 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_delimiter_error.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_delimiter_error.phpt
@@ -27,5 +27,8 @@
 <?php
 unlink('SplFileObject__fgetcsv3.csv');
 ?>
---EXPECT--
+--EXPECTF--
+Deprecated: Method SplFileObject::setCsvControl() is deprecated since 8.6 in %s on line %d
+
+Deprecated: Method SplFileObject::fgetcsv() is deprecated since 8.6 in %s on line %d
 ValueError: SplFileObject::fgetcsv(): Argument #1 ($separator) must be a single character
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_enclosure_basic.phpt b/ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_enclosure_basic.phpt
similarity index 75%
rename from ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_enclosure_basic.phpt
rename to ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_enclosure_basic.phpt
index d200d440f77..fc83c3f8757 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_enclosure_basic.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_enclosure_basic.phpt
@@ -24,7 +24,10 @@
 <?php
 unlink('SplFileObject__fgetcsv4.csv');
 ?>
---EXPECT--
+--EXPECTF--
+Deprecated: Method SplFileObject::setCsvControl() is deprecated since 8.6 in %s on line %d
+
+Deprecated: Method SplFileObject::fgetcsv() is deprecated since 8.6 in %s on line %d
 array(4) {
   [0]=>
   string(6) "field1"
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_enclosure_error.phpt b/ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_enclosure_error.phpt
similarity index 76%
rename from ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_enclosure_error.phpt
rename to ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_enclosure_error.phpt
index a13ac8d62a5..71b973ab7a1 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_enclosure_error.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_enclosure_error.phpt
@@ -27,5 +27,8 @@
 <?php
 unlink('SplFileObject__fgetcsv5.csv');
 ?>
---EXPECT--
+--EXPECTF--
+Deprecated: Method SplFileObject::setCsvControl() is deprecated since 8.6 in %s on line %d
+
+Deprecated: Method SplFileObject::fgetcsv() is deprecated since 8.6 in %s on line %d
 ValueError: SplFileObject::fgetcsv(): Argument #2 ($enclosure) must be a single character
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_escape_basic.phpt b/ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_escape_basic.phpt
similarity index 83%
rename from ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_escape_basic.phpt
rename to ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_escape_basic.phpt
index 4a8bccaf671..eedc801ba08 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_escape_basic.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_escape_basic.phpt
@@ -14,6 +14,7 @@
 unlink('SplFileObject__fgetcsv6.csv');
 ?>
 --EXPECTF--
+Deprecated: Method SplFileObject::fgetcsv() is deprecated since 8.6 in %s on line %d
 array(3) {
   [0]=>
   string(3) "aaa"
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_escape_default.phpt b/ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_escape_default.phpt
similarity index 87%
rename from ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_escape_default.phpt
rename to ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_escape_default.phpt
index b6a878f3cf3..d923d599791 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_escape_default.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_escape_default.phpt
@@ -14,6 +14,8 @@
 unlink('SplFileObject__fgetcsv7.csv');
 ?>
 --EXPECTF--
+Deprecated: Method SplFileObject::fgetcsv() is deprecated since 8.6 in %s on line %d
+
 Deprecated: SplFileObject::fgetcsv(): the $escape parameter must be provided, as its default value will change, either explicitly or via SplFileObject::setCsvControl() in %s on line %d
 array(3) {
   [0]=>
diff --git a/ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_escape_empty.phpt b/ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_escape_empty.phpt
new file mode 100644
index 00000000000..b14f4177c50
--- /dev/null
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_escape_empty.phpt
@@ -0,0 +1,37 @@
+--TEST--
+SplFileObject::fgetcsv() with empty $escape
+--FILE--
+<?php
+$contents = <<<EOS
+"cell1","cell2\\","cell3","cell4"
+"\\\\\\line1
+line2\\\\\\"
+EOS;
+$file = new SplTempFileObject;
+$file->fwrite($contents);
+$file->rewind();
+while (($data = $file->fgetcsv(',', '"', ''))) {
+    var_dump($data);
+}
+?>
+--EXPECTF--
+Deprecated: Method SplFileObject::fgetcsv() is deprecated since 8.6 in %s on line %d
+array(4) {
+  [0]=>
+  string(5) "cell1"
+  [1]=>
+  string(6) "cell2\"
+  [2]=>
+  string(5) "cell3"
+  [3]=>
+  string(5) "cell4"
+}
+
+Deprecated: Method SplFileObject::fgetcsv() is deprecated since 8.6 in %s on line %d
+array(1) {
+  [0]=>
+  string(17) "\\\line1
+line2\\\"
+}
+
+Deprecated: Method SplFileObject::fgetcsv() is deprecated since 8.6 in %s on line %d
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_escape_error.phpt b/ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_escape_error.phpt
similarity index 83%
rename from ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_escape_error.phpt
rename to ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_escape_error.phpt
index d2421e23271..324017a4467 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_escape_error.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_escape_error.phpt
@@ -17,5 +17,6 @@
 <?php
 unlink('SplFileObject__fgetcsv8.csv');
 ?>
---EXPECT--
+--EXPECTF--
+Deprecated: Method SplFileObject::fgetcsv() is deprecated since 8.6 in %s on line %d
 ValueError: SplFileObject::fgetcsv(): Argument #3 ($escape) must be empty or a single character
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv.phpt b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv.phpt
similarity index 96%
rename from ext/spl/tests/SplFileObject/SplFileObject_fputcsv.phpt
rename to ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv.phpt
index a9bba9a6c4e..0ab1bcb2d56 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv.phpt
@@ -5,7 +5,7 @@
 $file = __DIR__ . '/SplFileObject_fputcsv.csv';
 $fo = new SplFileObject($file, 'w');
 // Suppress deprecation notice
-$fo->setCsvControl(escape: '\\');
+@$fo->setCsvControl(escape: '\\');

 $list = array (
   0 => 'aaa,bbb',
@@ -31,7 +31,7 @@
 );

 foreach ($list as $v) {
-    $fo->fputcsv(explode(',', $v));
+    @$fo->fputcsv(explode(',', $v));
 }
 unset($fo);

diff --git a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_002.phpt b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_002.phpt
similarity index 79%
rename from ext/spl/tests/SplFileObject/SplFileObject_fputcsv_002.phpt
rename to ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_002.phpt
index 41b1db637f2..1806e7e872d 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_002.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_002.phpt
@@ -17,6 +17,10 @@
 unlink($file);
 ?>
 --EXPECTF--
+Deprecated: Method SplFileObject::setCsvControl() is deprecated since 8.6 in %s on line %d
+
+Deprecated: Method SplFileObject::fputcsv() is deprecated since 8.6 in %s on line %d
+
 Warning: Array to string conversion in %s on line %d
 array(7) {
   [0]=>
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation1.phpt b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation1.phpt
similarity index 99%
rename from ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation1.phpt
rename to ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation1.phpt
index 2b9e649678b..814e3ccea1b 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation1.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation1.phpt
@@ -42,13 +42,13 @@
     } else {
       $fo = new SplFileObject($file, $file_modes[$mode_counter]);
     }
-    $fo->setCsvControl(escape: '');
+    @$fo->setCsvControl(escape: '');
     $delimiter = $csv_list[0];
     $enclosure = $csv_list[1];
     $csv_field = $csv_list[2];


-    var_dump( $fo->fputcsv($csv_field, $delimiter, $enclosure) );
+    var_dump( @$fo->fputcsv($csv_field, $delimiter, $enclosure) );
     // check the file pointer position and eof
     var_dump( $fo->ftell() );
     var_dump( $fo->eof() );
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation10.phpt b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation10.phpt
similarity index 98%
rename from ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation10.phpt
rename to ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation10.phpt
index 6c6f5109df0..7409045c291 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation10.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation10.phpt
@@ -36,12 +36,12 @@
     } else {
       $fo = new SplFileObject($file, $file_modes[$mode_counter]);
     }
-    $fo->setCsvControl(escape: '\\');
+    @$fo->setCsvControl(escape: '\\');

     $csv_field = $field;

     // write to a file in csv format
-    var_dump( $fo->fputcsv($csv_field) );
+    var_dump( @$fo->fputcsv($csv_field) );

     // check the file pointer position and eof
     var_dump( $fo->ftell() );
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation11.phpt b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation11.phpt
similarity index 99%
rename from ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation11.phpt
rename to ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation11.phpt
index b59dfafcfcb..dd435e2c55e 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation11.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation11.phpt
@@ -42,14 +42,14 @@
     } else {
       $fo = new SplFileObject($file, $file_modes[$mode_counter]);
     }
-    $fo->setCsvControl(escape: '\\');
+    @$fo->setCsvControl(escape: '\\');

     $delimiter = $csv_list[0];
     $enclosure = $csv_list[1];
     $csv_field = $csv_list[2];

     // write to a file in csv format
-    var_dump( $fo->fputcsv($csv_field, $delimiter) );
+    var_dump( @$fo->fputcsv($csv_field, $delimiter) );
     // check the file pointer position and eof
     var_dump( $fo->ftell() );
     var_dump( $fo->eof() );
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation12.phpt b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation12.phpt
similarity index 99%
rename from ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation12.phpt
rename to ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation12.phpt
index 04fd4c30b27..0fda717e16b 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation12.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation12.phpt
@@ -43,14 +43,14 @@
     } else {
       $fo = new SplFileObject($file, $file_modes[$mode_counter]);
     }
-    $fo->setCsvControl(escape: '\\');
+    @$fo->setCsvControl(escape: '\\');

     $delimiter = $csv_list[0];
     $enclosure = $csv_list[1];
     $csv_field = $csv_list[2];

     // write to a file in csv format
-    var_dump( $fo->fputcsv($csv_field, '+') );
+    var_dump( @$fo->fputcsv($csv_field, '+') );
     // check the file pointer position and eof
     var_dump( $fo->ftell() );
     var_dump( $fo->eof() );
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation13.phpt b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation13.phpt
similarity index 89%
rename from ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation13.phpt
rename to ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation13.phpt
index 136491f915e..e0e6d796230 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation13.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation13.phpt
@@ -25,7 +25,9 @@
 $file = __DIR__ . '/SplFileObject_fputcsv_variation13.csv';
 unlink($file);
 ?>
---EXPECT--
+--EXPECTF--
 *** Testing fputcsv() : with default enclosure & delimiter of two chars ***
+
+Deprecated: Method SplFileObject::fputcsv() is deprecated since 8.6 in %s on line %d
 ValueError: SplFileObject::fputcsv(): Argument #2 ($separator) must be a single character
 Done
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation14.phpt b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation14.phpt
similarity index 86%
rename from ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation14.phpt
rename to ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation14.phpt
index 8a8cb968b0a..a1a32130790 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation14.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation14.phpt
@@ -30,8 +30,12 @@
 $file = __DIR__ . '/SplFileObject_fputcsv_variation14.csv';
 unlink($file);
 ?>
---EXPECT--
+--EXPECTF--
 *** Testing fputcsv() : with enclosure & delimiter of two chars and file opened in read mode ***
+
+Deprecated: Method SplFileObject::fputcsv() is deprecated since 8.6 in %s on line %d
 ValueError: SplFileObject::fputcsv(): Argument #2 ($separator) must be a single character
+
+Deprecated: Method SplFileObject::fputcsv() is deprecated since 8.6 in %s on line %d
 ValueError: SplFileObject::fputcsv(): Argument #3 ($enclosure) must be a single character
 Done
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation15.phpt b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation15.phpt
similarity index 61%
rename from ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation15.phpt
rename to ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation15.phpt
index 0762af9f214..9911518830e 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation15.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation15.phpt
@@ -15,6 +15,9 @@
     echo $line;
 }
 ?>
---EXPECT--
+--EXPECTF--
+Deprecated: Method SplFileObject::fputcsv() is deprecated since 8.6 in %s on line %d
+
+Deprecated: Method SplFileObject::fputcsv() is deprecated since 8.6 in %s on line %d
 \
 "\"""
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation16.phpt b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation16.phpt
similarity index 91%
rename from ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation16.phpt
rename to ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation16.phpt
index d2bca8572f5..796b9ac6ee7 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation16.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation16.phpt
@@ -12,7 +12,7 @@
 foreach ($eol_chars as $eol_char) {
   $file = new SplTempFileObject;
     foreach ($data as $record) {
-        $file->fputcsv($record, ',', '"', '', $eol_char);
+        @$file->fputcsv($record, ',', '"', '', $eol_char);
     }

     $file->rewind();
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation5.phpt b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation5.phpt
similarity index 99%
rename from ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation5.phpt
rename to ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation5.phpt
index 468b66b44c2..b42cbb7aa15 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation5.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation5.phpt
@@ -42,14 +42,14 @@
     } else {
       $fo = new SplFileObject($file, $file_modes[$mode_counter]);
     }
-    $fo->setCsvControl(escape: '\\');
+    @$fo->setCsvControl(escape: '\\');

     $delimiter = $csv_list[0];
     $enclosure = $csv_list[1];
     $csv_field = $csv_list[2];

     // write to a file in csv format
-    var_dump( $fo->fputcsv($csv_field) );
+    var_dump( @$fo->fputcsv($csv_field) );
     // check the file pointer position and eof
     var_dump( $fo->ftell() );
     var_dump( $fo->eof() );
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation6.phpt b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation6.phpt
similarity index 99%
rename from ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation6.phpt
rename to ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation6.phpt
index 8a4fb8ed9c5..49c745da178 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation6.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation6.phpt
@@ -45,14 +45,14 @@
     } else {
       $fo = new SplFileObject($file, $file_modes[$mode_counter]);
     }
-    $fo->setCsvControl(escape: '\\');
+    @$fo->setCsvControl(escape: '\\');

     $delimiter = $csv_list[0];
     $enclosure = $csv_list[1];
     $csv_field = $csv_list[2];

     // write to a file in csv format
-    var_dump( $fo->fputcsv($csv_field, '+', '%') );
+    var_dump( @$fo->fputcsv($csv_field, '+', '%') );
     // check the file pointer position and eof
     var_dump( $fo->ftell() );
     var_dump( $fo->eof() );
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation7.phpt b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation7.phpt
similarity index 99%
rename from ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation7.phpt
rename to ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation7.phpt
index 46642a4f52d..058abb6faab 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation7.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation7.phpt
@@ -45,14 +45,14 @@
     } else {
       $fo = new SplFileObject($file, $file_modes[$mode_counter]);
     }
-    $fo->setCsvControl(escape: '\\');
+    @$fo->setCsvControl(escape: '\\');

     $delimiter = $csv_list[0];
     $enclosure = $csv_list[1];
     $csv_field = $csv_list[2];

     // write to a file in csv format
-    var_dump( $fo->fputcsv($csv_field, '+', $enclosure) );
+    var_dump( @$fo->fputcsv($csv_field, '+', $enclosure) );
     // check the file pointer position and eof
     var_dump( $fo->ftell() );
     var_dump( $fo->eof() );
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation8.phpt b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation8.phpt
similarity index 99%
rename from ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation8.phpt
rename to ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation8.phpt
index 608a61bf3d5..f78965120e4 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation8.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation8.phpt
@@ -45,14 +45,14 @@
     } else {
       $fo = new SplFileObject($file, $file_modes[$mode_counter]);
     }
-    $fo->setCsvControl(escape: '\\');
+    @$fo->setCsvControl(escape: '\\');

     $delimiter = $csv_list[0];
     $enclosure = $csv_list[1];
     $csv_field = $csv_list[2];

     // write to a file in csv format
-    var_dump( $fo->fputcsv($csv_field, $delimiter, '+') );
+    var_dump( @$fo->fputcsv($csv_field, $delimiter, '+') );
     // check the file pointer position and eof
     var_dump( $fo->ftell() );
     var_dump( $fo->eof() );
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_getCsvControl_basic_001.phpt b/ext/spl/tests/SplFileObject/csv/SplFileObject_getCsvControl_basic_001.phpt
similarity index 71%
rename from ext/spl/tests/SplFileObject/SplFileObject_getCsvControl_basic_001.phpt
rename to ext/spl/tests/SplFileObject/csv/SplFileObject_getCsvControl_basic_001.phpt
index 97af917cb2e..3224145f9e7 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_getCsvControl_basic_001.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_getCsvControl_basic_001.phpt
@@ -6,7 +6,8 @@
 var_dump($obj->getCsvControl());

 ?>
---EXPECT--
+--EXPECTF--
+Deprecated: Method SplFileObject::getCsvControl() is deprecated since 8.6 in %s on line %d
 array(3) {
   [0]=>
   string(1) ","
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_setCsvControl_basic.phpt b/ext/spl/tests/SplFileObject/csv/SplFileObject_setCsvControl_basic.phpt
similarity index 85%
rename from ext/spl/tests/SplFileObject/SplFileObject_setCsvControl_basic.phpt
rename to ext/spl/tests/SplFileObject/csv/SplFileObject_setCsvControl_basic.phpt
index a8b7cb730d0..0c4d3e04903 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_setCsvControl_basic.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_setCsvControl_basic.phpt
@@ -24,7 +24,8 @@
 <?php
 unlink('csv_control_data_basic.csv');
 ?>
---EXPECT--
+--EXPECTF--
+Deprecated: Method SplFileObject::setCsvControl() is deprecated since 8.6 in %s on line %d
 groene appelen : 10
 gele bananen : 20
 rode kersen : 30
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_setCsvControl_error001.phpt b/ext/spl/tests/SplFileObject/csv/SplFileObject_setCsvControl_error001.phpt
similarity index 85%
rename from ext/spl/tests/SplFileObject/SplFileObject_setCsvControl_error001.phpt
rename to ext/spl/tests/SplFileObject/csv/SplFileObject_setCsvControl_error001.phpt
index 3ff6478ca1d..d5168af4ebd 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_setCsvControl_error001.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_setCsvControl_error001.phpt
@@ -23,5 +23,6 @@
 <?php
 unlink('csv_control_data_error001.csv');
 ?>
---EXPECT--
+--EXPECTF--
+Deprecated: Method SplFileObject::setCsvControl() is deprecated since 8.6 in %s on line %d
 ValueError: SplFileObject::setCsvControl(): Argument #1 ($separator) must be a single character
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_setCsvControl_error002.phpt b/ext/spl/tests/SplFileObject/csv/SplFileObject_setCsvControl_error002.phpt
similarity index 85%
rename from ext/spl/tests/SplFileObject/SplFileObject_setCsvControl_error002.phpt
rename to ext/spl/tests/SplFileObject/csv/SplFileObject_setCsvControl_error002.phpt
index 3a33c479fa0..85ba6a34f6e 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_setCsvControl_error002.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_setCsvControl_error002.phpt
@@ -23,5 +23,6 @@
 <?php
 unlink('csv_control_data_error002.csv');
 ?>
---EXPECT--
+--EXPECTF--
+Deprecated: Method SplFileObject::setCsvControl() is deprecated since 8.6 in %s on line %d
 ValueError: SplFileObject::setCsvControl(): Argument #2 ($enclosure) must be a single character
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_setCsvControl_error003.phpt b/ext/spl/tests/SplFileObject/csv/SplFileObject_setCsvControl_error003.phpt
similarity index 86%
rename from ext/spl/tests/SplFileObject/SplFileObject_setCsvControl_error003.phpt
rename to ext/spl/tests/SplFileObject/csv/SplFileObject_setCsvControl_error003.phpt
index a68d0ad2978..8bf9de8f270 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_setCsvControl_error003.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_setCsvControl_error003.phpt
@@ -25,5 +25,6 @@
 <?php
 unlink('csv_control_data_error003.csv');
 ?>
---EXPECT--
+--EXPECTF--
+Deprecated: Method SplFileObject::setCsvControl() is deprecated since 8.6 in %s on line %d
 ValueError: SplFileObject::setCsvControl(): Argument #3 ($escape) must be empty or a single character
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_setCsvControl_variation001.phpt b/ext/spl/tests/SplFileObject/csv/SplFileObject_setCsvControl_variation001.phpt
similarity index 88%
rename from ext/spl/tests/SplFileObject/SplFileObject_setCsvControl_variation001.phpt
rename to ext/spl/tests/SplFileObject/csv/SplFileObject_setCsvControl_variation001.phpt
index 8c8e52e9743..3fb97a6e6c0 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_setCsvControl_variation001.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_setCsvControl_variation001.phpt
@@ -24,6 +24,8 @@
 unlink('csv_control_data_variation001.csv');
 ?>
 --EXPECTF--
+Deprecated: Method SplFileObject::setCsvControl() is deprecated since 8.6 in %s on line %d
+
 Deprecated: SplFileObject::setCsvControl(): the $escape parameter must be provided as its default value will change in %s on line %d
 groene appelen : 10
 gele bananen : 20
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_setCsvControl_variation002.phpt b/ext/spl/tests/SplFileObject/csv/SplFileObject_setCsvControl_variation002.phpt
similarity index 59%
rename from ext/spl/tests/SplFileObject/SplFileObject_setCsvControl_variation002.phpt
rename to ext/spl/tests/SplFileObject/csv/SplFileObject_setCsvControl_variation002.phpt
index 39b526a86ab..815b06676e9 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_setCsvControl_variation002.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_setCsvControl_variation002.phpt
@@ -6,7 +6,10 @@
 $file->setCsvControl(',', '"', '');
 var_dump($file->getCsvControl());
 ?>
---EXPECT--
+--EXPECTF--
+Deprecated: Method SplFileObject::setCsvControl() is deprecated since 8.6 in %s on line %d
+
+Deprecated: Method SplFileObject::getCsvControl() is deprecated since 8.6 in %s on line %d
 array(3) {
   [0]=>
   string(1) ","
diff --git a/ext/spl/tests/SplFileObject/csv/SplFileObject_testinput.csv b/ext/spl/tests/SplFileObject/csv/SplFileObject_testinput.csv
new file mode 100644
index 00000000000..41a9e31c8d7
--- /dev/null
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_testinput.csv
@@ -0,0 +1,5 @@
+first,second,third
+1,2,3
+4,5,6
+7,8,9
+0,0,0
diff --git a/ext/spl/tests/SplFileObject/bug46569.csv b/ext/spl/tests/SplFileObject/csv/bug46569.csv
similarity index 100%
rename from ext/spl/tests/SplFileObject/bug46569.csv
rename to ext/spl/tests/SplFileObject/csv/bug46569.csv
diff --git a/ext/spl/tests/SplFileObject/csv/bug46569.phpt b/ext/spl/tests/SplFileObject/csv/bug46569.phpt
new file mode 100644
index 00000000000..175321c4477
--- /dev/null
+++ b/ext/spl/tests/SplFileObject/csv/bug46569.phpt
@@ -0,0 +1,19 @@
+--TEST--
+Bug #46569 (SplFileObject: fgetcsv after seek returns wrong line)
+--FILE--
+<?php
+$file = new SplFileObject(__DIR__ . '/bug46569.csv');
+$file->setCsvControl(escape: "");
+$file->seek(1);
+var_dump($file->fgetcsv());
+?>
+--EXPECTF--
+Deprecated: Method SplFileObject::setCsvControl() is deprecated since 8.6 in %s on line %d
+
+Deprecated: Method SplFileObject::fgetcsv() is deprecated since 8.6 in %s on line %d
+array(2) {
+  [0]=>
+  string(6) "second"
+  [1]=>
+  string(4) "line"
+}
diff --git a/ext/spl/tests/bug69181.phpt b/ext/spl/tests/SplFileObject/csv/bug69181.phpt
similarity index 92%
rename from ext/spl/tests/bug69181.phpt
rename to ext/spl/tests/SplFileObject/csv/bug69181.phpt
index 085fccd3265..4c866ea1f5f 100644
--- a/ext/spl/tests/bug69181.phpt
+++ b/ext/spl/tests/SplFileObject/csv/bug69181.phpt
@@ -12,14 +12,14 @@
 file_put_contents($filename, $csv);

 $file = new SplFileObject($filename);
-$file->setCsvControl(escape: "");
+@$file->setCsvControl(escape: "");
 $file->setFlags(SplFileObject::SKIP_EMPTY | SplFileObject::DROP_NEW_LINE | SplFileObject::READ_CSV);
 var_dump(iterator_to_array($file));

 echo "\n====\n\n";

 $file->rewind();
-while (($record = $file->fgetcsv())) {
+while (($record = @$file->fgetcsv())) {
   var_dump($record);
 }
 ?>
diff --git a/ext/spl/tests/SplFileObject/bug75917.phpt b/ext/spl/tests/SplFileObject/csv/bug75917.phpt
similarity index 65%
rename from ext/spl/tests/SplFileObject/bug75917.phpt
rename to ext/spl/tests/SplFileObject/csv/bug75917.phpt
index 27ce3f792c5..f85792451e9 100644
--- a/ext/spl/tests/SplFileObject/bug75917.phpt
+++ b/ext/spl/tests/SplFileObject/csv/bug75917.phpt
@@ -20,6 +20,11 @@
 $tmp->seek(23);
 var_dump($tmp->current());
 ?>
---EXPECT--
+--EXPECTF--
+Deprecated: Method SplFileObject::setCsvControl() is deprecated since 8.6 in %s on line %d
+
+Deprecated: Method SplFileObject::fputcsv() is deprecated since 8.6 in %s on line %d
+
+Deprecated: Method SplFileObject::fputcsv() is deprecated since 8.6 in %s on line %d
 bool(false)
 bool(false)
diff --git a/ext/spl/tests/SplFileObject/bug77024.phpt b/ext/spl/tests/SplFileObject/csv/bug77024.phpt
similarity index 71%
rename from ext/spl/tests/SplFileObject/bug77024.phpt
rename to ext/spl/tests/SplFileObject/csv/bug77024.phpt
index a82713fb3a8..ac0d83ce152 100644
--- a/ext/spl/tests/SplFileObject/bug77024.phpt
+++ b/ext/spl/tests/SplFileObject/csv/bug77024.phpt
@@ -19,7 +19,10 @@
 unlink($tmp);

 ?>
---EXPECT--
+--EXPECTF--
+Deprecated: Method SplFileObject::setCsvControl() is deprecated since 8.6 in %s on line %d
+
+Deprecated: Method SplFileObject::fputcsv() is deprecated since 8.6 in %s on line %d
 foo,bar,baz

 line1
diff --git a/ext/spl/tests/SplFileObject/bug78976.phpt b/ext/spl/tests/SplFileObject/csv/bug78976.phpt
similarity index 53%
rename from ext/spl/tests/SplFileObject/bug78976.phpt
rename to ext/spl/tests/SplFileObject/csv/bug78976.phpt
index 23123a34eb3..41783bcfa6e 100644
--- a/ext/spl/tests/SplFileObject/bug78976.phpt
+++ b/ext/spl/tests/SplFileObject/csv/bug78976.phpt
@@ -6,5 +6,8 @@
 $file->setCsvControl(escape: "");
 var_dump($file->fputcsv(['foo', 'bar']));
 ?>
---EXPECT--
+--EXPECTF--
+Deprecated: Method SplFileObject::setCsvControl() is deprecated since 8.6 in %s on line %d
+
+Deprecated: Method SplFileObject::fputcsv() is deprecated since 8.6 in %s on line %d
 bool(false)
diff --git a/ext/spl/tests/SplFileObject/fgetcsv_blank_file.phpt b/ext/spl/tests/SplFileObject/csv/fgetcsv_blank_file.phpt
similarity index 56%
rename from ext/spl/tests/SplFileObject/fgetcsv_blank_file.phpt
rename to ext/spl/tests/SplFileObject/csv/fgetcsv_blank_file.phpt
index 7bd97a158c4..272f88f9cf5 100644
--- a/ext/spl/tests/SplFileObject/fgetcsv_blank_file.phpt
+++ b/ext/spl/tests/SplFileObject/csv/fgetcsv_blank_file.phpt
@@ -17,6 +17,11 @@
 $file->rewind();
 var_dump($file->fgetcsv());
 ?>
---EXPECT--
+--EXPECTF--
+Deprecated: Method SplFileObject::setCsvControl() is deprecated since 8.6 in %s on line %d
+
+Deprecated: Method SplFileObject::fgetcsv() is deprecated since 8.6 in %s on line %d
 bool(false)
+
+Deprecated: Method SplFileObject::fgetcsv() is deprecated since 8.6 in %s on line %d
 bool(false)
diff --git a/ext/spl/tests/gh13685.phpt b/ext/spl/tests/SplFileObject/csv/gh13685.phpt
similarity index 73%
rename from ext/spl/tests/gh13685.phpt
rename to ext/spl/tests/SplFileObject/csv/gh13685.phpt
index 3f79f9280f5..a9bf3121fbb 100644
--- a/ext/spl/tests/gh13685.phpt
+++ b/ext/spl/tests/SplFileObject/csv/gh13685.phpt
@@ -39,13 +39,21 @@
 }

 ?>
---EXPECT--
+--EXPECTF--
 --- Directly call fgetcsv ---
+
+Deprecated: Method SplFileObject::fgetcsv() is deprecated since 8.6 in %s on line %d
 string(14) ""A", "B", "C"
 "
+
+Deprecated: Method SplFileObject::fgetcsv() is deprecated since 8.6 in %s on line %d
 string(13) ""D", "E", "F""
+
+Deprecated: Method SplFileObject::fgetcsv() is deprecated since 8.6 in %s on line %d
 string(0) ""
 --- Use csv control ---
+
+Deprecated: Method SplFileObject::setCsvControl() is deprecated since 8.6 in %s on line %d
 string(14) ""A", "B", "C"
 "
 string(13) ""D", "E", "F""
diff --git a/ext/spl/tests/gh16217.phpt b/ext/spl/tests/SplFileObject/csv/gh16217.phpt
similarity index 91%
rename from ext/spl/tests/gh16217.phpt
rename to ext/spl/tests/SplFileObject/csv/gh16217.phpt
index c6a0846e64f..fb57b43dea0 100644
--- a/ext/spl/tests/gh16217.phpt
+++ b/ext/spl/tests/SplFileObject/csv/gh16217.phpt
@@ -28,7 +28,8 @@ function uninitialized(): SplFileObject {

 echo "Done\n";
 ?>
---EXPECT--
+--EXPECTF--
+Deprecated: Method SplFileObject::fputcsv() is deprecated since 8.6 in %s on line %d
 fputcsv: Error: Object not initialized
 next: Error: Object not initialized
 next (READ_AHEAD): Error: Object not initialized