summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md14
-rw-r--r--src/AbstractCsv.php29
-rw-r--r--src/Iterator/Filter.php (renamed from src/Iterator/IteratorFilter.php)5
-rw-r--r--src/Iterator/Interval.php (renamed from src/Iterator/IteratorInterval.php)2
-rw-r--r--src/Iterator/SortBy.php (renamed from src/Iterator/IteratorSortBy.php)5
-rw-r--r--src/Reader.php35
-rw-r--r--src/Stream/Filter.php (renamed from src/Stream/StreamFilter.php)5
-rw-r--r--src/Writer.php2
8 files changed, 60 insertions, 37 deletions
diff --git a/README.md b/README.md
index 8302e5e..b7bb20b 100644
--- a/README.md
+++ b/README.md
@@ -14,9 +14,8 @@ League\Csv was designed for developers who wants to deal with CSV data using
modern code and without the high levels of bootstrap and low-levels of
usefulness provided by existing core functions or third party-code.
-This package is compliant with [PSR-1], [PSR-2], and [PSR-4].
+This package is compliant with [PSR-2] and [PSR-4].
-[PSR-1]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-1-basic-coding-standard.md
[PSR-2]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md
[PSR-4]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader.md
@@ -48,15 +47,14 @@ Contribute to this documentation in the [sculpin branch](https://github.com/thep
### Tips
-#### Creating or Editing a CSV file
+* When creating or editing a document using `League\Csv\Writer`, first insert all the data that need to be inserted before anything else. If you manipulate your data before insertion, you may change the file cursor position and get unexpected results.
-* When creating a file using the library, first insert all the data that need to be inserted before starting manipulating the CSV. If you manipulate your data before insertion, you may change the file cursor position and get unexpected results.
+* Even thought you can iterate over you document using `League\Csv\Writer` class, **it is recommend and best practice** to iterate over you CSV using the `League\Csv\Reader` class to avoid any issue.
-* Even thought you can iterate using the `Writer` class **it is recommend and best practice** to iterate over you CSV using the `Reader` class to avoid any issue.
+* The library assumes that your data is UTF-8 encoded. If your are dealing with non-unicode data you **must** enable your data conversion into UTF-8 otherwise output methods will failed. You can transcode you CSV :
+ * using the library [stream filtering methods](http://csv.thephpleague.com/filtering);
+ * or by setting the source [encoding charset](http://csv.thephpleague.com/overview);
-#### CSV encoding charset
-
-The library assumes that your data is UTF-8 encoded. If your are dealing with non-unicode data, use the library [stream filtering mechanism](http://csv.thephpleague.com/filtering) to convert your data into UTF-8 otherwise the output methods may failed.
Testing
-------
diff --git a/src/AbstractCsv.php b/src/AbstractCsv.php
index 8fa8e8c..ecb7d16 100644
--- a/src/AbstractCsv.php
+++ b/src/AbstractCsv.php
@@ -24,7 +24,7 @@ use IteratorAggregate;
use LimitIterator;
use CallbackFilterIterator;
use League\Csv\Iterator\MapIterator;
-use League\Csv\Stream\StreamFilter;
+use League\Csv\Stream\Filter;
/**
* An abstract class to enable basic CSV manipulation
@@ -38,7 +38,7 @@ abstract class AbstractCsv implements JsonSerializable, IteratorAggregate
/**
* Stream Filter Trait
*/
- use StreamFilter;
+ use Filter;
/**
* the field delimiter (one character only)
@@ -150,7 +150,7 @@ abstract class AbstractCsv implements JsonSerializable, IteratorAggregate
*
* @return \League\Csv\AbstractCSv
*/
- protected function createFromCurrentInstance($class_name, $open_mode)
+ protected function newInstance($class_name, $open_mode)
{
$obj = new $class_name($this->path, $open_mode);
$obj->delimiter = $this->delimiter;
@@ -169,9 +169,9 @@ abstract class AbstractCsv implements JsonSerializable, IteratorAggregate
*
* @return \League\Csv\Writer
*/
- public function createWriter($open_mode = 'r+')
+ public function newWriter($open_mode = 'r+')
{
- return $this->createFromCurrentInstance('\League\Csv\Writer', $open_mode);
+ return $this->newInstance('\League\Csv\Writer', $open_mode);
}
/**
@@ -181,9 +181,9 @@ abstract class AbstractCsv implements JsonSerializable, IteratorAggregate
*
* @return \League\Csv\Reader
*/
- public function createReader($open_mode = 'r+')
+ public function newReader($open_mode = 'r+')
{
- return $this->createFromCurrentInstance('\League\Csv\Reader', $open_mode);
+ return $this->newInstance('\League\Csv\Reader', $open_mode);
}
/**
@@ -266,6 +266,7 @@ abstract class AbstractCsv implements JsonSerializable, IteratorAggregate
);
$res[$delim] = count(iterator_to_array($iterator, false));
}
+ $iterator = null;
arsort($res, SORT_NUMERIC);
$res = array_keys(array_filter($res));
if (! $res) {
@@ -454,7 +455,11 @@ abstract class AbstractCsv implements JsonSerializable, IteratorAggregate
*/
public function jsonSerialize()
{
- return iterator_to_array($this->convertToUtf8($this->getIterator()), false);
+ $iterator = $this->convertToUtf8($this->getIterator());
+ $res = iterator_to_array($iterator, false);
+ $iterator = null;
+
+ return $res;
}
/**
@@ -467,7 +472,7 @@ abstract class AbstractCsv implements JsonSerializable, IteratorAggregate
$iterator = $this->getIterator();
//@codeCoverageIgnoreStart
if (! is_null($filename) && AbstractCsv::isValidString($filename)) {
- header('Content-Type: text/csv; charset="'.$this->encodingFrom.'"');
+ header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Content-Transfer-Encoding: binary');
if (! $iterator instanceof SplTempFileObject) {
@@ -477,6 +482,7 @@ abstract class AbstractCsv implements JsonSerializable, IteratorAggregate
//@codeCoverageIgnoreEnd
$iterator->rewind();
$iterator->fpassthru();
+ $iterator = null;
}
/**
@@ -505,8 +511,8 @@ abstract class AbstractCsv implements JsonSerializable, IteratorAggregate
{
$doc = new DomDocument('1.0', 'UTF-8');
$root = $doc->createElement($root_name);
- $csv = $this->convertToUtf8($this->getIterator());
- foreach ($csv as $row) {
+ $iterator = $this->convertToUtf8($this->getIterator());
+ foreach ($iterator as $row) {
$item = $doc->createElement($row_name);
foreach ($row as $value) {
$content = $doc->createTextNode($value);
@@ -517,6 +523,7 @@ abstract class AbstractCsv implements JsonSerializable, IteratorAggregate
$root->appendChild($item);
}
$doc->appendChild($root);
+ $iterator = null;
return $doc;
}
diff --git a/src/Iterator/IteratorFilter.php b/src/Iterator/Filter.php
index 888c97c..b04de5e 100644
--- a/src/Iterator/IteratorFilter.php
+++ b/src/Iterator/Filter.php
@@ -16,13 +16,14 @@ use CallbackFilterIterator;
use Iterator;
/**
- * A Trait to filter Iterators
+ * A Trait to filter Iterator against
+ * a collection of CallbackFilterIterator object
*
* @package League.csv
* @since 4.2.1
*
*/
-trait IteratorFilter
+trait Filter
{
/**
* Callable function to filter the iterator
diff --git a/src/Iterator/IteratorInterval.php b/src/Iterator/Interval.php
index fe3cbb4..d963421 100644
--- a/src/Iterator/IteratorInterval.php
+++ b/src/Iterator/Interval.php
@@ -22,7 +22,7 @@ use LimitIterator;
* @since 4.2.1
*
*/
-trait IteratorInterval
+trait Interval
{
/**
* iterator Offset
diff --git a/src/Iterator/IteratorSortBy.php b/src/Iterator/SortBy.php
index 9324364..8e4b2e0 100644
--- a/src/Iterator/IteratorSortBy.php
+++ b/src/Iterator/SortBy.php
@@ -16,13 +16,14 @@ use Iterator;
use ArrayIterator;
/**
- * A Trait to sort an Iterator
+ * A Trait to sort an Iterator against
+ * a collection of Sort functions
*
* @package League.csv
* @since 4.2.1
*
*/
-trait IteratorSortBy
+trait SortBy
{
/**
* Callable function to sort the ArrayObject
diff --git a/src/Reader.php b/src/Reader.php
index f8c733b..eaaffa1 100644
--- a/src/Reader.php
+++ b/src/Reader.php
@@ -16,9 +16,9 @@ use InvalidArgumentException;
use Iterator;
use CallbackFilterIterator;
use League\Csv\Iterator\MapIterator;
-use League\Csv\Iterator\IteratorFilter;
-use League\Csv\Iterator\IteratorSortBy;
-use League\Csv\Iterator\IteratorInterval;
+use League\Csv\Iterator\Filter;
+use League\Csv\Iterator\SortBy;
+use League\Csv\Iterator\Interval;
/**
* A class to manage extracting and filtering a CSV
@@ -32,17 +32,17 @@ class Reader extends AbstractCsv
/**
* Iterator Filtering Trait
*/
- use IteratorFilter;
+ use Filter;
/**
* Iterator Sorting Trait
*/
- use IteratorSortBy;
+ use SortBy;
/**
* Iterator Set Interval Trait
*/
- use IteratorInterval;
+ use Interval;
/**
* {@ihneritdoc}
@@ -116,6 +116,8 @@ class Reader extends AbstractCsv
$index++;
}
+ $iterator = null;
+
return $index;
}
@@ -138,6 +140,7 @@ class Reader extends AbstractCsv
if (! is_array($res)) {
return [];
}
+ $iterator = null;
return $res;
}
@@ -153,7 +156,11 @@ class Reader extends AbstractCsv
{
$iterator = $this->query($callable);
- return iterator_to_array($iterator, false);
+ $res = iterator_to_array($iterator, false);
+
+ $iterator = null;
+
+ return $res;
}
/**
@@ -183,7 +190,11 @@ class Reader extends AbstractCsv
return self::combineArray($keys, $row);
});
- return iterator_to_array($iterator, false);
+ $res = iterator_to_array($iterator, false);
+
+ $iterator = null;
+
+ return $res;
}
/**
@@ -232,7 +243,11 @@ class Reader extends AbstractCsv
return $row[$column_index];
});
- return iterator_to_array($iterator, false);
+ $res = iterator_to_array($iterator, false);
+
+ $iterator = null;
+
+ return $res;
}
/**
@@ -242,6 +257,6 @@ class Reader extends AbstractCsv
*/
public function getWriter($open_mode = 'r+')
{
- return $this->createWriter($open_mode);
+ return $this->newWriter($open_mode);
}
}
diff --git a/src/Stream/StreamFilter.php b/src/Stream/Filter.php
index 1f2ac6e..0e24ae9 100644
--- a/src/Stream/StreamFilter.php
+++ b/src/Stream/Filter.php
@@ -19,13 +19,14 @@ use RuntimeException;
use OutOfBoundsException;
/**
- * A Trait to add ease manipulation Stream Filters
+ * A Trait to ease PHP Stream Filters manipulation
+ * with a SplFileObject
*
* @package League.csv
* @since 5.5.0
*
*/
-trait StreamFilter
+trait Filter
{
/**
* collection of stream filters
diff --git a/src/Writer.php b/src/Writer.php
index 02a2da1..3349f7c 100644
--- a/src/Writer.php
+++ b/src/Writer.php
@@ -321,6 +321,6 @@ class Writer extends AbstractCsv
*/
public function getReader($open_mode = 'r+')
{
- return $this->createReader($open_mode);
+ return $this->newReader($open_mode);
}
}