Как я могу заставить Apache использовать PHP 7.0 (не 7.1)?

При установке Ubuntu 16.04 vhost, Apache будет использовать PHP 7.0.22-2+ubuntu16.04.1+deb.sury.org+4.

Однако после попытки разрешить некоторые конфликты путем выполнения apt-get dist-upgrade (и переставший работать), я закончил с плохо поврежденной системой. Мне с тех пор удалось откатывать большинство версий пакета тем, которые являются значением по умолчанию, но Apache использует PHP 7.1.8-2+ubuntu16.04.1+deb.sury.org+4, который является несовместимым с некоторыми PHP-библиотеками, в которых я нуждаюсь.

До сих пор я попробовал:

sudo a2dismod php7.1
sudo a2enmod php7.0
sudo service apache2 restart

Однако это повреждает Apache, и он отказывается перезапускать:

Syntax error on line 140 of /etc/apache2/apache2.conf: Syntax error on line 3 of /etc/apache2/mods-enabled/php7.0.load: Cannot load /usr/lib/apache2/modules/libphp7.0.so

Как я могу заставить Apache выполнять версию PHP по умолчанию (PHP 7.0) снова?

Править: Комментарий к моему [теперь отредактированный] самоответ ниже Dan заставил меня понять что добавлявший следующее третье лицо PPA ppa:ondrej/php может иметь что-то, действительно делают с проблемой.

Так:
Я добавил PPA ppa:ondrej/php на мой сайт.

6
задан 8 August 2017 в 05:46

2 ответа

Я разделю свой ответ на две части. Первая часть описывает, как Ваша проблема произошла, вторая часть является фактическим ответом на Вашу проблему.

Описание

Отказ от ответственности: Большая часть моего описания является в основном предположением, поскольку я не могу действительно знать то, что Вы сделали. Но это - наиболее вероятный сценарий, поскольку я не могу думать иначе, который закончил бы тем, что дал Вам проблему, которую Вы описали.

От проблемы Вы описываете, кажется установкой третьего лица PPA, который установил PHP 7.1 в системе. Наиболее вероятным PPA является PPA Ondrej.

При первой установке PHP Вы установили в следующем методе:

sudo apt install php

php пакет является только meta пакетом и не содержит необходимые двоичные файлы. Это зависит от последней версии доступного пакета PHP (значением по умолчанию 7.0). Таким образом, когда Вы устанавливаете его, php7.0 пакет установлен наряду с php7.0зависимости (и libapache2-mod-php7.0 если Вы имеете apache2) и все те зависимости отмечены в диспетчере пакетов, как "автоматически установлено".

$ apt show php
Package: php
Version: 1:7.0+35ubuntu6
Priority: optional
Section: php
Source: php-defaults (35ubuntu6)
Origin: Ubuntu
Maintainer: Ubuntu Developers 
Original-Maintainer: Debian PHP Maintainers 
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 11.3 kB
Depends: php7.0
Supported: 5y
Download-Size: 2,832 B
APT-Manual-Installed: yes
APT-Sources: http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages
Description: server-side, HTML-embedded scripting language (default)
 PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used
 open source general-purpose scripting language that is especially suited
 for web development and can be embedded into HTML.
 .
 This package is a dependency package, which depends on Debian's default
 PHP version (currently 7.0).

Я полужирный части результата команды, который объясняет, что я просто упомянул.

PPA Ondrej PHP предлагает несколько версий PHP, которые могут быть установлены друг вместе с другом. Таким образом, когда Вы добавили его Ваша система, apt найденный более новой версией PHP, таким образом, это заменило php7.0* с php7.1 наряду с любыми связанными пакетами, которые были автоматически установлены.

Ответ

Существует два метода для устранения проблем.

  1. Полностью удалите третью сторону PPA и вернитесь назад к пакетам PHP по умолчанию

    sudo apt install ppa-purge
    sudo ppa-purge ppa:ondrej/php
    
  2. PPA Ondrej предлагает несколько версий PHP, таким образом, можно установить больше чем одну версию вдоль стороны друг друга. Но Вы включили бы только php7.0 Модуль Apache.

    sudo apt install php7.0 libapache2-mod-php7.0
    sudo a2dismod php7.1
    sudo a2enmod php7.0
    sudo apache2ctl restart
    

    Установка их предыдущим способом установила бы php7.0 пакет, как "вручную установлено" в apt, таким образом, они не будут удалены автоматически без Вас удаляющий их самих. Не забывайте удостоверяться, что установили любые модули PHP, в которых Вы нуждаетесь для php7.0 также (Как sudo apt install php7.0-mysql)

* php7.0 возможно, был сохранен в Вашей системе, установленной, если Вы вручную установили модуль специально для php7.0 (например, php7.0-mysql).

8
ответ дан 23 November 2019 в 07:33

Путем поиска packages.ubuntu.com файл libphp7.0, Я нашел два пакета, содержащие тот файл. Или или оба установленные? libapache2-mod-php7.0 и/или libphp7.0-embed?

Переустановка libapache2-mod-php7.0 с

sudo apt install --reinstall libapache2-mod-php7.0

затем посмотрите то, что там должен считать в пакете. Перечислите содержание с

dpkg -L libapache2-mod-php7.0

Результаты поиска:

 » Ubuntu » Packages » Package Contents Search Results

    Search for libphp7.0.so within filenames
    Search for paths ending with libphp7.0.so 

Search in other suite: [trusty] [xenial] [yakkety] [zesty] [artful]

Limit search to a specific architecture: [amd64] [arm64] [armhf] [i386] [powerpc] [ppc64el] [s390x]

You have searched for files named libphp7.0.so in suite yakkety, all sections, and all architectures. Found 2 results.
File    Packages
/usr/lib/apache2/modules/libphp7.0.so   libapache2-mod-php7.0
/usr/lib/libphp7.0.so   libphp7.0-embed
1
ответ дан 23 November 2019 в 07:33

Другие вопросы по тегам:

Похожие вопросы: