2010-07-15 22 views
8

He descargado el archivo ZIP de PHP y lo he extraído de mi perfil. Entonces necesité algunos paquetes de PEAR. go-pear.bat aparentemente instalé PEAR muy bien, solo necesité entrar en el archivo pear.bat y adaptar la ruta al php.exe - no es gran cosa y luego se ejecutó.Problema de directorio PEAR en Windows

Sin embargo, cuando intento instalar algo me sale el siguiente error:

ERROR: failed to mkdir C:\php5\pear\data\Console_CommandLine\data

Naturalmente, no hay acceso de escritura está permitido en el directorio raíz, pero estoy un poco en una pérdida para saber exactamente cómo piensa PERA debe instalar cualquier cosa en una ubicación que no existe ni está configurada en ningún lugar. PHP actualmente reside en algún lugar debajo de H:\ (subst'ed a mi perfil). Todas las rutas que ingresé durante la instalación de PEAR fueron correctas y el único lugar donde puedo encontrar C:\php5 está en PEAR/go-pear.phar y en la documentación. Una de ellas es algo que no debería cambiar de todos modos, supongo, y la otra cosa no es relevante para el programa en sí.

Ahora, probablemente podría entrar y hacer C:\php5 un enlace/enlace simbólico al directorio donde se encuentra PHP actualmente o instalarlo en esa ubicación, ambas cosas preferiría evitar ya que originalmente estaba destinado para una pequeña prueba de algo.

Desde que miré en pear help install y al parecer puedo usar -P o -R así que establezco algunas rutas. La diferencia exacta entre ellos todavía no está clara para mí, pero no va a doler intentarlos, supongo. De alguna manera, los resultados fueron inesperados ...:

-P H:\Downloads\php\PEAR dio como resultado el error de diversión (entre otros)

ERROR: failed to mkdir C:\Downloads\php\PEAR\php5\pear\data\Console_CommandLine\data

mientras -R usando el mismo camino (al parecer -R dicta donde se almacenan las descargas, ya que trabajó antes de que yo supongo que no debería tocar este) dio lugar a aún más divertido:

download directory "C:\Downloads\php\PEAR\Users\JOHANN~1\AppData\Local\Temp\pear\download" is not writeable. Change download_dir config variable to a writeable dir

Por ahora supongo tanto C:\php5 y están codificados en alguna parte sin ninguna razón aparente (mis variables de entorno tampoco contienen nada de ese tipo), así que iré a cavar de nuevo, esta vez buscando cadenas más cortas y, por lo tanto, listas de resultados más largas.

Pero si alguien tiene una idea sobre esto mientras tanto, esto podría ser útil.

Respuesta

2

Mira las config-... parámetros del comando PERA:

config-create   Create a Default configuration file 
config-get    Show One Setting 
config-help   Show Information About Setting 
config-set    Change Setting 
config-show   Show All Settings 

presumo C:\php5 es el directorio predeterminado incorporado cuando no se establece otra.

+0

parece prometedor, 'rendimientos config-show' bastantes ajustes lote que apuntan a' C: \ php5 \ something'. Ahora solo necesito averiguar cómo puedo decirle a PEAR que use una ubicación segura para el archivo de configuración. Esperar un archivo de configuración * user * en 'C: \ Windows' es probablemente la cosa más extraña que he visto en mucho tiempo. – Joey

+0

Ok, lo resolvió ahora. Ejecutar 'pera' desde un subdirectorio de' C: \ 'y dar una ruta en el disco' C: 'a la opción' -P' funcionaba, al parecer. – Joey

2

puede especificar el archivo de configuración a través de

pear -c /path/to/config/file $command 
2

que he tenido el mismo problema. Mi archivo de configuración faltaba en el directorio C:\Windows - definitivamente hay algún problema con el instalador de go-pear - Especifiqué una ubicación diferente para el archivo INI, pero mi deseo no se ha cumplido.

He copiado pear.ini en C:\windows y todo comenzó a funcionar.

19

El problema es que PEAR busca su archivo ini en el directorio de Windows y, como no lo encuentra allí, recurre a adivinar la ubicación. Peor aún, no puede cambiar ninguna configuración de configuración con pear config-set porque PEAR no tiene un pear.ini para escribir. Al mismo tiempo, PEAR ignora un archivo pear.ini existente en su propio directorio. Es un desastre. Vea esto bug report.

Si solo hay una instalación global de PEAR, se le puede decir a PEAR dónde buscar un archivo ini creando una variable de entorno, PHP_PEAR_SYSCONF_DIR, apuntando al directorio correcto.

Pero si hay varios, pera local de la instalación, que tendrá que conectar las pear.bat añadiendo esta línea:

IF "%PHP_PEAR_SYSCONF_DIR%"=="" SET "PHP_PEAR_SYSCONF_DIR=C:\path\to\pear.ini\directory"

+0

Parche para pear.bat funcionó bien para la instalación PEAR local. – Subrata

+0

@hashchange ¿Qué línea debería agregarse al archivo bat? – rrrfusco

+2

@rrrfusco Línea 28, en mis instalaciones. De manera más general, en la sección titulada "Comprobar PEAR ENV global, configúrelos si no existen". – hashchange

4

Un poco mejor opción que michael h's answer podría ser:

  1. Abierto $prefix\pear\PEAR\Config.php donde $prefix es el valor utilizado en el instalador PEAR. (En mi sistema de Windows, $prefix fue C:\php\5.4.0)

  2. Encuentra la sección de abajo:

    if (getenv('PHP_PEAR_SYSCONF_DIR')) { 
        define('PEAR_CONFIG_SYSCONFDIR', getenv('PHP_PEAR_SYSCONF_DIR')); 
    } elseif (getenv('SystemRoot')) { 
        define('PEAR_CONFIG_SYSCONFDIR', getenv('SystemRoot')); 
    } else { 
        define('PEAR_CONFIG_SYSCONFDIR', PHP_SYSCONFDIR); 
    } 
    
  3. y hacer los siguientes cambios:

    if (getenv('PHP_PEAR_SYSCONF_DIR')) { 
        define('PEAR_CONFIG_SYSCONFDIR', getenv('PHP_PEAR_SYSCONF_DIR')); 
    //} elseif (getenv('SystemRoot')) { 
        //define('PEAR_CONFIG_SYSCONFDIR', getenv('SystemRoot')); 
    } else { 
        //define('PEAR_CONFIG_SYSCONFDIR', PHP_SYSCONFDIR); 
    
        // This next line is new 
        define('PEAR_CONFIG_SYSCONFDIR', $PEAR_INSTALL_DIR); 
    } 
    

Esta solución es menos PELIGRO DE propenso cuando se trata de múltiples versiones/instalaciones de PHP/PEAR, especialmente cuando se ejecuta más de uno al mismo tiempo, ya que se evitan los entornos t cloqueo.

Aparentemente, los desarrolladores PEAR pasaron por alto el hecho de que WINDOWS, Program Files y sus amigos han quedado obsoletos como directorios de datos de aplicaciones desde Windows Vista, y en general ya no pueden ser escritos por aplicaciones no elevadas. (Por buenas razones de seguridad)

+0

Ese es un buen conjunto de información – Subrata

1

Si su instalación de PHP se ha realizado en otro lugar que no sea la unidad C: \, el comando "pera instalar" puede arrojar errores.

Ejemplo: Aquí en mi caso, el xampp se ha instalado en la unidad E: \ y la "pera de instalación" arroja un error.

Error got when I run the command. This also happen for PHPDocumentor Solución: de entrar en el directorio de “pera” y comprueba los valores de configuración establecidos para los diferentes directorios relacionados con la pera. Todos estaban configurados en C: \ unidad por defecto. Entonces, necesitamos cambiar esas configuraciones para corregir la ruta. Abra el símbolo del sistema en el modo "Ejecutar como administrador".

Pear default setting Ahora cambiar de cinco trayectoria en xampp como esto

E:\xampp\php> 
E:\xampp\php>pear config-set doc_dir E:\xampp\php\pear 

Si está utilizando la unidad C y obteniendo el mismo error, entonces también la declaración anterior permanecerá misma basta con sustituir el nombre de la unidad E: \ a C :\ viceversa. ejemplo para la unidad C:

C:\xampp\php>pear config-set doc_dir C:\xampp\php\pear 

continuación, presione ENTRAR se mostrará un msg de config-set logró

como no tiene que introducir 5 comandos.

E:\xampp\php>pear config-set doc_dir E:\xampp\php\pear 

config-set logró

E:\xampp\php>pear config-set cfg_dir E:\xampp\php\pear 

config-set logró

E:\xampp\php>pear config-set data_dir E:\xampp\php\pear 

config-set logró

E:\xampp\php>pear config-set test_dir E:\xampp\php\pear 

config-set logró

E:\xampp\php>pear config-set www_dir E:\xampp\php\pear 

config-set logró

Finally installed pear