2010-05-22 16 views
6

He oído que establecer la opción --prefix=PREFIX al compilar PHP en Linux le permitirá tener más de una instalación de PHP a la vez sin que entren en conflicto. (Creo que el valor predeterminado si esto no está configurado es /usr/local). Sin embargo, no estoy seguro de qué es exactamente lo que hace o qué buena configuración usar. Además, también he escuchado que establecerlo en algo distinto al valor predeterminado puede dificultar la instalación de algunas extensiones de PHP.¿Qué hace la opción de configuración de PHP "--prefix = PREFIX"?

./configure --prefix=PREFIX ... 

simplemente me di cuenta de que algunas de las otras opciones, tales como --exec-prefix aún puede necesitar ser ajustado a /usr/local ya que por defecto al valor de --prefix. Esto causaría problemas si el prefijo se configurara en algo como web/phpalt porque cosas como --sbindir están configuradas en `` --exec-prefix +/sbin`.

Directory and file names: 
    --prefix=PREFIX   install architecture-independent files in PREFIX 
          [/usr/local] 
    --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX 
          [same as prefix] 
    --bindir=DIR   user executables in DIR [EPREFIX/bin] 
    --sbindir=DIR   system admin executables in DIR [EPREFIX/sbin] 
    --libexecdir=DIR  program executables in DIR [EPREFIX/libexec] 
    --datadir=DIR   read-only architecture-independent data in DIR 
          [PREFIX/share] 
    --sysconfdir=DIR  read-only single-machine data in DIR [PREFIX/etc] 
    --sharedstatedir=DIR modifiable architecture-independent data in DIR 
          [PREFIX/com] 
    --localstatedir=DIR  modifiable single-machine data in DIR [PREFIX/var] 
    --libdir=DIR   object code libraries in DIR [EPREFIX/lib] 
    --includedir=DIR  C header files in DIR [PREFIX/include] 
    --oldincludedir=DIR  C header files for non-gcc in DIR [/usr/include] 
    --infodir=DIR   info documentation in DIR [PREFIX/info] 
    --mandir=DIR   man documentation in DIR [PREFIX/man] 
    --srcdir=DIR   find the sources in DIR [configure dir or ..] 
    --program-prefix=PREFIX prepend PREFIX to installed program names 
    --program-suffix=SUFFIX append SUFFIX to installed program names 
    --program-transform-name=PROGRAM 
          run sed PROGRAM on installed program names 

Según lo que dice PHP, parece que podría establecer las siguientes opciones sin ningún efecto secundario.

./configure --prefix=/custom/path --exec-prefix=/usr/local 

Sin embargo, esto es solo una suposición.

+0

RE: su actualización - no haga eso. establecer cosas como --exec-prefix, etc, hará que las cosas salgan de tu pequeña caja de arena. Simplemente use --prefix. – timdev

+0

¿Qué sucede si solo quiero configurar php para desarrollar una extensión sin la necesidad de ser sudoer? ¿Necesito el --exec-prefix o no lo hago? –

Respuesta

4

Si quiere cambiar entre 5.2 y 5.3, probablemente sea mejor que compile tanto Apache como PHP desde el origen, en directorios especiales.

Básicamente, puede compilar apache y php5.2 en algún lugar como/web/php52 (dando --prefix =/web/php52 a configure para apache y php. Luego haga lo mismo para apache/php53 con un prefijo como/web/php53

incluso se puede conseguir difícil y hacer cosas como enlaces simbólicos diferentes configuraciones entre las dos instalaciones de Apache para mantener la coherencia (por lo que la diferencia única es que uno se está ejecutando 5.3 y el otro 5.2)

Luego, cuando desee iniciar su servidor 5.2, simplemente diga:

$ /web/php52/bin/apachectl start 

y luego cambiar a 5.3

$ /web/php52/bin/apachectl stop 
$ /web/php53/bin/apachectl start 

tengo algunos (de edad) build scripts disponibles que puede o no puede ahorrar algo de dolor si se está compilando en Linux (CentOS, en particular, pero se puede hacer que funcione con bastante facilidad en las distribuciones no RedHat , también)

+0

Impresionante, así que pude compilar diferentes versiones de PHP en carpetas separadas. Eso es lo que quiero hacer. ¿Hay alguna parte del núcleo PHP que pueda instalarse fuera de la carpeta si configuro 'prefix =/web/php52'? En otras palabras, me gustaría poder eliminar la carpeta '/ web/php52' en caso de que ya no necesite esa versión sin preocuparme por los archivos sobrantes en otras partes del sistema de archivos. Por cierto, usaré nginx, no apache, así que probablemente solo cambie manualmente la ubicación de la ruta de fastcgi PHP al iniciarlo. – Xeoncross

+1

PHP no colocará nada fuera de su prefijo dir, a menos que específicamente le indique que lo haga mediante el uso de otros argumentos para 'configurar'. Alternar cualquiera que sea el directorio que establezca limpiará por completo las cosas. – timdev

0

Todo lo que hace es cambiar la carpeta en la que se instalarán los binarios de PHP.

Cambiarlo cambiará el lugar donde lo está instalando, por lo que técnicamente podría instalar varias copias ... pero ¿por qué haría eso? Eso sería simplemente hacer un dolor de cabeza para todo lo demás (su servidor web/cgi/CLI)

mayoría de las veces, el camino es /usr/local o /usr que instalar los archivos en /usr/local/bin y/usr/bin` respectivamente.

+0

Necesito poder cambiar entre PHP 5.2 y PHP 5.3 para probar. – Xeoncross

+0

@ Xeoncross - Supuse, pero lo más probable es que cause más problemas, lo que irónicamente lo forzará a pasar tiempo pensando si su código tiene un problema, o si tiene que ver con su conmutación 5.2/5.3. ¿Por qué no simplemente ejecutar una máquina virtual o algo con dos instalaciones diferentes de PHP? –

+0

Ya, una VM es una opción, pero esperaba que sería fácil tener varias instalaciones de PHP en Linux como en Windows. – Xeoncross

2

La buena configuración para que utilizar es /usr/local. El paquete de distribución debe usar /usr y los ISV deben usar /opt/<appname>.

Esta ruta se utiliza como la base para el ejecutable CLI ($PREFIX/bin), la biblioteca SAPI y las extensiones.

Cuestiones relacionadas