/** * Prepares a new stream. * * @param string $path Virtual path which should describe the content (e.g. "template/1"), only relevant for error messages * @param string $content Content which will be included * * @throws InvalidArgumentException * * @return string Full path with protocol (e.g. "rex://template/1") */ public static function factory($path, $content) { if (!is_string($path) || empty($path)) { throw new InvalidArgumentException('Expecting $path to be a string and not empty!'); } if (!is_string($content)) { throw new InvalidArgumentException('Expecting $content to be a string!'); } if (null === self::$useRealFiles) { self::$useRealFiles = extension_loaded('suhosin') && !preg_match('/(?:^|,)rex(?::|,|$)/', ini_get('suhosin.executor.include.whitelist')); } if (self::$useRealFiles) { $hash = substr(sha1($content), 0, 7); $path = rex_path::coreCache('stream/' . $path . '/' . $hash); if (!file_exists($path)) { rex_file::put($path, $content); } return $path; } if (!self::$registered) { stream_wrapper_register('rex', __CLASS__); self::$registered = true; } $path = 'rex://' . $path; self::$nextContent[$path] = $content; return $path; }
/** * Prepares a new stream. * * @param string $path Virtual path which should describe the content (e.g. "template/1"), only relevant for error messages * @param string $content Content which will be included * * @throws InvalidArgumentException * * @return string Full path with protocol (e.g. "rex:///template/1") */ public static function factory($path, $content) { if (!is_string($path) || empty($path)) { throw new InvalidArgumentException('Expecting $path to be a string and not empty!'); } if (!is_string($content)) { throw new InvalidArgumentException('Expecting $content to be a string!'); } if (null === self::$useRealFiles) { self::$useRealFiles = extension_loaded('suhosin') && !preg_match('/(?:^|,)rex(?::|,|$)/', ini_get('suhosin.executor.include.whitelist')); } if (self::$useRealFiles) { $hash = substr(sha1($content), 0, 7); $path = rex_path::coreCache('stream/' . $path . '/' . $hash); if (!file_exists($path)) { rex_file::put($path, $content); } return $path; } if (!self::$registered) { stream_wrapper_register('rex', __CLASS__); self::$registered = true; } // 3 slashes needed to sidestep some server url include protections // example: https://www.strato.de/faq/article/622/Warum-erhalte-ich-über-PHP-die-Fehlermeldung-%22Warning:-main()-…:-include(….).html $path = 'rex:///' . $path; self::$nextContent[$path] = $content; return $path; }
/** * Prepares a new stream. * * @param string $path Virtual path which should describe the content (e.g. "template/1"), only relevant for error messages * @param string $content Content which will be included * * @throws InvalidArgumentException * * @return string Full path with protocol (e.g. "rex://template/1") */ public static function factory($path, $content) { if (!is_string($path) || empty($path)) { throw new InvalidArgumentException('Expecting $path to be a string and not empty!'); } if (!is_string($content)) { throw new InvalidArgumentException('Expecting $content to be a string!'); } if (!self::$registered) { stream_wrapper_register('rex', __CLASS__); self::$registered = true; } $path = 'rex://' . $path; self::$nextContent[$path] = $content; return $path; }