Вход Регистрация
Файл: vendor/laravel/serializable-closure/src/Support/ClosureStream.php
Строк: 131
<?php

namespace LaravelSerializableClosureSupport;

#[AllowDynamicProperties]
class ClosureStream
{
    
/**
     * The stream protocol.
     */
    
const STREAM_PROTO 'laravel-serializable-closure';

    
/**
     * Checks if this stream is registered.
     *
     * @var bool
     */
    
protected static $isRegistered false;

    
/**
     * The stream content.
     *
     * @var string
     */
    
protected $content;

    
/**
     * The stream content.
     *
     * @var int
     */
    
protected $length;

    
/**
     * The stream pointer.
     *
     * @var int
     */
    
protected $pointer 0;

    
/**
     * Opens file or URL.
     *
     * @param  string  $path
     * @param  string  $mode
     * @param  string  $options
     * @param  string|null  $opened_path
     * @return bool
     */
    
public function stream_open($path$mode$options, &$opened_path)
    {
        
$this->content "<?phpnreturn ".substr($pathstrlen(static::STREAM_PROTO.'://')).';';
        
$this->length strlen($this->content);

        return 
true;
    }

    
/**
     * Read from stream.
     *
     * @param  int  $count
     * @return string
     */
    
public function stream_read($count)
    {
        
$value substr($this->content$this->pointer$count);

        
$this->pointer += $count;

        return 
$value;
    }

    
/**
     * Tests for end-of-file on a file pointer.
     *
     * @return bool
     */
    
public function stream_eof()
    {
        return 
$this->pointer >= $this->length;
    }

    
/**
     * Change stream options.
     *
     * @param  int  $option
     * @param  int  $arg1
     * @param  int  $arg2
     * @return bool
     */
    
public function stream_set_option($option$arg1$arg2)
    {
        return 
false;
    }

    
/**
     * Retrieve information about a file resource.
     *
     * @return array|bool
     */
    
public function stream_stat()
    {
        
$stat stat(__FILE__);
        
// @phpstan-ignore-next-line
        
$stat[7] = $stat['size'] = $this->length;

        return 
$stat;
    }

    
/**
     * Retrieve information about a file.
     *
     * @param  string  $path
     * @param  int  $flags
     * @return array|bool
     */
    
public function url_stat($path$flags)
    {
        
$stat stat(__FILE__);
        
// @phpstan-ignore-next-line
        
$stat[7] = $stat['size'] = $this->length;

        return 
$stat;
    }

    
/**
     * Seeks to specific location in a stream.
     *
     * @param  int  $offset
     * @param  int  $whence
     * @return bool
     */
    
public function stream_seek($offset$whence SEEK_SET)
    {
        
$crt $this->pointer;

        switch (
$whence) {
            case 
SEEK_SET:
                
$this->pointer $offset;
                break;
            case 
SEEK_CUR:
                
$this->pointer += $offset;
                break;
            case 
SEEK_END:
                
$this->pointer $this->length $offset;
                break;
        }

        if (
$this->pointer || $this->pointer >= $this->length) {
            
$this->pointer $crt;

            return 
false;
        }

        return 
true;
    }

    
/**
     * Retrieve the current position of a stream.
     *
     * @return int
     */
    
public function stream_tell()
    {
        return 
$this->pointer;
    }

    
/**
     * Registers the stream.
     *
     * @return void
     */
    
public static function register()
    {
        if (! static::
$isRegistered) {
            static::
$isRegistered stream_wrapper_register(static::STREAM_PROTO__CLASS__);
        }
    }
}
Онлайн: 1
Реклама