Я загрузил ZIP-архив PHP и извлек его под свой профиль. Затем мне понадобились пакеты PEAR. go-pear.bat
по go-pear.bat
видимому, установил PEAR просто отлично, мне просто нужно было после этого перейти в файл pear.bat
и адаптировать путь к php.exe
– php.exe
и после этого он работал.
Однако, когда я пытаюсь установить что-то, я получаю следующую ошибку:
ERROR: не удалось выполнить mkdir C: \ php5 \ pear \ data \ Console_CommandLine \ data
Естественно, в корневом каталоге не разрешен доступ на запись, но я немного не понимаю, как именно PEAR считает, что он должен устанавливать что-либо в месте, которое ни существует, ни настроено нигде. В настоящее время PHP находится где-то ниже H:\
(subst'ed в моем профиле). Все пути, которые я вводил во время установки PEAR, были работоспособны, и единственное место, где я могу найти C:\php5
находится в PEAR/go-pear.phar
и в документации. Один из них – это то, что я не должен менять в любом случае, я думаю, и другое вряд ли имеет отношение к самой программе.
Теперь я, вероятно, могу войти и сделать C:\php5
/ symlink в каталог, в котором находится PHP в настоящее время или фактически установить его в этом месте – обе вещи, которые я бы предпочел избежать, поскольку это изначально предназначалось для небольшого теста что нибудь.
Я с тех пор смотрел в pear help install
и, видимо, я могу использовать -P
или -R
чтобы установить некоторые пути. Точная разница между ними до сих пор остается неясной для меня, но, думаю, это не помешает попробовать. Как-то результат был … неожиданным:
-PH:\Downloads\php\PEAR
привели к забавной ошибке (среди прочего)
ERROR: не удалось выполнить 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" не может быть записан. Изменить переменную config_load_dir на записываемый каталог
К настоящему моменту я предполагаю, что C:\
и php5
где-то жестко закодированы без видимой причины (мои переменные среды также не содержат ничего подобного), поэтому я снова буду рыть, на этот раз ищу более короткую строку и, следовательно, более длинные списки результатов.
Но если у кого-то есть представление об этом, тем может быть полезно.
Проблема в том, что 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"
Немного лучший вариант, чем ответ Майкла Х, может быть:
Откройте $prefix\pear\PEAR\Config.php
где $prefix
– это значение, используемое в установщике PEAR. (В моей системе Windows $prefix
был C:\php\5.4.0
)
Найдите раздел ниже:
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); }
И внесите следующие изменения:
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 не обратили внимания на то, что WINDOWS
, Program Files
и друзья устарели как каталоги приложений-данных с Windows Vista и, как правило, больше не доступны для записи приложениями с невыполненными правами. (По соображениям безопасности).
Посмотрите параметры 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
является встроенным каталогом по умолчанию, когда вы не устанавливаете другой.
вы можете указать конфигурационный файл через
pear -c /path/to/config/file $command
У меня была та же проблема. Мой конфигурационный файл отсутствовал в каталоге C:\Windows
– что-то не так с установщиком go-pear – я указал другое местоположение файла INI
, но мое желание не сбылось.
Я скопировал pear.ini
в C:\windows
и все начало работать.