Проблема с директорией PEAR в Windows - PullRequest
8 голосов
/ 15 июля 2010

Я скачал ZIP-архив PHP и извлек его под своим профилем.Затем мне понадобились пакеты 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, или фактически устанавливающий его в этом месте - обе вещи, которых я бы предпочел избегать, поскольку изначально он просто предназначался для небольшой проверки чего-либо.используйте -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 на записываемый dir

. Теперь я думаю, что и C:\, и php5 где-то жестко запрограммированы без видимой причины (мои переменные окружения также не содержат ничего подобного), поэтому я 'Я пойду копать снова, на этот раз в поисках более короткой строки и, следовательно, более длинных списков результатов.

Но если у кого-то есть идеи по этому поводу, это может быть полезно.

Ответы [ 6 ]

19 голосов
/ 19 апреля 2012

Проблема в том, что PEAR ищет свой ini-файл в каталоге Windows, и, поскольку он не находит его там, он прибегает к угадыванию местоположения.Хуже того, вы не можете изменить какие-либо параметры конфигурации с помощью pear config-set, потому что у PEAR нет файла pear.ini для записи.В то же время PEAR игнорирует существующий файл pear.ini в своем собственном каталоге.Это беспорядок.См. Этот отчет об ошибке .

. Если существует только одна глобальная установка PEAR, PEAR можно указать, где искать ini-файл, создав переменную среды PHP_PEAR_SYSCONF_DIR, указывающуюправильный каталог.

Но если есть несколько локальных установок PEAR, вам придется исправлять pear.bat, добавив следующую строку:

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

4 голосов
/ 25 апреля 2012

Чуть лучше, чем ответ Майкла h может быть:

  1. Открыть $prefix\pear\PEAR\Config.php, где $prefix - это значение, используемое в программе установки PEAR.(В моей системе Windows $prefix было C:\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, особенно при одновременном запуске более одной версии, так как вы избегаете средыclobbering.

Очевидно, разработчики PEAR упустили из виду тот факт, что WINDOWS, Program Files и друзья устарели как каталоги данных приложений со времен Windows Vista и, как правило, больше не доступны для записи приложениям без повышенных прав.(Из соображений безопасности.)

2 голосов
/ 26 января 2012

У меня была такая же проблема. Мой конфигурационный файл отсутствовал в каталоге C:\Windows - определенно что-то не так с установщиком go-pear - я указал другое местоположение INI файла, но мое желание не сбылось.

Я скопировал pear.ini в C:\windows и все начало работать.

2 голосов
/ 12 октября 2010

вы можете указать файл конфигурации через

pear -c /path/to/config/file $command
2 голосов
/ 15 июля 2010

Посмотрите на параметры config-... команды PEAR:

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 - это встроенный каталог по умолчанию, если вы не установите другой.

1 голос
/ 12 февраля 2018

Если ваша установка PHP была сделана где-то еще, кроме диска C: \, то команда «pear install» может выдавать ошибки.

Пример: здесь, в моем случае, xampp был установлен в E: \ drive and «pear install» выдает ошибку.

Ошибка при запуске команды.Это также происходит с PHPDocumentor Решение: я попадаю в каталог «pear» и проверяю значения конфигурации, установленные для разных каталогов, относящихся к pear.Все были установлены в C: \ диск по умолчанию.Итак, нам нужно изменить эти настройки, чтобы исправить путь.Откройте командную строку в режиме «Запуск от имени администратора».

Значение по умолчанию для Pear * Теперь измените пять путей в xampp следующим образом

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

Если вы используете диск Cи получая ту же ошибку, то и вышеприведенный оператор останется прежним, просто замените имя диска E: \ на C: \ наоборот.пример для диска C: drive

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

Затем нажмите клавишу ввода, и на экране отобразится сообщение config-успешно выполнено

Таким образом, вы должны ввести 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

Конфигурирование успешно выполнено

Окончательно установлена ​​груша

...