Windows上的PEAR目录问题

时间:2010-07-15 11:29:51

标签: php windows pear

我已经下载了PHP的ZIP存档并在我的个人资料下提取了它。然后我需要一些PEAR包。 go-pear.bat显然已经很好地安装了PEAR,之后我只需要进入pear.bat文件并将路径调整为php.exe - 没什么大不了的,然后就跑了。

但是,当我尝试安装时,我收到以下错误:

  

错误:无法使用mkdir C:\ php5 \ pear \ data \ Console_CommandLine \ data

当然,根目录中不允许写入访问,但我有点不知道PEAR是怎么认为它应该在既不存在也不在任何地方配置的位置安装任何东西。 PHP目前位于H:\以下(取代我的个人资料)。我在PEAR安装期间输入的所有路径都是理智的,我可以找到C:\php5的唯一位置在PEAR/go-pear.phar和文档中。其中一个是我不应该改变的东西,我想,另一件事与程序本身无关。

现在,我可能会进入并将C:\php5作为当前PHP所在目录的联结/符号链接或实际将其安装在该位置 - 这两件事我宁愿避免,因为这最初只是为了对某事的一点考验。

我查看了pear help install,显然我可以使用-P-R,因此请设置一些路径。我猜这些之间的确切差异仍然不明确,但尝试它们并没有什么坏处。不知怎的,结果是......出乎意料:

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

  

错误:未能使用mkdir C:\ Downloads \ php \ PEAR \ php5 \ pear \ data \ Console_CommandLine \ data

虽然-R使用相同的路径(显然-R指示存储下载的位置,因为之前我认为我不应该触摸此功能)会带来更多乐趣:

  

下载目录“C:\ Downloads \ php \ PEAR \ Users \ JOHANN~1 \ AppData \ Local \ Temp \ pear \ download”不可写。将download_dir配置变量更改为可写目录

现在我想都C:\php5是硬编码的地方没有明显的原因(我的环境变量中还含有什么之类的),所以我会去再次挖掘,这次寻找短字符串,因此结果列表更长。

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

6 个答案:

答案 0 :(得分:19)

问题是PEAR在Windows目录中查找其ini文件,并且因为它没有在那里找到它,所以它会采用猜测位置的方式。更糟糕的是,您无法使用pear config-set更改任何配置设置,因为PEAR没有要写入的pear.ini。同时,PEAR忽略其自己目录中的现有pear.ini文件。一团糟。请参阅此bug report

如果只有一个全局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"

答案 1 :(得分:4)

michael h's answer更好的选择可能是:

  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);
    }
    
  4. 在处理多个PHP / PEAR版本/安装时,尤其是在同时运行多个PHP / PEAR版本/安装时,此解决方案不易出现危险,因为您可以避免环境破坏。

    显然,PEAR开发人员忽视了WINDOWSProgram Files和朋友自Windows Vista以来被弃用为应用程序数据目录的事实,并且通常不再可以被非提升的应用程序写入。 (出于安全考虑的原因。)

答案 2 :(得分:2)

查看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是未设置另一个的内置默认目录。

答案 3 :(得分:2)

您可以通过

指定配置文件
pear -c /path/to/config/file $command

答案 4 :(得分:2)

我遇到了同样的问题。我的配置文件在C:\Windows目录中丢失了 - go-pear安装程序肯定有问题 - 我指定了不同的INI文件位置,但我的愿望还没有实现。

我将pear.ini复制到C:\windows,一切都开始有效。

答案 5 :(得分:1)

如果您的PHP安装已经在C:\驱动器以外的其他地方完成,那么“pear install”命令可能会抛出错误。

示例:在我的情况下,xampp已安装到E:\驱动器中,“pear install”抛出错误。

Error got when I run the command. This also happen for PHPDocumentor 解: 我进入“pear”目录并检查为不同的梨相关目录设置的配置值。默认情况下,所有都设置为C:\驱动器。因此,我们需要将这些设置更改为正确的路径。 在"以管理员身份运行"中打开命令提示符模式。

Pear default setting 现在像这样改变xampp中的五个路径

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

如果您正在使用C驱动器并获得相同的错误,那么上述语句也将保持相同,只需将驱动器名称E:\替换为C:\反之亦然。 C:驱动器的示例

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

然后按回车键,将显示配置设置成功

的消息

像这样你必须输入5个命令。

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

config-set succeeded

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

config-set succeeded

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

config-set succeeded

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

config-set succeeded

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

config-set succeeded

Finally installed pear