Оболочка потока и запись в php://memory приводит к внутренней ошибке сервера 500

Я пытаюсь написать пользовательскую оболочку в PHP, используя класс Stream Wrapper. То, что у меня есть сейчас, довольно просто и понятно.

class Stream
{
    public $resource;

    public static function wrap()
    {
        stream_wrapper_unregister(self::PROTOCOL);
        stream_wrapper_register(self::PROTOCOL, __CLASS__);
    }

    public static function unwrap ( )
    {
        stream_wrapper_restore(self::PROTOCOL);
    }

    public function stream_open ( $path, $mode, $options, &$openedPath )
    {
        $this->unwrap();

        // Open memory
        $this->resource = fopen('php://memory', 'rb+');
        $code = file_get_contents ( $path );

        // Write code to memory
        fwrite($this->resource, $code);
        rewind($this->resource);

        $this->wrap();

        return $this->resource !== false;
    }

    // Left out the other methods that the stream wrapper needs 
    // to keep this example simple
    // ...
}

В начале своего кода я открываю поток, вызывая: Stream::wrap(),

Затем он в основном читает любой файл, который require'Эд или include'на протяжении всей моей заявки. Код затем помещается в php://memory и это все. Ничего особенного пока нет.

Суть в том, что этот кусок кода должен работать. Но он выдает внутреннюю ошибку сервера, когда я пытаюсь запустить свое приложение. У меня есть хостинг-провайдер Linux (PHP 5.4.21), где мой код в настоящее время размещен.

Но когда я перемещаю свой код из моего текущего хостера в какую-то другую хостинговую компанию Linux (PHP 5.5.x), тогда все работает нормально.

Когда я даже перемещаю код на свой локальный компьютер (PHP 5.4.6) и запускаю его, тогда все работает хорошо.

Так что, очевидно, проблема заключается в хостинговой компании, которая у меня сейчас есть. Я знаю, что должен отправить их по почте. Но я понятия не имею, что именно вызывает проблему. Было бы хорошо, если бы я мог, по крайней мере, указать им в определенном направлении. Все что у меня есть сейчас

мой код не работает на ваших серверах, который работает нормально на каком-то другом сервере

Я боюсь, что им недостаточно информации.

Я проверил php://memory предел, который установлен в 256M. Этого должно быть более чем достаточно. Так что я понятия не имею, что еще искать. В журнале Apache также не было никакой информации.

Поэтому я надеялся, что кто-нибудь здесь имел представление о том, что может быть причиной этой проблемы. Возможно, какое-то разрешение выдается где-то или что-то?

0 ответов

Другие вопросы по тегам