Некоторым это может показаться тривиальным, но я всю жизнь занимался разработкой на Windows и перешел на Linux только на этой неделе - все для меня в новинку.
Я слежу Следующее руководство о том, как установить расширения php в Linux. Он отлично работал с расширением mbstring, однако, когда я пытался сделать то же самое для bz2 и curl, я получал ошибку: configure: error: Cannot find php-config. Please use --with-php-config=PATH
Кто-нибудь сталкивался с этой ошибкой раньше и мог бы пролить свет на понятные новичкам термины? Оба расширения поставляются с исходным кодом PHP 5.5. Мои используемые команды и их результаты следующие:
Найдите php-config:
[Art@art ~]$ sudo find -name php-config
./php/scripts/php-config
Подтвердите, что php-config существует:
[Art@art bz2]$ cd ~/php/scripts
[Art@art scripts]$ ls -ltr
total 48
-rw-r--r--. 1 Art Art 4690 May 28 09:06 phpize.m4
-rw-r--r--. 1 Art Art 4499 May 28 09:06 phpize.in
-rw-r--r--. 1 Art Art 2070 May 28 09:06 php-config.in
-rw-r--r--. 1 Art Art 1744 May 28 09:06 Makefile.frag
drwxr-xr-x. 3 Art Art 4096 May 28 09:06 dev
drwxr-xr-x. 2 Art Art 4096 May 28 09:06 apache
-rw-r--r--. 1 root root 4522 Jun 25 09:16 phpize
-rw-r--r--. 1 root root 2260 Jun 25 09:16 php-config
drwxr-xr-x. 2 Art Art 4096 Jun 25 09:16 man1
phpize bz2
[Art@art scripts]$ cd ~/php/ext/bz2
[Art@art bz2]$ phpize
Configuring for:
PHP Api Version: 20121113
Zend Module Api No: 20121212
Zend Extension Api No: 220121212
конфигурация и ошибка
[Art@art bz2]$ sudo ./configure --with-php-config=~/php/scripts/php-config
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for a sed that does not truncate output... /bin/sed
checking for cc... cc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether cc accepts -g... yes
checking for cc option to accept ISO C89... none needed
checking how to run the C preprocessor... cc -E
checking for icc... no
checking for suncc... no
checking whether cc understands -c and -o together... yes
checking for system library directory... lib
checking if compiler supports -R... no
checking if compiler supports -Wl,-rpath,... yes
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu
configure: error: Cannot find php-config. Please use --with-php-config=PATH
Запуск php-config:
Usage: /usr/local/bin/php-config [OPTION]
Options:
--prefix [/usr/local]
--includes [-I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local
/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib]
--ldflags []
--libs [-lcrypt -lresolv -lcrypt -lrt -lrt -lm -ldl -lnsl -lxml2 -lz -lm -lxml2 -lz -lm -lxml2 -lz -lm
-lcrypt -lxml2 -lz -lm -lxml2 -lz -lm -lxml2 -lz -lm -lcrypt ]
--extension-dir [/usr/local/lib/php/extensions/no-debug-zts-20121212]
--include-dir [/usr/local/include/php]
--man-dir [/usr/local/php/man]
--php-binary [/usr/local/bin/php]
--php-sapis [ apache2handler cli cgi]
--configure-options [--with-apxs2=/usr/local/apache2/bin/apxs --with-mysql]
--version [5.5.13]
--vernum [50513]
У вас должен быть установлен пакет devel:
# yum install php-devel
какой пакет включает /usr/bin/php-config
. Это обычно верно для компонентов RH / CentOS, когда вы планируете выйти за рамки трассы и компилировать свои собственные материалы; в foo-devel
пакет содержит все необходимое, чтобы вы могли скомпилировать foo
. Разделение сделано для того, чтобы тем администраторам, которые не собираются создавать вещи вручную, не нужно было устанавливать все хуки.
редактировать: Я не говорю, что вы не должны создавать расширения из исходного кода; просто, если вы хотите, вам понадобится php-devel
. Но то, что вы говорите в своем комментарии, предполагает, что вы пытаетесь перестроить весь PHP - в этом случае вы не можете начать с расширений, вам нужно будет построить весь PHP, начиная с PHP.
Если вы можете уточнить, с какой минимальной версией PHP вы можете жить, возможно, найдутся лучшие способы ее получения, чем ее создание.
Я предполагаю, что вы не соответствуете phpize и php-config. Убедитесь, что вы используете оба из одной установки. Итак, если вы настроите php с некоторым префиксом $A
, используйте:
$A/bin/phpize
./configure --with-php-config=$A/bin/php-config
Кстати, вы не должны создавать связанные расширения с phpize
. В основном это будет работать, но это не гарантируется (я пробовал расширения curl и bz2, и эти два, похоже, работают). Вместо этого вам следует перестроить php с помощью --enable-<extension>=shared
или --with-<extension>=shared
(проходить --help
настроить, чтобы проверить, какой из них).
Кроме того, обычно рекомендуется использовать пакеты по нескольким причинам (простота удаления, возможность выполнять обновления, отсутствие необходимости в компиляции после сборки пакета и т. Д.). Это также позволит избежать ошибок, возникающих при установке нескольких версий. Это относительно легко сделать с fpm
:
sudo yum install ruby-devel rubygems; sudo gem install fpm
curl -L http://ca1.php.net/get/php-5.5.13.tar.bz2/from/this/mirror | tar xjf -
cd php-5.5.13/
./configure --prefix=/usr --disable-all --enable-mbstring=shared # edit config line to your taste
make -j8
make install INSTALL_ROOT=root
# you can optionally strip the binaries at this point
# a simple would be find root | xargs strip
cd root
# add dependencies with -d foo if necessary, for instance -d libcurl
fpm -s dir -t rpm -n php -v 5.5.13 .
sudo yum localinstall php-5.5.13-1.x86_64.rpm