За последние 24 часа нас посетили 18120 программистов и 1653 робота. Сейчас ищут 1657 программистов ...

Временный файл в оперативной памяти

Тема в разделе "Решения, алгоритмы", создана пользователем JonnyB, 25 май 2012.

  1. JonnyB

    JonnyB Активный пользователь

    С нами с:
    13 дек 2009
    Сообщения:
    24
    Симпатии:
    0
    Адрес:
    Самара
    Хочется иногда использовать временный файлы в оперативной памяти во время работы скрипта, как бы это реализовать без монтирования доп раздела в оперативку?
    Что нибудь наподобие http://stackoverflow.com/questions/2987265/using-a-php-memo ... ses-errors
    У кого есть какие мысли?
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    А че б не смонтировать?
    Пхп всётки язык для текста. Юзайте бд и тому подобные решения.
     
  3. JonnyB

    JonnyB Активный пользователь

    С нами с:
    13 дек 2009
    Сообщения:
    24
    Симпатии:
    0
    Адрес:
    Самара
    Интересует решение задачи через php, про остальные решения я в курсе - все юзается когда уместно и возможно.
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну удачи =)
     
  5. JonnyB

    JonnyB Активный пользователь

    С нами с:
    13 дек 2009
    Сообщения:
    24
    Симпатии:
    0
    Адрес:
    Самара
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    и что это даёт? =)
     
  7. JonnyB

    JonnyB Активный пользователь

    С нами с:
    13 дек 2009
    Сообщения:
    24
    Симпатии:
    0
    Адрес:
    Самара
    Возможность написания своего враппера для работы с файловой системой? Что по ссылкам то непонятно?)
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    эм...

    и что это даёт? =)
     
  9. JonnyB

    JonnyB Активный пользователь

    С нами с:
    13 дек 2009
    Сообщения:
    24
    Симпатии:
    0
    Адрес:
    Самара
    Что дает возможность написание своего враппера файловой системы или что дают временные файлы в оперативке? На каждый из этих вариантов можно задать еще по 100500 уточняющих вопросов. Конкретезируйте вопрос пожалуйста :)

    Добавлено спустя 55 секунд:
    Хватит тролить, не очень получается да и смысла не вижу, этож форум о php и раздел вы выбрали неподходящий.
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а вы не путаете божий дар с яичницей случайно?

    если у вас есть файлы в оперативке на рам-диске, зачем вам враппер, если к ним можно обращаться как к файлам =) и всё уже украдено до вас.

    если у вас нет файлов в оперативке, враппер-то как вам поможет?

    тролите пока только вы.

    Добавлено спустя 1 минуту 55 секунд:
    www.jonnyb.ru/ - не открывается
     
  11. JonnyB

    JonnyB Активный пользователь

    С нами с:
    13 дек 2009
    Сообщения:
    24
    Симпатии:
    0
    Адрес:
    Самара
    igordata, вы что то путаете. Я пишу свой враппер, при записи и чтении работает не с файловой системой а, например, с массивом - вот так мне враппер и поможет.

    Сайт мне уже не нужен, спасибо что обратили внимание.

    Добавлено спустя 2 минуты 41 секунду:
    Код (Text):
    1. <?php
    2.  
    3. class CData {
    4.  
    5.     private static $_data;
    6.  
    7.     public static function has($key) {
    8.         return isset(self::$_data[$key]);
    9.     }
    10.  
    11.     public static function get($key) {
    12.         if (self::has($key)) {
    13.             return self::$_data[$key];
    14.         }
    15.  
    16.         return false;
    17.     }
    18.  
    19.     public static function set($key, $value) {
    20.         self::$_data[$key] = $value;
    21.  
    22.         return strlen(self::$_data[$key]);
    23.     }
    24.  
    25.     public static function delete($key) {
    26.         if (self::has($key)) {
    27.             unset(self::$_data[$key]);
    28.             return true;
    29.         }
    30.  
    31.         return false;
    32.     }
    33.  
    34. }
    35.  
    36. class MemoryStream {
    37.  
    38.     private $_position;
    39.     private $_path;
    40.  
    41.     private function _setStreamData($data) {
    42.         return CData::set(__CLASS__ . '_' . $this->_path, $data);
    43.     }
    44.  
    45.     private function _getStreamData() {
    46.         return CData::get(__CLASS__ . '_' . $this->_path);
    47.     }
    48.  
    49.     private function _deteteStreamData() {
    50.         return CData::delete(__CLASS__ . '_' . $this->_path);
    51.     }
    52.  
    53.     public function stream_open($path, $mode, $options, &$opened_path)
    54.     {
    55.         $this->_path = $path;
    56.         if (strpos($mode, 'w') !== false) {
    57.             $this->_setStreamData('');
    58.             $this->_position = 0;
    59.         } else {
    60.             $this->_position = 0;
    61.         }
    62.  
    63.         return true;
    64.     }
    65.  
    66.     public function stream_read($count)
    67.     {
    68.        
    69.         $string = substr($this->_getStreamData(), $this->_position, $count);
    70.         $this->_position += strlen($string);
    71.  
    72.         return $string;
    73.     }
    74.  
    75.     public function stream_write($data)
    76.     {
    77.         $this->_setStreamData(
    78.             substr($this->_getStreamData(), 0, $this->_position)
    79.             . $data
    80.             . substr($this->_getStreamData(), $this->_position + strlen($data))
    81.         );
    82.         $this->_position += strlen($data);
    83.  
    84.         return strlen($data);
    85.     }
    86.  
    87.     public function stream_tell()
    88.     {
    89.         return $this->_position;
    90.     }
    91.  
    92.  
    93.     public function stream_eof()
    94.     {
    95.         return $this->_position >= strlen($this->_getStreamData());
    96.     }
    97.  
    98.     public function stream_seek($offset, $whence)
    99.     {
    100.         switch ($whence) {
    101.             case SEEK_SET:
    102.                 if ($offset < strlen($this->_getStreamData()) && $offset >= 0) {
    103.                     $this->_position = $offset;
    104.                     return true;
    105.                 } else {
    106.                     return false;
    107.                 }
    108.             break;
    109.  
    110.             case SEEK_CUR:
    111.                 if ($offset >= 0) {
    112.                     $this->_position += $offset;
    113.                     return true;
    114.                 } else {
    115.                     return false;
    116.                 }
    117.             break;
    118.  
    119.             case SEEK_END:
    120.                 if (strlen($this->_getStreamData()) + $offset >= 0) {
    121.                     $this->_position = strlen($this->_getStreamData()) + $offset;
    122.                     return true;
    123.                 } else {
    124.                     return false;
    125.                 }
    126.             break;
    127.  
    128.             default:
    129.                 return false;
    130.         }
    131.     }
    132.  
    133.     public function stream_stat() {
    134.     }
    135.  
    136.     public function url_stat($path) {
    137.         $data = array(
    138.             'size' => strlen($this->_getStreamData()),
    139.         );
    140.  
    141.         return $data;
    142.     }
    143.  
    144.     public function unlink($path) {
    145.         $this->_path = $path;
    146.         $this->_deteteStreamData();
    147.     }
    148.  
    149. }
    150.  
    151. stream_wrapper_register('memoryfile', 'MemoryStream')
    152.     or die('Failed to register protocol');
    153.  
    154. file_put_contents('memoryfile://myfile1', 'test content1');
    155. file_put_contents('memoryfile://myfile2', 'test content2');
    156.  
    157. var_dump(file_get_contents('memoryfile://myfile1'));
    158. var_dump(file_get_contents('memoryfile://myfile2'));
    159. unlink('memoryfile://myfile1');
    160. var_dump(file_get_contents('memoryfile://myfile1'));
    Первый набросок, без обработки всяческих исключительных ситуаций + реализованы не все функции для работы с файловой системой. Код каждый правьте под себя, спасибо за внимание)
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    зачем оно надо вобще?
     
  13. JonnyB

    JonnyB Активный пользователь

    С нами с:
    13 дек 2009
    Сообщения:
    24
    Симпатии:
    0
    Адрес:
    Самара
    Хватит уже)) Коммерческая тайна это.
     
  14. hastenax

    hastenax Активный пользователь

    С нами с:
    25 май 2012
    Сообщения:
    4
    Симпатии:
    0
    igordata, столько сообщений, а понять не можете зачем нужны врапперы. Можно и без хттп враппера тянуть файлы с веба например через сокеты :-D

    Такие вещи я включил бы например в любой фреймворк, где нужна быстрая работа со временными данными. Работа ведется с оперативкой как с файлом, а если враппер свой не сделать, то получится нужно диск каждый раз создавать в операционной системе, монтировать, и т.д. Тут написал и работаешь ничего не трогаешь, в ось ваще не лазиешь. Если надо из репа подтянул и продолжил. И под виндой например работает без доп. телодвижений.
     
  15. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я знаю зачем нужен враппер. Я не понимаю что делает ТС.

    есть рамдиски, есть мемкешед и всякое такое. А это зачем?
     
  16. JonnyB

    JonnyB Активный пользователь

    С нами с:
    13 дек 2009
    Сообщения:
    24
    Симпатии:
    0
    Адрес:
    Самара
    Вам выдумать задачу?
    Протягиваем куки курла между запросами через CURLOPT_COOKIEFILE и CURLOPT_COOKIEJAR, при этом мемкешед вам не поможет, рамдиск - его нет или вы провели нагрузочное тестирование, которое показало что это медленнее и неэффективнее, или что бы после того как скрипт падает с экзепшеном файл все таки удялялся из оперативы сам, или, или (100500 раз)
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я вас понял
     
  18. hastenax

    hastenax Активный пользователь

    С нами с:
    25 май 2012
    Сообщения:
    4
    Симпатии:
    0
    Рамдиск и мемкэш это технология внешняя, настраиваемая отдельно, осезависимая, а это работает сразу из коробки. И память никогда не кончится. Что не понятного? Последний абзац перечитайте мой дважды.
     
  19. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    т.е. данные существуют только вашем скрипте в одном экземпляре и между вызовами не сохраняются?
     
  20. JonnyB

    JonnyB Активный пользователь

    С нами с:
    13 дек 2009
    Сообщения:
    24
    Симпатии:
    0
    Адрес:
    Самара
    Жаль что со 100500 раза, включаем голову :)
     
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я просто не согласен с таким подходом.

    Добавлено спустя 45 секунд:
    =)
     
  22. JonnyB

    JonnyB Активный пользователь

    С нами с:
    13 дек 2009
    Сообщения:
    24
    Симпатии:
    0
    Адрес:
    Самара
    igordata, да, совершенно верно
     
  23. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    это вы на
    ответили?
     
  24. JonnyB

    JonnyB Активный пользователь

    С нами с:
    13 дек 2009
    Сообщения:
    24
    Симпатии:
    0
    Адрес:
    Самара
  25. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а переменные и массивы чем не угодили?