Создание поддельного дескриптора файла - PullRequest
2 голосов
/ 26 января 2012

Это, вероятно, невозможно, но я подумал, что спрошу и посмотрю, пропустил ли я что-то.То, что я ищу, - это способ использования функций, которые требуют дескриптор указателя файла без необходимости записывать фактический файл.

Я знаю, что мог бы использовать временный файл, выполнить свои операции и затем прочитать файл обратно в выводБуфер и удалите файл.Однако это означает задержку от записи на диск и чтения с диска.Было бы намного лучше для скорости и ресурсов в моем случае, если бы я мог просто сделать что-то вроде

$tmp = createFakeFile();
fputscsv($tmp, array(/*** an array of csv fields ***/));
echo $tmp;

Я сомневаюсь, что это существует, но если бы вы когда-нибудь слышали о способе сделать что-то подобное, я былюблю слышать об этом

Спасибо

Ответы [ 2 ]

5 голосов
/ 26 января 2012

Для этого вы можете использовать файлы php: // memory и php: // temp.

Cite:

php: // memory и php: // tempявляются потоками чтения-записи, которые позволяют хранить временные данные в подобной файлу оболочке.Единственное различие между ними заключается в том, что php: // memory всегда будет хранить свои данные в памяти, тогда как php: // temp будет использовать временный файл, как только объем хранимых данных достигнет предопределенного предела (по умолчанию 2 МБ).Расположение этого временного файла определяется так же, как и функция sys_get_temp_dir ().

Предел памяти php: // temp может контролироваться добавлением / maxmemory: NN, где NN - максимальное количестводанных в памяти перед использованием временного файла в байтах.

http://php.net/manual/en/wrappers.php.php

1 голос
/ 26 января 2012

Существует действительно способ сделать это: stream_wrapper_register().

Этот пример класса должен делать то, что вы хотите, он создает дескриптор файла, который фактически просто хранится в памяти.

Сказав это, php://memory и в некоторой степени php://temp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...