При запуске сценария PHP путем посещения файла PHP, обслуживаемого моим сервером Apache, я получаю следующую ошибку:
Fatal error: Uncaught Error: Call to undefined function http_send_content_disposition()...
Простой скрипт PHP выглядит следующим образом:
<?php
http_send_content_disposition("video.php", true);
?>
Похоже, у меня есть необходимые http
модуль установлен (если его не нужно вызывать pecl_http
..):
me$ php -m
...
http
...
Вот мой php
информация о версии:
me$ php -v
PHP 7.2.2 (cli) (built: Feb 22 2018 15:07:16) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
me$ which php
/usr/local/bin/php
Вот мой pecl
информация о версии:
me$ pecl -V
PEAR Version: 1.10.5
PHP Version: 7.2.2
Zend Engine Version: 3.2.0
me$ which pecl
/usr/local/bin/pecl
Я запускаю свой сервер Apache (копия, которая была предварительно установлена вместе с Sierra) через:
me$ sudo /usr/sbin/apachectl -k restart
… Который использует конф /private/etc/apache2/httpd.conf
, как подтверждено через:
me$ /usr/sbin/apachectl -V
Server version: Apache/2.4.28 (Unix)
Server built: Oct 29 2017 19:28:54
Server's Module Magic Number: 20120211:68
Server loaded: APR 1.5.2, APR-UTIL 1.5.4
Compiled using: APR 1.5.2, APR-UTIL 1.5.4
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_FLOCK_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="/usr"-D SUEXEC_BIN="/usr/bin/suexec"-D DEFAULT_PIDLOG="/private/var/run/httpd.pid"-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"-D DEFAULT_ERRORLOG="logs/error_log"-D AP_TYPES_CONFIG_FILE="/private/etc/apache2/mime.types"-D SERVER_CONFIG_FILE="/private/etc/apache2/httpd.conf"
… И этот конфигурационный файл правильно содержит строку, чтобы связать соответствующую версию PHP:
# LoadModule php5_module libexec/apache2/libphp5.so
LoadModule php7_module /usr/local/opt/php72/libexec/apache2/libphp7.so
Хотя эта версия Apache поставлялась с Sierra, я установил PHP через:
brew install php72 --with-httpd --with-pear
Я экспортировал следующие пути:
# Ensures PHP extensions are compiled against the Homebrew-managed PHP installation.
export PATH="/usr/local/bin:$PATH"# Ensures the Homebrew-installed php 7.2 becomes the default CL executable.
export PATH="$(brew --prefix homebrew/php/php72)/bin:$PATH"
Я впоследствии установил pecl_http
с помощью:
brew install autoconf
export PHP_AUTOCONF=/usr/local/bin/autoconf
pecl install pecl_http
Это добавило следующие строки в начало /usr/local/etc/php/7.2/php.ini
, который Доморощенный сообщил, чтобы быть php.ini
расположение после установки php72
:
extension="propro.so"extension="http.so"extension="raphf.so"
Я что-то здесь упускаю? Нужно ли явно включать pecl_http
в моем скрипте PHP как-то?
Задача ещё не решена.
Других решений пока нет …