Windows上的PEAR目录问题

我已经下载了PHP的ZIP压缩文件并将其解压到我的configuration文件中。 然后我需要一些PEAR包。 go-pear.bat显然安装了PEAR就好了,之后我只需要进入pear.bat文件,然后修改php.exe的path – 没什么大不了的,之后就运行了。

但是,当我尝试安装的东西,我得到以下错误:

错误:未能mkdir C:\ php5 \ pear \ data \ Console_CommandLine \ data

当然,在根目录下不允许写访问权限,但是我知道PEAR认为它应该在任何地方既不存在也不configuration的地方安装任何东西。 PHP目前驻留在H:\ (代替我的个人资料)的某个地方。 我在PEAR安装期间input的所有path都是理智的,唯一可以find的地方是C:\php5 ,位于PEAR/go-pear.phar和文档中。 其中之一是我不应该改变的东西,我猜想,另一件事情是与程序本身几乎没有关系。

现在,我可能会进入并使C:\php5成为一个连接C:\php5 /符号链接到PHP所在的目录,或者实际上将它安装在该位置 – 这两个我宁愿避免的事情,因为这最初只是为了一点一些东西。

我自从看着pear help install ,显然我可以使用-P-R所以设置一些path。 这两者之间的确切区别对我来说还不是很清楚,但我猜,尝试它们不会有什么坏处。 不知何故,结果是……意外的:

-PH:\Downloads\php\PEAR导致了有趣的错误(等)

错误:mkdir失败C:\ Downloads \ php \ PEAR \ php5 \ pear \ data \ Console_CommandLine \ data

-R使用相同的path(显然-R指明下载的存储位置,因为这工作之前,我想我不应该触摸这个)导致更有趣:

下载目录“C:\ Downloads \ php \ PEAR \ Users \ JOHANN〜1 \ AppData \ Local \ Temp \ pear \ download”是不可写的。 将download_dirconfigurationvariables更改为可写的目录

现在我猜想C:\php5都是硬编码的地方,没有明显的原因(我的环境variables也没有包含这种types),所以我会再次挖掘,这次查找更短的string,因此更长的结果列表。

但是如果有人对此有所了解,这可能会有所帮助。

问题是,PEAR在Windows目录中查找它的ini文件,并且因为它没有在那里找到它,所以它猜测该位置。 更糟糕的是,你不能用pear config-set来更改任何配置设置,因为PEAR没有pear.ini来写入。 同时,PEAR将忽略其自己目录中的现有pear.ini文件。 一团糟。 看到这个错误报告 。

如果只有一个全局PEAR安装,可以通过创建指向正确目录的环境变量PHP_PEAR_SYSCONF_DIR来告知PEAR在哪里查找ini文件。

但是,如果有多个本地PEAR安装,则必须添加以下行来修补pear.bat:

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

比迈克尔·H的答案稍微好一些的选择可能是:

  1. 打开$prefix\pear\PEAR\Config.php ,其中$prefix是在PEAR安装程序中使用的值。 (在我的Windows系统上, $prefixC:\php\5.4.0

  2. 找到下面的部分:

     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. 并进行以下更改:

     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); } 

在处理多个PHP / PEAR版本/安装时,这个解决方案的风险较小,特别是在同时运行多个PHP / PEAR版本/安装时,避免环境破坏。

很明显,PEAR开发者忽略了WINDOWSProgram Files和朋友自Windows Vista以来已被弃用为应用程序数据目录的事实,而且通常不再可由非高级应用程序写入。 (出于安全原因。)

查看PEAR命令的config-...参数:

 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 

我认为C:\php5是内置的默认目录,当你不设置另一个。

你可以通过指定配置文件

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

我有同样的问题。 我的配置文件从C:\Windows目录中丢失 – 肯定有错误的安装程序 – 我指定了一个不同的INI文件位置,但我的愿望并没有实现。

我将pear.ini复制到C:\windows ,一切开始工作。