[php-src] master: spl: deprecate SplFileObject CSV methods (#23437)

Gina Peter Banyard via GitHub <[email protected]>
Newsgroups gmane.comp.php.cvs.general
Message-ID <[email protected]>
Author: Gina Peter Banyard (Girgias)
Committer: GitHub (web-flow)
Pusher: Girgias
Date: 2026-08-25T11:03:22+01:00

Commit: https://github.com/php/php-src/commit/ac3ff655ea806994b6856893f0042e270755e2e0
Raw diff: https://github.com/php/php-src/commit/ac3ff655ea806994b6856893f0042e270755e2e0.diff

spl: deprecate SplFileObject CSV methods (#23437)

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

Changed paths:
  A  ext/phar/tests/phar_oo_009_fgetcsv.phpt
  A  ext/spl/tests/SplFileObject/SplFileObject_testinput.txt
  A  ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_basic.phpt
  A  ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_delimiter_basic.phpt
  A  ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_delimiter_error.phpt
  A  ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_enclosure_basic.phpt
  A  ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_enclosure_error.phpt
  A  ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_escape_basic.phpt
  A  ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_escape_default.phpt
  A  ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_escape_empty.phpt
  A  ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_escape_error.phpt
  A  ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv.phpt
  A  ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_002.phpt
  A  ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation1.phpt
  A  ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation10.phpt
  A  ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation11.phpt
  A  ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation12.phpt
  A  ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation13.phpt
  A  ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation14.phpt
  A  ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation15.phpt
  A  ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation16.phpt
  A  ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation5.phpt
  A  ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation6.phpt
  A  ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation7.phpt
  A  ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation8.phpt
  A  ext/spl/tests/SplFileObject/csv/SplFileObject_getCsvControl_basic_001.phpt
  A  ext/spl/tests/SplFileObject/csv/SplFileObject_setCsvControl_basic.phpt
  A  ext/spl/tests/SplFileObject/csv/SplFileObject_setCsvControl_error001.phpt
  A  ext/spl/tests/SplFileObject/csv/SplFileObject_setCsvControl_error002.phpt
  A  ext/spl/tests/SplFileObject/csv/SplFileObject_setCsvControl_error003.phpt
  A  ext/spl/tests/SplFileObject/csv/SplFileObject_setCsvControl_variation001.phpt
  A  ext/spl/tests/SplFileObject/csv/SplFileObject_setCsvControl_variation002.phpt
  A  ext/spl/tests/SplFileObject/csv/SplFileObject_testinput.csv
  A  ext/spl/tests/SplFileObject/csv/bug46569.csv
  A  ext/spl/tests/SplFileObject/csv/bug46569.phpt
  A  ext/spl/tests/SplFileObject/csv/bug69181.phpt
  A  ext/spl/tests/SplFileObject/csv/bug75917.phpt
  A  ext/spl/tests/SplFileObject/csv/bug77024.phpt
  A  ext/spl/tests/SplFileObject/csv/bug78976.phpt
  A  ext/spl/tests/SplFileObject/csv/fgetcsv_blank_file.phpt
  A  ext/spl/tests/SplFileObject/csv/gh13685.phpt
  A  ext/spl/tests/SplFileObject/csv/gh16217.phpt
  D  ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_basic.phpt
  D  ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_delimiter_basic.phpt
  D  ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_delimiter_error.phpt
  D  ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_enclosure_basic.phpt
  D  ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_enclosure_error.phpt
  D  ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_escape_basic.phpt
  D  ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_escape_default.phpt
  D  ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_escape_empty.phpt
  D  ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_escape_error.phpt
  D  ext/spl/tests/SplFileObject/SplFileObject_fputcsv.phpt
  D  ext/spl/tests/SplFileObject/SplFileObject_fputcsv_002.phpt
  D  ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation1.phpt
  D  ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation10.phpt
  D  ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation11.phpt
  D  ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation12.phpt
  D  ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation13.phpt
  D  ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation14.phpt
  D  ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation15.phpt
  D  ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation16.phpt
  D  ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation5.phpt
  D  ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation6.phpt
  D  ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation7.phpt
  D  ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation8.phpt
  D  ext/spl/tests/SplFileObject/SplFileObject_getCsvControl_basic_001.phpt
  D  ext/spl/tests/SplFileObject/SplFileObject_setCsvControl_basic.phpt
  D  ext/spl/tests/SplFileObject/SplFileObject_setCsvControl_error001.phpt
  D  ext/spl/tests/SplFileObject/SplFileObject_setCsvControl_error002.phpt
  D  ext/spl/tests/SplFileObject/SplFileObject_setCsvControl_error003.phpt
  D  ext/spl/tests/SplFileObject/SplFileObject_setCsvControl_variation001.phpt
  D  ext/spl/tests/SplFileObject/SplFileObject_setCsvControl_variation002.phpt
  D  ext/spl/tests/SplFileObject/SplFileObject_testinput.csv
  D  ext/spl/tests/SplFileObject/bug46569.csv
  D  ext/spl/tests/SplFileObject/bug46569.phpt
  D  ext/spl/tests/SplFileObject/bug75917.phpt
  D  ext/spl/tests/SplFileObject/bug77024.phpt
  D  ext/spl/tests/SplFileObject/bug78976.phpt
  D  ext/spl/tests/SplFileObject/fgetcsv_blank_file.phpt
  D  ext/spl/tests/bug69181.phpt
  D  ext/spl/tests/gh13685.phpt
  D  ext/spl/tests/gh16217.phpt
  M  ext/phar/tests/phar_oo_008.phpt
  M  ext/spl/spl_directory.stub.php
  M  ext/spl/spl_directory_arginfo.h
  M  ext/spl/tests/SplFileObject/SplFileObject_fflush_basic_001.phpt
  M  ext/spl/tests/SplFileObject/SplFileObject_fpassthru_basic.phpt
  M  ext/spl/tests/SplFileObject/SplFileObject_fscanf_basic.phpt
  M  ext/spl/tests/SplFileObject/SplFileObject_fstat_with_basic_fstat_disabled.phpt


Diff:

diff --git a/ext/phar/tests/phar_oo_008.phpt b/ext/phar/tests/phar_oo_008.phpt
index f1ef081f12a6..8121ca8f1056 100644
--- a/ext/phar/tests/phar_oo_008.phpt
+++ b/ext/phar/tests/phar_oo_008.phpt
@@ -29,53 +29,34 @@ foreach($f as $k => $v)
     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 @@ __halt_compiler();
 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 000000000000..edcb98b825a9
--- /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 57407007c0a5..9e2ebd9ccc4a 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 3a5bd37d49d5..0eb6969cb517 100644
--- a/ext/spl/spl_directory_arginfo.h
+++ b/ext/spl/spl_directory_arginfo.h
@@ -1,5 +1,5 @@
 /* This is a generated file, edit spl_directory.stub.php instead.
- * Stub hash: de8ef9b284ceb46a1d55b22d4a5a3009d04bc2af */
+ * Stub hash: 3313c7bc6d9691a01903e6625630863e2b1e1bf7 */
 
 ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileInfo___construct, 0, 0, 1)
 	ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
@@ -438,10 +438,10 @@ static const zend_function_entry class_SplFileObject_methods[] = {
 	ZEND_ME(SplFileObject, valid, arginfo_class_SplFileObject_valid, ZEND_ACC_PUBLIC)
 	ZEND_ME(SplFileObject, fgets, arginfo_class_SplFileObject_fgets, ZEND_ACC_PUBLIC)
 	ZEND_ME(SplFileObject, fread, arginfo_class_SplFileObject_fread, ZEND_ACC_PUBLIC)
-	ZEND_ME(SplFileObject, fgetcsv, arginfo_class_SplFileObject_fgetcsv, ZEND_ACC_PUBLIC)
-	ZEND_ME(SplFileObject, fputcsv, arginfo_class_SplFileObject_fputcsv, ZEND_ACC_PUBLIC)
-	ZEND_ME(SplFileObject, setCsvControl, arginfo_class_SplFileObject_setCsvControl, ZEND_ACC_PUBLIC)
-	ZEND_ME(SplFileObject, getCsvControl, arginfo_class_SplFileObject_getCsvControl, ZEND_ACC_PUBLIC)
+	ZEND_ME(SplFileObject, fgetcsv, arginfo_class_SplFileObject_fgetcsv, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED)
+	ZEND_ME(SplFileObject, fputcsv, arginfo_class_SplFileObject_fputcsv, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED)
+	ZEND_ME(SplFileObject, setCsvControl, arginfo_class_SplFileObject_setCsvControl, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED)
+	ZEND_ME(SplFileObject, getCsvControl, arginfo_class_SplFileObject_getCsvControl, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED)
 	ZEND_ME(SplFileObject, flock, arginfo_class_SplFileObject_flock, ZEND_ACC_PUBLIC)
 	ZEND_ME(SplFileObject, fflush, arginfo_class_SplFileObject_fflush, ZEND_ACC_PUBLIC)
 	ZEND_ME(SplFileObject, ftell, arginfo_class_SplFileObject_ftell, ZEND_ACC_PUBLIC)
@@ -635,6 +635,23 @@ static zend_class_entry *register_class_SplFileObject(zend_class_entry *class_en
 	zend_declare_typed_class_constant(class_entry, const_READ_CSV_name, &const_READ_CSV_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
 	zend_string_release_ex(const_READ_CSV_name, true);
 
+
+	zend_attribute *attribute_Deprecated_func_fgetcsv_0 = zend_add_function_attribute(zend_hash_str_find_ptr(&class_entry->function_table, "fgetcsv", sizeof("fgetcsv") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 1);
+	ZVAL_STR(&attribute_Deprecated_func_fgetcsv_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_6));
+	attribute_Deprecated_func_fgetcsv_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE);
+
+	zend_attribute *attribute_Deprecated_func_fputcsv_0 = zend_add_function_attribute(zend_hash_str_find_ptr(&class_entry->function_table, "fputcsv", sizeof("fputcsv") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 1);
+	ZVAL_STR(&attribute_Deprecated_func_fputcsv_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_6));
+	attribute_Deprecated_func_fputcsv_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE);
+
+	zend_attribute *attribute_Deprecated_func_setcsvcontrol_0 = zend_add_function_attribute(zend_hash_str_find_ptr(&class_entry->function_table, "setcsvcontrol", sizeof("setcsvcontrol") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 1);
+	ZVAL_STR(&attribute_Deprecated_func_setcsvcontrol_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_6));
+	attribute_Deprecated_func_setcsvcontrol_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE);
+
+	zend_attribute *attribute_Deprecated_func_getcsvcontrol_0 = zend_add_function_attribute(zend_hash_str_find_ptr(&class_entry->function_table, "getcsvcontrol", sizeof("getcsvcontrol") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 1);
+	ZVAL_STR(&attribute_Deprecated_func_getcsvcontrol_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_6));
+	attribute_Deprecated_func_getcsvcontrol_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE);
+
 	return class_entry;
 }
 
diff --git a/ext/spl/tests/SplFileObject/SplFileObject_fflush_basic_001.phpt b/ext/spl/tests/SplFileObject/SplFileObject_fflush_basic_001.phpt
index b399a852008e..7d5d90f43d6d 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 @@ SplFileObject::fflush function - basic test
 /*
  * 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 0498b6c91297..000000000000
--- 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 a79047830b69..f32ecc9fbadb 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 02de3f8d1276..c7f3fee0c629 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 dda7f1e4283f..26573b6af170 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 @@ SplFileObject::fstat when fstat() has been disabled.
 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 be5d20ce99e3..000000000000
--- 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 dd42be924cdd..1c59408a058e 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fgetcsv_basic.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fgetcsv_basic.phpt
@@ -23,7 +23,10 @@ var_dump($fo->fgetcsv());
 <?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 13bbfd9064ab..8eafc3780b64 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 @@ var_dump($fo->fgetcsv('|'));
 <?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 99ce5203edf0..1551d4034dc2 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 @@ try {
 <?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 d200d440f776..fc83c3f8757f 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 @@ var_dump($fo->fgetcsv(enclosure: '"'));
 <?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 a13ac8d62a53..71b973ab7a16 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 @@ try {
 <?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 4a8bccaf671a..eedc801ba08c 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 @@ var_dump($fo->fgetcsv(',', '"', '"'));
 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 b6a878f3cf35..d923d5997918 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 @@ var_dump($fo->fgetcsv());
 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 000000000000..b14f4177c50c
--- /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 d2421e23271f..324017a44672 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 @@ try {
 <?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 a9bba9a6c4e8..0ab1bcb2d563 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv.phpt
@@ -5,7 +5,7 @@ SplFileObject::fputcsv(): functionality tests
 $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 @@ $list = array (
 );
 
 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 41b1db637f24..1806e7e872d3 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_002.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_002.phpt
@@ -17,6 +17,10 @@ $file = __DIR__ . '/SplFileObject_fputcsv1.csv';
 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 2b9e649678bd..814e3ccea1be 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation1.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation1.phpt
@@ -42,13 +42,13 @@ foreach ($csv_lists as $csv_list) {
     } 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 6c6f5109df04..7409045c2915 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation10.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation10.phpt
@@ -36,12 +36,12 @@ foreach ($fields as $field) {
     } 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 b59dfafcfcb7..dd435e2c55ec 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation11.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation11.phpt
@@ -42,14 +42,14 @@ foreach ($csv_lists as $csv_list) {
     } 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 04fd4c30b276..0fda717e16b8 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation12.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation12.phpt
@@ -43,14 +43,14 @@ foreach ($csv_lists as $csv_list) {
     } 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 136491f915eb..e0e6d7962301 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation13.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation13.phpt
@@ -25,7 +25,9 @@ echo "Done\n";
 $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 8a8cb968b0af..a1a32130790c 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation14.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation14.phpt
@@ -30,8 +30,12 @@ echo "Done\n";
 $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 0762af9f214b..9911518830ee 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation15.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation15.phpt
@@ -15,6 +15,9 @@ foreach ($file as $line) {
     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 d2bca8572f5b..796b9ac6ee79 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation16.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation16.phpt
@@ -12,7 +12,7 @@ $eol_chars = ['||', '|', '\n', "\n"];
 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 468b66b44c23..b42cbb7aa15c 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation5.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation5.phpt
@@ -42,14 +42,14 @@ foreach ($csv_lists as $csv_list) {
     } 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 8a4fb8ed9c5d..49c745da1781 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation6.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation6.phpt
@@ -45,14 +45,14 @@ foreach ($csv_lists as $csv_list) {
     } 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 46642a4f52d7..058abb6faab7 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation7.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation7.phpt
@@ -45,14 +45,14 @@ foreach ($csv_lists as $csv_list) {
     } 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 608a61bf3d57..f78965120e41 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_fputcsv_variation8.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_fputcsv_variation8.phpt
@@ -45,14 +45,14 @@ foreach ($csv_lists as $csv_list) {
     } 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 97af917cb2ea..3224145f9e7a 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 @@ $obj = New SplFileObject(__DIR__.'/SplFileObject_testinput.csv');
 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 a8b7cb730d0f..0c4d3e04903c 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_setCsvControl_basic.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_setCsvControl_basic.phpt
@@ -24,7 +24,8 @@ foreach ($s as $row) {
 <?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 3ff6478ca1df..d5168af4ebda 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_setCsvControl_error001.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_setCsvControl_error001.phpt
@@ -23,5 +23,6 @@ try {
 <?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 3a33c479fa06..85ba6a34f6e6 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_setCsvControl_error002.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_setCsvControl_error002.phpt
@@ -23,5 +23,6 @@ try {
 <?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 a68d0ad29780..8bf9de8f2700 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_setCsvControl_error003.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_setCsvControl_error003.phpt
@@ -25,5 +25,6 @@ try {
 <?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 8c8e52e9743c..3fb97a6e6c00 100644
--- a/ext/spl/tests/SplFileObject/SplFileObject_setCsvControl_variation001.phpt
+++ b/ext/spl/tests/SplFileObject/csv/SplFileObject_setCsvControl_variation001.phpt
@@ -24,6 +24,8 @@ foreach ($s as $row) {
 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 39b526a86aba..815b06676e92 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 = new SplTempFileObject;
 $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 000000000000..41a9e31c8d7c
--- /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 000000000000..175321c44772
--- /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 085fccd32652..4c866ea1f5f6 100644
--- a/ext/spl/tests/bug69181.phpt
+++ b/ext/spl/tests/SplFileObject/csv/bug69181.phpt
@@ -12,14 +12,14 @@ CSV;
 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 27ce3f792c59..f85792451e9a 100644
--- a/ext/spl/tests/SplFileObject/bug75917.phpt
+++ b/ext/spl/tests/SplFileObject/csv/bug75917.phpt
@@ -20,6 +20,11 @@ $tmp->setFlags(SplFileObject::READ_CSV | SplFileObject::SKIP_EMPTY);
 $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 a82713fb3a83..ac0d83ce152f 100644
--- a/ext/spl/tests/SplFileObject/bug77024.phpt
+++ b/ext/spl/tests/SplFileObject/csv/bug77024.phpt
@@ -19,7 +19,10 @@ unset($file);
 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 23123a34eb3b..41783bcfa6ee 100644
--- a/ext/spl/tests/SplFileObject/bug78976.phpt
+++ b/ext/spl/tests/SplFileObject/csv/bug78976.phpt
@@ -6,5 +6,8 @@ $file = new SplFileObject('php://memory', 'r');
 $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 7bd97a158c43..272f88f9cf56 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->setFlags(SplFileObject::SKIP_EMPTY);
 $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 3f79f9280f5a..a9bf3121fbb7 100644
--- a/ext/spl/tests/gh13685.phpt
+++ b/ext/spl/tests/SplFileObject/csv/gh13685.phpt
@@ -39,13 +39,21 @@ try {
 }
 
 ?>
---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 c6a0846e64f9..fb57b43dea05 100644
--- a/ext/spl/tests/gh16217.phpt
+++ b/ext/spl/tests/SplFileObject/csv/gh16217.phpt
@@ -28,7 +28,8 @@ try {
 
 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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.