Created
June 8, 2012 08:52
-
-
Save johanmeiring/2894568 to your computer and use it in GitHub Desktop.
PHP str_putcsv function
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* From: http://www.php.net/manual/en/function.str-getcsv.php#88773 and http://www.php.net/manual/en/function.str-getcsv.php#91170 */ | |
if(!function_exists('str_putcsv')) | |
{ | |
function str_putcsv($input, $delimiter = ',', $enclosure = '"') | |
{ | |
// Open a memory "file" for read/write... | |
$fp = fopen('php://temp', 'r+'); | |
// ... write the $input array to the "file" using fputcsv()... | |
fputcsv($fp, $input, $delimiter, $enclosure); | |
// ... rewind the "file" so we can read what we just wrote... | |
rewind($fp); | |
// ... read the entire line into a variable... | |
$data = fread($fp, 1048576); | |
// ... close the "file"... | |
fclose($fp); | |
// ... and return the $data to the caller, with the trailing newline from fgets() removed. | |
return rtrim($data, "\n"); | |
} | |
} |
Another way is to get resource size using ftell
before rewind
$fpSize = ftell($fp);
rewind($fp);
$data = fread($fp, $fpSize);
Also, I'm using $fp = fopen('php://memory', 'r+b');
To save the ammount of writing to disk :)
According to https://www.php.net/manual/en/wrappers.php.php even 'php://temp'
should be in memory too as long as the contents are below a certain limit. Default is 2MiB. If you are not parsing huge arrays, 'php://temp'
and 'php://memory'
will do the same.
Why was it tweaked from the original version, which had $data = fgets($fp);
? And does anyone know why the original version got -1 points while it seems to work well?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Better implemention.
fread($fp, NUMBER_AS_LARGE_AS_YOU_CAN_THINK_OF)
can be replacedstream_get_contents($fp)
.