- Вопрос или проблема
- Правильное решение
- Шаги
- Добавить MongoDB
- Объяснение
- Ответ или решение
- Устранение ошибки ‘openssl/sha.h’ при установке MongoDB на Mac M1 для проекта Laravel
- Шаг 1: Проверка установки Homebrew
- Шаг 2: Установка OpenSSL и необходимых зависимостей
- Шаг 3: Настройка переменных окружения
- Шаг 4: Установка PHP
- Шаг 5: Установка Composer
- Шаг 6: Установка Laravel
- Шаг 7: Установка расширения MongoDB
- Шаг 8: Проверка и настройка
- Заключение
Вопрос или проблема
nssl.c:24:10: фатальная ошибка: файл 'openssl/sha.h' не найден
#include <openssl/sha.h>
^~~~~~~~~~~~~~~
1 ошибка сгенерирована.
make: *** [src/libmongoc/src/libmongoc/src/mongoc/mongoc-crypto-openssl.lo] Ошибка 1
ERROR: `make' завершился неудачей
Детали моей ОС:
НазваниеПродукта: macOS
ВерсияПродукта: 14.3
ВерсияСборки: 23D56
вариант unix
локальный 23.3.0 Версия ядра Darwin 23.3.0: Ср Дек 20 21:30:27 PST 2023; root:xnu-10002.81.5~7/RELEASE_ARM64_T8103 x86_64
версия php: PHP 8.2.4
Я выполнил команду терминала: sudo pecl install mongodb
это с этого сайта:
MongoDB PHP Driver
где моя установка остановилась с этой ошибкой:
nssl.c:24:10: фатальная ошибка: файл 'openssl/sha.h' не найден
#include <openssl/sha.h>
^~~~~~~~~~~~~~~
1 ошибка сгенерирована.
make: *** [src/libmongoc/src/libmongoc/src/mongoc/mongoc-crypto-openssl.lo] Ошибка 1
ERROR: `make' завершился неудачей
Я нашел обходное решение ниже на: Mac OSX фатальная ошибка: ‘openssl/sha.h’ файл не найден
cd /usr/local/include
ln -s ../opt/openssl/include/openssl .
Цитируя комментарий:
Apple прекратила поддержку своих общих библиотек OpenSSL некоторое время назад (с OS X 10.7). Это связано с тем, что OpenSSL не предлагает двоично-совместимость от версии к версии, поэтому мы не можем обновить общие библиотеки до последней версии OpenSSL, не сломав всех существующих клиентов.
но у меня даже нет папки include на моем маке … пожалуйста, помогите
Я получил путь к openssl, выполнив which openssl
в терминале –
/opt/homebrew/bin/openssl
выполнив
% ls -l /opt/homebrew/bin/openssl
lrwxr-xr-x 1 janammaharjan admin 37 Фев 7 22:12
/opt/homebrew/bin/openssl -> ../Cellar/openssl@3/3.2.1/bin/openssl
Правильное решение
Давайте начнем с начала и используем официальный метод установки для PHP, Laravel и расширения MongoDB. В итоге у вас должен быть работающий родной сервер MAMP для разработки.
Шаги
Эти шаги предполагают, что мы хотим использовать Homebrew нативно для всего, что нам нужно в нашей среде разработки, при этом сохраняя версии необходимых инструментов macOS в первозданном виде.
- Установка Homebrew (для полноты информации, вы уже сделали это):
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
– Одна строка
- Установка Node.js/npm:
brew install node
- Установка самой новой версии PHP из репозитория Homebrew:
brew install php
– Если вам нужна другая версия, используйте идентификатор@
. Пример:brew install [email protected]
- Установка Composer для управления зависимостями:
curl -sS https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composer
– Одна строка
- Проверка установки
php --version composer --version
- Установка Laravel – это будет управляться Composer и не должно влиять на повседневное использование:
composer global require laravel/installer
- Создание пустого проекта:
composer create-project --prefer-dist laravel/laravel <имя-приложения>
– Обязательно замените имя-приложения на имя вашего проекта.
- Проверка, запускается ли проект
php artisan serve
– Проверьте ваш браузер на IP-адресе, который вы настроили на порт 8000
Ссылка: Как установить Laravel на macOS
Вышеуказанные шаги гарантируют, что этот ответ и ваш вопрос теперь начинаются с одного и того же места:
Добавить MongoDB
Цитируя из документации MongoDB: Установка библиотеки MongoDB PHP:
Примечание:
Если процесс сборки для любого из методов установки не может найти библиотеку TLS, проверьте, установлены ли пакеты разработки (например, libssl-dev) и pkg-config.
Поскольку ваш вопрос ссылается на эту заметку, давайте исправим это с помощью:
brew install libssl-dev && brew install pkg-config
Объяснение
Пакет libssl-dev
содержит отсутствующий заголовочный файл. Пакет/скрипт pkg config
, установленный в cellar Homebrew, будет искать библиотеки для пакетов, также установленных в cellar. Он не будет сообщать о пути к библиотеке вне Homebrew обратно к make. После установки этих 2 пакетов команда pecl
должна завершиться успешно в соответствии с Интеграцией MongoDB Laravel
я сам ответил на свой вопрос – здесь есть две команды:
curl -sS https://getcomposer.org/installer | php
и
sudo mv composer.phar /usr/local/bin/composer
Запуск их отдельно работает.
Ответ или решение
Устранение ошибки ‘openssl/sha.h’ при установке MongoDB на Mac M1 для проекта Laravel
Если вы сталкиваетесь с ошибкой "fatal error: ‘openssl/sha.h’ file not found" при попытке установить PHP драйвер MongoDB, то это связано с тем, что macOS больше не включает библиотеку OpenSSL по умолчанию, что может привести к отсутствию необходимых заголовочных файлов. Рассмотрим, как решить эту проблему шаг за шагом, используя Homebrew как основное средство управления пакетами.
Шаг 1: Проверка установки Homebrew
Если Homebrew еще не установлен, выполните следующую команду в терминале:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Шаг 2: Установка OpenSSL и необходимых зависимостей
Поскольку ошибка связана с отсутствием заголовочных файлов OpenSSL, сначала необходимо установить OpenSSL и другие необходимые пакеты:
brew install openssl pkg-config
Шаг 3: Настройка переменных окружения
После установки OpenSSL вам потребуется указать системе, где находятся заголовочные файлы OpenSSL. Обычно они находятся в /opt/homebrew/opt/openssl/include
. Убедитесь, что вы добавили пути к include и lib в переменные окружения. Добавьте следующие строки в ваш ~/.zshrc
или ~/.bash_profile
, в зависимости от вашей оболочки:
export PATH="/opt/homebrew/opt/openssl/bin:$PATH"
export LDFLAGS="-L/opt/homebrew/opt/openssl/lib"
export CPPFLAGS="-I/opt/homebrew/opt/openssl/include"
После внесения изменений обновите конфигурацию оболочки:
source ~/.zshrc
или
source ~/.bash_profile
Шаг 4: Установка PHP
Если у вас еще не установлен PHP через Homebrew, выполните следующую команду:
brew install php
Шаг 5: Установка Composer
Composer — это менеджер зависимостей для PHP. Чтобы установить Composer, выполните:
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
Шаг 6: Установка Laravel
Убедитесь, что Composer установлен правильно:
php --version
composer --version
Теперь установите Laravel:
composer global require laravel/installer
Создайте новый проект:
composer create-project --prefer-dist laravel/laravel <имя_вашего_проекта>
Шаг 7: Установка расширения MongoDB
Теперь, когда все необходимые зависимости установлены, вы можете установить драйвер MongoDB для PHP:
pecl install mongodb
Шаг 8: Проверка и настройка
После успешной установки драйвера убедитесь, что вы добавили строку в ваш php.ini, чтобы включить расширение MongoDB:
extension=mongodb.so
Заключение
Следуя этим шагам, вы сможете устранить ошибку с отсутствием openssl/sha.h
и успешно установить PHP драйвер для MongoDB на вашем Mac M1. Если вы продолжаете сталкиваться с проблемами, убедитесь, что все шаги выполнены корректно и без ошибок.