Имеет ли php эквивалент python virtualenv или ruby sandbox?
Я использую инструмент python virtualenv для создания отдельных сред, которые могут имитировать среды развертывания для проектов, которые я пишу.
Теперь я собираюсь работать над проектом php, и мне интересно, есть ли что-то подобное? В частности, я надеюсь, что вы сможете запустить один виртуальный хост на apache с одной (более старой) версией php, в то время как все остальное работает на нормальной обновленной версии.
В моей машине для разработки работает ubuntu 11.04, поэтому предпочтительнее использовать решения, которые работают на этой платформе.
Ответы
Ответ 1
Предполагая, что вы используете mod_php, нет способа загрузить несколько разных версий в один и тот же экземпляр Apache. Вы можете запускать несколько разных версий, если вы используете PHP как CGI или FastCGI, но это само по себе приведет к некоторым различиям в поведении от mod_php.
Ответ 2
Поскольку загрузка различных версий php в apache с помощью mod_php кажется нецелесообразной, самый простой способ имитировать установки развертывания и разработки будет с помощью виртуальной машины, о которой вы заявили, что хотите избежать.
Одним из способов облегчения бремени vm для разработчиков является использование чего-то вроде vagrant. С двумя файлами (бродячий файл и файл шеф-повара/марионетки) вы можете "обновить" свои vm, легко создать их и уничтожить для каждого проекта и при необходимости.
Ответ 3
Другой альтернативой виртуальным машинам является docker.
Ответ 4
virtPHP - это инструмент для создания и управления несколькими изолированными средами PHP на одной машине. Это похоже на Python virtualenv, но для PHP. (README)
https://github.com/virtphp/virtphp
Ответ 5
(Не закодировал php в годах, поэтому это может быть устаревшим)
Насколько я помню, вам просто нужно было указать на другой каталог, в котором находятся ваши библиотеки (включая PATH), используя что-то вроде:
include_path = .:/usr/local/lib/php:./include (this goes in php.ini, default libararies)
и в ваших php файлах:
ini_set("include_path", ".:../:./include:../include");
В PHP никогда не было надежной упаковочной системы и библиотечного хранилища, такого как perl/python/ruby, PEAR пытался двигаться в этом направлении, но он был очень закрыт в сравнении и был сложным для настройки в многопроектных средах.
Phark пытается построить порт brew/bundler для php, https://github.com/lox/phark, хотя он не готов к развертыванию.
Ответ 6
Вам может быть интересно: https://github.com/phpenv/phpenv
Ответ 7
На данный момент решения этой проблемы не существует. Единственное решение, которое подходит близко, - это Vagrant и puPHPet.com, как обсуждалось здесь: https://drupal.org/node/2055947
Почему мы не можем иметь такую среду, как python virtualenv или ruby rbenv? Это хороший проект с открытым исходным кодом. Несколько экземпляров PHP могут быть удобными, если мы хотим протестировать некоторые библиотеки в песочницах, а не во всем мире. Мы можем устанавливать зависимости для разных проектов с помощью диспетчера пакетов, такого как Composer.