Сообщения об ошибках OpenSSL: ошибка: 14095126 неожиданный eof при чтении - PullRequest
1 голос
/ 06 мая 2020

Описание
Эта ошибка:

file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:14095126:SSL routines:ssl3_read_n:unexpected eof while reading

возвращается, когда:

$file = file_get_contents($url['url'], false, stream_context_create($arrContextOptions));

Шаги для воспроизведения

Видео для загрузки:


https://www.youtube.com/watch?v=r5NzAksjfDI

Извлечь идентификатор видео:

$video_id = $yt->extractVideoId(implode($url));

Получить URL-адрес для загрузки

$links = $yt->getDownloadLinks($video_id, $selector = 'video');

Получить ключ массива для указанного качества видео et c.

$arrayindex = array_search('mp4, video, 1080p, audio', array_column($links, 'format'));

Установить $ url в массив

$url = $links[$arrayindex];

Отключить SSL

$arrContextOptions=array( "ssl"=>array( "verify_peer"=>false, "verify_peer_name"=>false, ), );

Получить файл с URL

$video = file_get_contents($url['url'], false, stream_context_create($arrContextOptions));

Отправить видео обратно в интерфейс

return view('convert', [ 'url' => $url['url'], 'quality' => $url['format'], ]);

Ожидаемое поведение:
Видео загружается
Фактическое поведение:

Я получаю эту ошибку:

file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:14095126:SSL routines:ssl3_read_n:unexpected eof while reading

Код останавливается.

Версия
Последняя версия:
https://github.com/Athlon1600/youtube-downloader/blob/master/src/YouTubeDownloader.php

Дополнительная информация
Этот код находится в структуре laravel, код здесь находится в UrlController. Это локальный сервер разработки, эта ошибка также появляется, когда брандмауэр отключен. Все функции, используемые в моем коде, находятся в YouTubeDownloader. php файл

Ответы [ 2 ]

4 голосов
/ 02 июня 2020

У меня была аналогичная проблема. Я подозреваю, что вы используете Xampp- Windows -7.4.5. В этом случае функция file_get_contents() выдает ошибку SSL на laravel. Она работает на простом (ядре) php на моей стороне.

Вещи, которые вы можете попробовать.

  1. Используйте Curl вместо file_get_contents(). Вы можете создать пользовательскую функцию, которая будет работать таким же образом (с включенным SSL ) вот так.
function file_get_content_curl ($url) 
{
    // Throw Error if the curl function does'nt exist.
    if (!function_exists('curl_init'))
    { 
        die('CURL is not installed!');
    }

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $Url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $output = curl_exec($ch);
    curl_close($ch);
    return $output;
}

Тогда вы можете вызвать функцию вот так.

$data = file_get_content_curl($url);
$save = file_put_contents($path, $data);

Отключить / удалить Skpye. Поскольку skpye использует порт 80/443 (https), если вы используете apache на порту 80, попробуйте переключиться на порт 8080 или удалить skpye, если вы его не используете. Это также может решить проблему. ваша проблема.

Перейти на Xampp- Windows -7.2.3, если вы хотите использовать функцию file_get_contents(). Это также решило проблему для меня.

1 голос
/ 15 июня 2020

Я также столкнулся с этой проблемой и смог более подробно изучить рекомендации @ Huzaifa99.

В моем случае я запускал приложение Laravel с PHP 7.4.5 на Windows. Очевидно, проблема с OpenSSL v1.1.1e, возможно, только с Windows. Установка последней сборки PHP 7.4.6+ устранила мои проблемы. В частности, замена файла libssl-1_1-x64.dll.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...