2009-12-13 3 views
2

У меня есть 2 компьютера Mac, общая конфигурация которых я хочу синхронизировать. Для Apache и PHP я храню файлы conf (httpd.conf и php.ini, соответственно) в моем Dropbox (~/Dropbox/config) и использую символические ссылки для ссылки на общий доступ из ожидаемого местоположения.Настройка include_path в общем файле php.ini

Аналогичным образом, я разделяю пару кодовых баз таким же образом. Физические файлы находятся в ~/Dropbox/Development и связаны с ~/Development/. Теперь мне нужно поделиться библиотекой служебных классов, и я не могу понять, как это сделать. Проблема в том, что каждый каталог в игре находится в моем домашнем каталоге, и мое имя пользователя отличается на каждой машине. На одном, это ~/rwilkerson и это ~/rob с другой.

Как я могу заставить свой php.ini разрешить это? В моем httpd.conf я сделал это, используя переменные среды. Например, в файле конфигурации виртуального хоста я могу установить для моего веб-корня значение /Users/${SUDO_USER}/path/to/webroot. Поскольку я использую sudo для перезапуска Apache (sudo apachectl restart), переменная окружения оценивает правильное имя пользователя на той машине, на которой я включен.

Насколько я могу судить, я не могу использовать переменные в своем php.ini аналогичным образом. Я думал, что если бы я просто включил оба пути в мой include_path, PHP просто проигнорировал бы тот, который не существует на данной машине, но это, похоже, не так. Мои общие библиотеки будут включены только в том случае, если правильный путь отображается до неправильного пути.

Я не могу найти ни одного ресурса, который разъясняет нюансы того, как работает директива include_path, поэтому я не могу найти никакого способа обойти это очевидное ограничение. У кого-нибудь есть идеи?

Ответ:

Я закончил с использованием раствора StasM # 1 ниже. В моем файле httpd.conf (также совместно), я добавил:

php_value include_path "/opt/local/lib/php:${HOME}/Dropbox/Development/lib/php/classes" 

Делать это отменяют любое значение в php.ini и прекрасно работали.

ответ

1

include_path следует игнорировать каталоги, которых не существует. Но кроме этого, вы можете сделать одно из следующего:

  1. Использование httpd.conf, чтобы установить ваш include_path через php_value директива
  2. При запуске 5.3, используя user_ini.filename
  3. Используйте auto_prepend_file включить скрипт, который бы правильно рассчитать включить путь и установить его с помощью set_include_path() перед сценарием друг друга.
+0

Я вроде предположил, что 'include_path' будет игнорировать несуществующие каталоги, но это, похоже, не так. Однако, поскольку вы подтвердили, я сделаю еще несколько испытаний. Может быть, я просто не сделал достаточно глубокую проверку. Однако идея 'httpd.conf' хорошая. Не уверен, почему я об этом не думал, но есть ли способ «включить php_value include_path» _append_ путь включения, а не перезаписывать его? –

+0

Да, это просто не работает. Если у меня есть '/ Users/rwilkerson/Dropbox/dev/lib/php/classes' перед'/Users/rob/Dropbox/dev/lib/php/classes' в моем 'include_path' (на машине, домашний каталог которой'/Users/rob', классы не загружаются. Если я меняю порядок, они это делают. –

+0

Это похоже на ошибку, возможно, вы хотите отправить вопрос с воспроизведением на bugs.php.net? – StasM

1

Я также разрабатываю на нескольких машинах (все маки), и самый простой способ сохранить все в синхронизации - git, dropbox и zend_config.

У меня есть родительская директория git,/git, а затем каждый проект каждый/git/projecta/git/projectb. Таким образом, вы не имеете проблем с $ HOME или ~/

Любые изменения, которые я делаю, нажимают на Dropbox, и он синхронизируется по всем машинам в реальном времени.

С Zend_Config я есть конфигурационный файл для каждого проекта, который я обычно хранят в /etc/projecta.ini Это будет указывать на внешние библиотеки, БД Params и т.д.

Что касается общих библиотек, я пытаюсь чтобы каждый из моих проектов имел все свои зависимости. Каждый проект представляет собой приложение, html/public, library. И папка библиотеки будет иметь грушу, zend и т. Д., Propel.

Что касается проблемы include_path, почему бы не сохранить это в общем каталоге на всех ваших компьютерах./usr/local/lib/php для всех ваших библиотек, а затем символически привязать его к Dropbox и сделать то же самое со всеми вашими проектами. Затем в вашем приложении установите include_path в/usr/local/lib/php или установите его в php.ini.

Смежные вопросы