2014-02-11 4 views
2

Есть ли способ использовать поток памяти в качестве входных данных для php_strip_whitespace?вход php_strip_whitespace с потоком

Я попытался это, но это не работает, потому что PHP: // память воссоздана каждый раз, когда ручка открыта:

$stream = 'php://memory'; 
    $fp = fopen($stream, 'r+'); 
    fwrite($fp, $this->get_code()); 
    rewind($fp); 

    var_dump(php_strip_whitespace($stream)); -> empty 

Я также попытался данные: // поток, но я получаю эта ошибка:

php_strip_whitespace(): data:\\ wrapper is disabled in the server configuration by allow_url_include=0 

Я хочу глобальное решение независимо от конфигурации сервера. Спасибо

+1

Хм, я сомневаюсь, что, по той причине, вы упоминаете. Является ли определение ['StreamWrapper'] (http://www.php.net/manual/en/class.streamwrapper.php) не вариантом? – Wrikken

ответ

4

Наконец я получил это решение, благодаря Wrikken:

class DummyMemoryStreamWrapper { 

const WRAPPER_NAME = 'var'; 

private static $_content; 
private $_position; 

/** 
* Prepare a new memory stream with the specified content 
* @return string 
*/ 
public static function prepare($content) { 
    if (!in_array(self::WRAPPER_NAME, stream_get_wrappers())) { 
     stream_wrapper_register(self::WRAPPER_NAME, get_class()); 
    } 
    self::$_content = $content; 
} 

public function stream_open($path, $mode, $options, &$opened_path) { 
    $this->_position = 0; 
    return TRUE; 
} 

public function stream_read($count) { 
    $ret = substr(self::$_content, $this->_position, $count); 
    $this->_position += strlen($ret); 
    return $ret; 
} 

public function stream_stat() { 
    return array(); 
} 

public function stream_eof() { 
    return $this->_position >= strlen(self::$_content); 
} 
} 


    $php_code = $this->get_code(); 
    DummyMemoryStreamWrapper::prepare($php_code); 
    $source = php_strip_whitespace(DummyMemoryStreamWrapper::WRAPPER_NAME . '://'); 
1

Почему бы не просто создать временный файл?

<?php 
$temp = tmpfile(); 
fwrite($temp, "writing to tempfile"); 
$info = stream_get_meta_data($temp); 
var_dump(php_strip_whitespace($info['uri'])); 
fclose($temp); // this removes the file 
?> 
+0

Это мой последний способ, и я хочу изменить –

Смежные вопросы