Застрял в обновлении версии PHP на локальном хосте Мохаве

Я пытаюсь заставить PHP7.2 работать на локальном хосте, но phpinfo() продолжает говорить, что 7.1.19 на месте, а ~php -v говорит мне, что PHP7.2.18 на месте.

Я запускаю ~php -v, он говорит:

PHP 7.2.18 (cli) (построено: 2 мая 2019 г., 13:03:01) ( NTS ) Copyright (c) 1997–2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998–2018 Zend Technologies с Zend OPcache v7.2.18, Copyright (c) 1999-2018, Zend Technologies

~эхо $PATH

/usr/local/opt/php@7.2/sbin:/usr/local/opt/php@7.2/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/ Приложения/VMware Fusion.app/Contents/Public:/opt/X11/bin

Я установил PHP7.2 через brew в

➜ php@7.2 пароль
/usr/local/opt/php@7.2

Я ожидаю получить на локальном хосте PHP 7.2.18.

ОБНОВЛЯТЬ

Следуйте этим инструкциям по ссылке, упомянутой @miken32 ( Как использовать установленный php brew? )

Отредактировал httpd.conf в папке /etc/apache2

#LoadModule php7_module libexec/apache2/libphp7.so
LoadModule php7_module /usr/local/opt/php@7.2/lib/httpd/modules/libphp7.so

Если я раскомментирую первую строку и прокомментирую вторую строку, я смогу запустить phpinfo() с локального хоста, однако он говорит, что это PHP 7.1.19, а php -vговорит 7.2.18.

Если я прокомментирую первую строку и раскомментирую вторую строку, localhost не запустится и php -vвыдаст 7.2.18.

Я также выполнил эти шаги, но тоже не повезло.

$ brew update php // get the latest homebrew php packages
$ brew install php@7.2
$ brew link php@7.2 // create an alias to this keg-only version; see comments output during installation
$ echo 'export PATH="/usr/local/opt/php@7.2/bin:$PATH"' >> ~/.bash_profile // add the alias to your path; see comments output during installation
$ source ~/.bash_profile // reload .bash_profile to use the new settings immediately
$ sudo apachectl restart

Также пробовал заваривать, link php71 --forceно это тоже не помогло.

Так что кажется, что веб-сервер не запускается, когда я переключаю строки httpd.conf

Какие шаги я могу предпринять, чтобы запустить 7.2.18?

ОБНОВЛЕНИЕ 2

➜  apache2 sudo apachectl -t  

httpd: синтаксическая ошибка в строке 178 файла /private/etc/apache2/httpd.conf: невозможно загрузить /usr/local/opt/php@7.2/lib/httpd/modules/libphp7.so на сервер: dlopen(/usr/local /opt/php@7.2/lib/httpd/modules/libphp7.so, 10): не найдено подходящего образа. Нашел:\n\t/usr/local/opt/php@7.2/lib/httpd/modules/libphp7.so: подпись кода в (/usr/local/opt/php@7.2/lib/httpd/modules/libphp7 .so) недействителен для использования в процессе с использованием проверки библиотеки: сопоставленный файл не имеет cdhash, полностью неподписан? Код должен быть по крайней мере специально подписан.\n\t/usr/local/opt/php@7.2/lib/httpd/modules/libphp7.so: stat() не удалось с errno=22

Строка 178 говорит:

Модуль загрузки php7_module /usr/local/opt/php@7.2/lib/httpd/modules/libphp7.so

Придется разобраться. Где-то на SO в более раннем посте было сделано предложение, есть ли какие-либо «странные» символы, которые могут вызвать ошибку. Проверил, и единственный странный — это «@». Однако это установка Brew из коробки.

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

Ответы (1)

Вы пытаетесь использовать модуль PHP от HomeBrew с веб-сервером Apache, предоставленным Apple. Это неподдерживаемая конфигурация в Мохаве.

Это не работает, потому что macOS пытается проверить, правильно ли подписано ваше программное обеспечение (т. е. не подделано) — и не проходит эту проверку после того, как вы изменили, какие двоичные файлы будут загружаться. Это можно исправить, отключив SIP (системный Integrity Protection) - но это действительно плохая идея, так как это отключит защиту и в других ваших программах.

Правильный способ продолжить — прекратить использование встроенного веб-сервера Apache и вместо этого использовать другой веб-сервер. Самый простой переход — просто использовать вместо этого Apache, предоставляемый HomeBrew.

Вы можете сделать это, сначала установив Apache из HomeBrew:

brew install httpd

Затем запретите macOS запускать предоставленный Apple Apache при загрузке:

sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist

Убедитесь, что новая строка модуля php, которую вы вставили, теперь не закомментирована, а старая — т.е. сделайте так:

#LoadModule php7_module libexec/apache2/libphp7.so
LoadModule php7_module /usr/local/opt/php@7.2/lib/httpd/modules/libphp7.so

Затем запустите новую установку веб-сервера Apache:

brew services restart httpd

В зависимости от ваших настроек вы сможете подключиться с помощью браузера к localhost:80 или localhost:8080 для просмотра вашего сайта.

Этот действительно помог мне! Теперь я могу запустить localhost:8080 и увидеть «Это работает!». Осталось одно: где я могу найти httpd.conf, чтобы внести необходимые изменения, чтобы fi указывал на /Users/<username>/Sites? Я нашел несколько httpd .conf, но ни один из них не имеет смысла, если я внесу необходимые изменения. Тот, что в /usr/local/etc/httpd, похоже, не вступает в силу.
Обычно это что-то вроде /usr/local/etc/apache2/2.4/httpd.conf или /usr/local/etc/httpd/httpd.conf, в зависимости от того, что именно вы установили. Используйте команду «brew ls -v httpd», чтобы получить список установленных файлов, и вы увидите его там.
@user2037412 user2037412 Поскольку этот ответ помог вам, отметьте ответ как принятый!
Спасибо! Команда brew ls -v httpd показывает файлы, помещенные в '/usr/local/Cellar/httpd/2.4.39/.bottle/etc/httpd'. Есть файл httpd.conf. Учитывая структуру папок, означает ли это, что что-то не так в настройках?
отредактировал несколько файлов httpd.conf и после каждого изменения делал «перезапуск служб brew httpd», но, похоже, никакие изменения не вступают в силу :(
Наконец, удалил brew в соответствии с инструкциями на сайте Brew и выполнил новую настройку на основе Setup Apache и PHP в Mojave , и у меня все заработало. Пффф. Это определенно было бы, если бы Apple поддерживала PHP 7.2 и выше со своим новым программным обеспечением.
комментарии помогли мне, я был почти там. Я делал это: LoadModule php7_module /opt/homebrew/opt/php@7.4/lib/httpd/modules/libphp.so вместо: LoadModule php7_module /opt/homebrew/opt/php@7.4/lib/httpd/modules/libphp7 .так