Оболочка потока и запись в 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 также не было никакой информации.
Поэтому я надеялся, что кто-нибудь здесь имел представление о том, что может быть причиной этой проблемы. Возможно, какое-то разрешение выдается где-то или что-то?