Ответ 1
У меня была аналогичная проблема с завихрением после обновления до XX (16.04). После переустановки curl с помощью:
sudo apt-get install php-curl
И перезагрузка сервера
sudo service apache2 restart
все нормализовалось:)
Я только что установил php7 для своего Ubuntu. Сначала не было проблем, мой веб-сайт работал. Но внезапно он начал возвращать Call to undefined function curl_init(). Теперь мои страницы содержат завитки, которые не работают.
В phpinfo() он выглядит как Curl. Были похожие вопросы, но ни один из них не обрабатывал его в php7. Я думал, что это должно быть чем-то другим, чем другие.
Изменить: Когда я пытаюсь
php -i | grep curl
в терминале, он возвращает
/etc/php/7.0/cli/conf.d/20-curl.ini,
curl
У меня была аналогичная проблема с завихрением после обновления до XX (16.04). После переустановки curl с помощью:
sudo apt-get install php-curl
И перезагрузка сервера
sudo service apache2 restart
все нормализовалось:)
предположение
Вы установили версию модуля для используемой версии PHP, но проблема не исчезла.
Что здесь происходит?
В вашей системе может быть установлено несколько версий PHP, и Apache не использует версию, которую вы ожидаете использовать.
Как узнать, какая версия PHP Apache используется?
Чтобы узнать это, ключевой идеей является изучение каталога ROOT ваших файлов конфигурации Apache. В командной строке вы можете ввести:
apache2ctl -V //sample output below
AH00558: apache2: Could not reliably determine the server fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Server version: Apache/2.4.7 (Ubuntu)
Server built: Jul 15 2016 15:34:04
Server Module Magic Number: 20120211:27
Server loaded: APR 1.5.1-dev, APR-UTIL 1.5.3
Compiled using: APR 1.5.1-dev, APR-UTIL 1.5.3
Architecture: 64-bit
Server MPM: prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/etc/apache2"
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="mime.types"
-D SERVER_CONFIG_FILE="apache2.conf"
В моем случае мой каталог конфигурации Apache ROOT отображается в
HTTPD_ROOT="/etc/apache2"
Теперь, когда я знаю расположение конфигов, которые использует Apache, теперь я могу точно определить версию PHP, которую он использует, изучив каталог "mods-enabled"
расположенный внутри каталога "/etc/apache2"
.
В моем случае, когда делать ls
внутри "mods-enabled"
, он показывает вывод ff:
access_compat.load authz_user.load filter.load php5.load
...
authz_host.load env.load php5.conf
На данный момент я теперь точно знаю, что Apache использует версию PHP 'php5'
установленную в моей системе, какой бы она ни была.
Затем я попытался воспроизвести ошибку выше, используя эту версию PHP (то есть 'php5'
), выполнив команду ниже:
$ php5 -r "curl_init();"
PHP Fatal error: Call to undefined function curl_init() in Command line code on line 1
Вуаля!
Версия PHP, которую я ожидал использовать в своем Apache, - это "php5.6"
и выполнение той же команды выше с этой версией не "php5.6"
к указанной ошибке.
Решение
Чтобы решить эту проблему, вы должны либо установить версию модуля, соответствующую версии PHP, которую использует Apache (в моем примере php5.0-curl), либо вы можете изменить версию PHP, которая используется в Apache, на версию ты хочешь.
Как мне сказать Apache, какую версию PHP использовать?
Вы можете сделать это с помощью a2enmod/a2dismod
cli Apache2.
Во-первых, я отключаю модуль PHP, который в данный момент активен на моем сервере (например, "php5"
):
a2dismod php5
Затем я включил модуль php для версии PHP, которую я хочу использовать в своем Apache:
a2enmod php5.6
Затем я перезагружаю Apache
service apache2 restart
После того, как я обновил страницу с ошибками на моем сайте, ошибка исчезла.
Возможно, ваш путь к файлу неправильный
Проверьте журнал ошибок Apache
/var/log/apache2/error.log
если вызываемый путь или имя файла соответствует вашему реальному пути, например,
/usr/lib/php/20151012/php_curl.so
В моем случае это был один и тот же путь, но "php_" отсутствовал
/usr/lib/php/20151012/curl.so
Итак, я изменил путь/имя файла соответственно в
/etc/php/7.0/cli/conf.d/20-curl.ini
из
extension=php_curl.so
в
extension=curl.so
Для меня было принято решение обновить apt-get следующей командой, а затем установить php7.0-curl.
sudo add-apt-repository ppa:ondrej/php
Я сделал все вышеперечисленное, но не решил проблему.
Конверт: Ubuntu, php7.1, Laravel 5.6
Решение
sudo add-apt-repository ppa:ondrej/php
sudo apt-get install php7.1-curl
Ваши страницы, вероятно, не сгенерированы с помощью CLI SAPI. Проверьте, что возвращает phpinfo() при запуске с вашего веб-сервера (возможно, он пытается прочитать неправильный файл ini).
Я знаю очень поздний ответ, но думаю, что он полезен, потому что я столкнулся с той же проблемой и пробовал все вышеизложенное, но не сработало. Затем я нажал следующую команду и теперь работает отлично:
apt-get install php7.0-curl
Это решило мою проблему, надеюсь, кому-то тоже будет полезно