【问题标题】:PEAR directory problem on WindowsWindows 上的 PEAR 目录问题
【发布时间】:2011-03-16 08:49:32
【问题描述】:

我已经下载了 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 都被硬编码了,没有明显的原因(我的环境变量也没有包含任何此类内容)所以我会再次挖掘,这次寻找更短的字符串,因此更长结果列表。

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

【问题讨论】:

    标签: php windows pear


    【解决方案1】:

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

    【讨论】:

    • 看起来很有希望,config-show 产生了很多指向C:\php5\something 的设置。现在我只需要弄清楚如何告诉 PEAR 为配置文件使用合理的位置。期待C:\Windows 中的 user 配置文件可能是我一段时间以来见过的最奇怪的事情。
    • 好的,现在解决了。从C:` and giving a path on the C:` 驱动器的子目录运行pear-P 选项显然有效。
    【解决方案2】:

    你可以通过指定配置文件

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        问题是 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"

        【讨论】:

        • @hashchange 这应该添加到 bat 文件中的哪一行?
        • @rrrfusco 第 28 行,在我的安装中。更一般地,在标题为“检查 PEAR 全局 ENV,如果它们不存在则设置它们”的部分中。
        【解决方案5】:

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

        此解决方案在处理多个 PHP/PEAR 版本/安装时不太容易发生危险,尤其是在同时运行多个版本时,因为您可以避免环境破坏。

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

        【讨论】:

          【解决方案6】:

          如果您的 PHP 安装在 C:\ 驱动器以外的其他位置完成,则“pear install”命令可能会引发错误。

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

          Error got when I run the command. This also happen for PHPDocumentor 解决方案: 我进入“pear”目录并检查为不同 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
          

          然后按回车会显示config-set succeeded

          的消息

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

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

          配置设置成功

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

          配置设置成功

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

          配置设置成功

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

          配置设置成功

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

          配置设置成功

          Finally installed pear

          【讨论】:

            猜你喜欢
            • 2011-11-22
            • 1970-01-01
            • 2016-12-04
            • 1970-01-01
            • 1970-01-01
            • 2018-08-15
            • 2011-01-18
            • 2011-10-26
            • 2011-04-08
            相关资源
            最近更新 更多