Laravel на диске хранения выдает внутреннюю ошибку 500 на работающем сервере | журналы не создаются - PullRequest
0 голосов
/ 17 февраля 2020

Я сохраняю файлы изображений на диск. После этого я создаю ZIP и скачиваю его. На localhost все работает нормально.

На живом сервере я получаю:

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at webmaster@example.com to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.

Ошибка возникает, если я хочу сохранить изображение в хранилище:

$user = DB::connection('mysql_live')->table('users')->where('id', $userid)->first();
Storage::disk('gdpr')->put($user->picture, file_get_contents(env('AVATAR_PHOTO_SRC') . $user->picture));

env('AVATAR_PHOTO_SRC') - абсолютный путь к изображению, пример: https://example.com/uploads/thumb/


Файл журнала не создан. И размер почтового индекса составляет менее 1 МБ, изображения еще меньше.

Что здесь происходит?

РЕДАКТИРОВАТЬ

$user->picture является имя файла. пример: example.jpg.

Файл существует и может быть открыт, например, в браузере. Помните, что все работает на локальном хосте.

РЕДАКТИРОВАТЬ

Я нашел войти попробуйте, поймать:

file_get_contents(): https:// wrapper is disabled in the server configuration by allow_url_fopen=0

РЕДАКТИРОВАТЬ

PHP ini нельзя изменить на общем сервере. Мне понадобится альтернативный способ хранения изображения.

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

С PHP: www.php.net/manual/en/filesystem.configuration.php

allow_url_fopen логический

Этот параметр включает блокировщики fopen с поддержкой URL, которые включить доступ к объекту URL, как к файлам. Оболочки по умолчанию предоставляются для доступа к удаленным файлам по протоколу ftp или http, некоторые расширения, такие как zlib, могут регистрировать дополнительные оболочки.

Поэтому вам может потребоваться включить allow_url_fopen=1 в вашем php. ini для включения протокола ftp или http.

0 голосов
/ 18 февраля 2020

Вот решение curl, которое сработало для меня:

$c = curl_init();
curl_setopt($c, CURLOPT_URL, env('AVATAR_PHOTO_SRC') . $user->picture);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_HEADER, 0);

curl_setopt($c, CURLOPT_SSL_VERIFYPEER, true); 
curl_setopt($c, CURLOPT_CAINFO, Storage::disk('other')->path("cacert-2020-01-01.pem")); 
$img = curl_exec($c);

$httpCode_post = curl_getinfo($c, CURLINFO_HTTP_CODE);
$cerror_post = curl_error($c);

curl_close($c); 

Storage::disk('gdpr')->put($user->picture, $img);

Вы можете установить для CURLOPT_SSL_VERIFYPEER значение false, тогда вам не нужен шаг с сертификатом.

Но я советую Вам добавить сертификат. Это супер легко. Просто скачайте здесь и сохраните его где-нибудь в своем хранилище.

...