На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Serafim, fatalist
  
    > Wrappers file:// , Подменить на собственный обработчик
      Хочу перехватить вызов файлов, удаляю текущий обработчик
      ExpandedWrap disabled
        stream_wrapper_unregister( 'file' );
      , регистрирую мой
      ExpandedWrap disabled
        stream_wrapper_register( 'file', 'myWrapperFile' );
      , а потом внутри моего обработчика делаю рестори
      ExpandedWrap disabled
        stream_wrapper_restore( 'file' );
      чтоб после проверки имени файла прочитать его
      ExpandedWrap disabled
        file_get_contents($file);
      .

      А хотелось бы сделать проще. Создать класс
      ExpandedWrap disabled
        class myWrapperFile extends ...... {  }
      , но не могу нигде найти класс, который обрабатывает протокол file:// по умолчанию. :-?
      Сообщение отредактировано: K313 -
        Нету такого :whistle:
          >:( им что, жалко было?....
            нет особого смысла, написать свою обвязку для этого - 5 минут делов
              Цитата Serafim @
              для этого - 5 минут делов
              я уже пол дня пыхчу....
              ExpandedWrap disabled
                ini_set('display_errors', 1);
                error_reporting(E_ALL);
                echo microtime(),'<hr>';
                 
                class my {
                    function pre( $arr = NULL, $str = '' ) { echo '<h3>',$str,'</h3><pre>'; print_r( $arr ); echo '</pre>'; }
                }
                 
                 
                class myWrapperFile {
                 
                    static private $res = array ( );
                    private $f, $fobj;
                 
                //streamWrapper::__construct — Создает новый объект-обертку для потока
                    function __construct( ) {
                    
                        echo '<b>__construct is called</b>';
                        my::pre(func_get_args());
                        echo '<hr>';
                        //self::$res[ ] = new SplFileObject( 'test.ini' );/*$this -> $f = new SplFileObject( $file );*/
                        
                        //return count( self::$res ) - 1;
                    
                    }
                //streamWrapper::__destruct — Уничтожает существующую обертку потока
                    function __destruct( ) {
                    
                        echo '<b>__destruct is called</b>';
                        my::pre(func_get_args());
                        echo '<hr>';
                    
                    }
                //streamWrapper::dir_closedir — Обработчик закрытия директории
                    function dir_closedir( ) { echo '<b>dir_closedir is called</b>';my::pre(func_get_args());echo '<hr>'; }
                //streamWrapper::dir_opendir — Обработчик открытия директории
                    function dir_opendir( ) { echo '<b>dir_opendir is called</b>';my::pre(func_get_args());echo '<hr>'; }
                //streamWrapper::dir_readdir — Обработчик чтения содержимого директории
                    function dir_readdir( ) { echo '<b>dir_readdir is called</b>';my::pre(func_get_args());echo '<hr>'; }
                //streamWrapper::dir_rewinddir — Обработчик перемещения на начало директории
                    function dir_rewinddir( ) { echo '<b>dir_rewinddir is called</b>';my::pre(func_get_args());echo '<hr>'; }
                //streamWrapper::mkdir — Создание директории
                    function mkdir( ) { echo '<b>mkdir is called</b>';my::pre(func_get_args());echo '<hr>'; }
                //streamWrapper::rename — Переименовывает файл или директорию
                    function rename( ) { echo '<b>rename is called</b>';my::pre(func_get_args());echo '<hr>'; }
                //streamWrapper::rmdir — Удаляет директорию
                    function rmdir( ) { echo '<b>rmdir is called</b>';my::pre(func_get_args());echo '<hr>'; }
                //streamWrapper::stream_cast — Получает ресурс уровнем ниже
                    function stream_cast( ) { echo '<b>stream_cast is called</b>';my::pre(func_get_args());echo '<hr>'; }
                //streamWrapper::stream_close — Закрывает ресурс
                    function stream_close( ) { echo '<b>stream_close is called</b>';my::pre(func_get_args());echo '<hr>'; }
                //streamWrapper::stream_eof — Проверяет достижение конца файла по файловому указателю
                    function stream_eof( ) { echo '<b>stream_eof is called</b>';my::pre(func_get_args());echo '<hr>'; }
                //streamWrapper::stream_flush — Сохранение данных вывода
                    function stream_flush( ) { echo '<b>stream_flush is called</b>';my::pre(func_get_args());echo '<hr>'; }
                //streamWrapper::stream_lock — Advisory file locking
                    function stream_lock( ) { echo '<b>stream_lock is called</b>';my::pre(func_get_args());echo '<hr>'; }
                //streamWrapper::stream_metadata — Изменяет настройки потока
                    function stream_metadata( ) { echo '<b>stream_metadata is called</b>';my::pre(func_get_args());echo '<hr>'; }
                //streamWrapper::stream_open — Открывает файл или URL
                    function stream_open( $file, $rw ) {
                    
                        echo '<b>stream_open is called</b>';
                        my::pre(func_get_args());
                        //echo '<hr>';
                        //echo 'this is set = ',(isset($this)?'<b>YES</b>':'NO'),'<pre>',debug_print_backtrace(),'</pre>called by ',get_called_class(),'<hr>';
                        //var_dump($this);
                        /*$f = new SplFileObject( $file ); var_dump($f);return true;/*return $f -> openFile( 'r' );*/
                        //return new SplFileObject( $file );
                        $this -> f = new SplFileInfo( $file );
                        //echo '<pre>';var_dump($a);echo '</pre>size=',$a->getSize(),'<hr>';
                        //echo '<pre>';var_dump($a->openFile());echo '</pre><hr>';
                        //return $a -> openFile( );
                        $this -> fobj = $this -> f -> openFile( );
                        echo '<pre>';var_dump($this -> fobj);echo '</pre><hr>';
                        return true;
                    
                    }
                //streamWrapper::stream_read — Читает из потока
                    function stream_read( ) { echo '<b>stream_read is called</b>';my::pre(func_get_args());echo '<hr>'; }
                //streamWrapper::stream_seek — Перемещение на заданную позицию в потоке
                    function stream_seek( ) { echo '<b>stream_seek is called</b>';my::pre(func_get_args());echo '<hr>'; }
                //streamWrapper::stream_set_option — Изменение настроек потока
                    function stream_set_option( ) { echo '<b>stream_set_option is called</b>';my::pre(func_get_args());echo '<hr>'; }
                //streamWrapper::stream_stat — Получение информации о файловом ресурсе
                    function stream_stat( ) {
                    
                        echo '<b>stream_stat is called</b>';
                        my::pre(func_get_args());
                        echo 'this is setted = ',(isset($this)?'<b>YES</b>':'NO'),'<hr>';
                        /*$this -> stat( );return $f -> stat( );*/
                        return $this -> f -> fstat( );
                    
                    }
                //streamWrapper::stream_tell — Определение текущей позиции потока
                    function stream_tell( ) { echo '<b>stream_tell is called</b>';my::pre(func_get_args());echo '<hr>'; }
                //streamWrapper::stream_truncate — Усечение потока
                    function stream_truncate( ) { echo '<b>stream_truncate is called</b>';my::pre(func_get_args());echo '<hr>'; }
                //streamWrapper::stream_write — Запись в поток
                    function stream_write( ) { echo '<b>stream_write is called</b>';my::pre(func_get_args());echo '<hr>'; }
                //streamWrapper::unlink — Удаление файла
                    function unlink( ) { echo '<b>unlink is called</b>';my::pre(func_get_args());echo '<hr>'; }
                //streamWrapper::url_stat — Получение информации о файле
                    function url_stat( ) {
                    
                        echo '<b>url_stat is called</b>';
                        my::pre(func_get_args());
                        echo 'this is setted = ',(isset($this)?'<b>YES</b>':'NO'),'<hr>';
                        /*return $f -> stat( );*/
                        //var_dump($this);
                        
                        return $this -> fobj -> fstat( );
                    
                    }
                 
                }
                /*
                $a=new SplFileInfo( 'test.ini' );//  SplFileObject
                echo '<pre>';var_dump($a);echo '</pre>size=',$a->getSize(),'<hr>';
                echo '<pre>';var_dump($a->openFile());echo '</pre><hr>';
                */
                 
                stream_wrapper_unregister( 'file' );
                stream_wrapper_register( 'file', 'myWrapperFile' );
                 
                //my::pre(file_get_contents( 'test.ini' ));
                file( 'test.ini' );
                Можешь у меня подсмотреть: https://github.com/SerafimArts/Mirror/blob/...ader/Filter.php

                Добавлено
                Про то, что приведённый тобою код не отвечает стандартам php кода я промолчу: http://getjump.me/ru-php-the-right-way/#Ру..._написанию_кода
                  Цитата Serafim @
                  Можешь у меня подсмотреть: https://github.com/SerafimArts/Mirror/blob/...ader/Filter.php
                  да, молодец! всё чистенько, акуратненько ;)
                  только мне нужен протокол file:// а не mirror:// :'(
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0264 ]   [ 15 queries used ]   [ Generated: 15.05.24, 20:19 GMT ]