Есть ли способ использовать две версии PHP в XAMPP?
Мы запускаем XAMPP с PHP 7.0, потому что для наших новых продуктов требуется PHP 7.
Но есть старые проекты, которые используют такие функции, как mysql_connect
и т.д. Они удалены в PHP 7.0.
Итак, есть ли способ легко изменить версии PHP в XAMPP?
Примечание: пожалуйста, не предлагайте обновить старый проект до совместимости с новыми версиями, потому что я не в состоянии сделать это из-за тех решений, которые я не могу принять как разработчик (просто сотрудник).
Ответы
Ответ 1
Вы можете загрузить любые версии PHP, которые вам нужны, и поместить их в свои собственные каталоги, например.
c:\php5\
c:\php7\
Все, что вам нужно сделать, это указать вашему веб-серверу (Apache), какую версию PHP использовать, что вы делаете, загружая соответствующий модуль. В Apache вы можете сделать это, найдя файл httpd.conf
, а затем отредактировав соответствующую строку:
LoadModule php7_module c:\php7\libphp7.so
Разумеется, вам нужно будет выяснить правильные пути - это просто для иллюстрации.
Сохраните httpd.conf
и перезагрузите сервер. Обратите внимание, что если вы не перезапустите его, изменения не вступят в силу.
Нет никакого переключателя GUI, чтобы это можно было сделать, вам нужно отредактировать файл .conf
, а затем перезапустить Apache. Выполнение этого занимает всего пару секунд, и вы даже можете прокомментировать версию, поэтому "переключение" занимает всего пару нажатий клавиш, например.
Использовать PHP 5:
LoadModule php5_module c:\php5\libphp5.so
#LoadModule php7_module c:\php7\libphp7.so
Использовать PHP 7:
#LoadModule php5_module c:\php5\libphp5.so
LoadModule php7_module c:\php7\libphp7.so
Вам не нужны несколько версий XAMPP, либо для двойной загрузки, либо использовать другую машину, либо любые другие "решения", которые предложили запутанные обходные пути. OP хочет использовать XAMPP и сказать, какую версию PHP использовать. Это самый быстрый и эффективный способ сделать это, и требуется только одна установка XAMPP.
Изменить 1-ноябрь-2017: По-видимому, некоторые люди говорят, что в Windows нет файлов .so
. Ответ, который я дал, был адаптирован из того, как у меня есть настройки на моем Mac (который использует .so
файлы вместо .dll
). Однако принцип ответа по-прежнему точно верен. Вы используете конфигурационный файл Apache, httpd.conf
, чтобы указать, где находится PHP-модуль (.so
или .dll
) в вашей системе. Таким образом, единственным отличием для Windows было бы имя файла и/или местоположение пути. Ответ, который я дал, также верен для ванильной установки Apache/PHP (без XAMPP вообще).
Ответ 2
Зачем переключаться между версиями PHP, когда вы можете использовать несколько версий PHP одновременно с одной установкой xampp? С одной установкой xampp у вас есть 2 варианта:
-
Запустите старую версию PHP только для каталога вашего старого проекта: это будет служить цели большую часть времени, у вас может быть один или два старых проекта, которые вы собираетесь запускать со старой версией PHP. Просто настройте xampp для запуска более старой версии PHP только для этих каталогов проекта.
-
Запустите старую версию PHP на отдельном порту xampp: иногда вы можете обновлять старый проект до последней версии PHP, когда вам нужно запустить один и тот же проект на новой и старой версии PHP туда и обратно. Затем вы можете установить более старую версию PHP на другой порт (скажем, 8056), чтобы при http://localhost/any_project/
по http://localhost/any_project/
xampp запускался PHP 7 и при переходе по http://localhost:8056/any_project/
xampp выполнялся PHP 5.6.
-
Запустите старую версию PHP на виртуальном хосте: вы можете создать виртуальный хост, такой как localhost56, для запуска PHP 5.6, в то время как вы можете использовать PHP 7 на localhost.
Давайте настроим это.
Шаг 1: Скачать PHP
Итак, у вас есть PHP 7, работающий под xampp, вы хотите добавить к нему более старую версию PHP, скажем, PHP 5.6. Загрузите версию PHP zip-архива nts (Non Thread Safe) с php.net (см. Архив для более старых версий) и извлеките файлы c:\xampp\php56
. Потокобезопасная версия не включает php-cgi.exe.
Шаг 2: Настройте php.ini
Откройте файл c:\xampp\php56\php.ini
в блокноте. Если файл не существует, скопируйте php.ini-development
в php.ini
и откройте его в блокноте. Затем раскомментируйте следующую строку:
extension_dir = "ext"
Шаг 3: Настройте apache
Откройте панель управления xampp, нажмите кнопку конфигурации для apache и нажмите Apache (httpd-xampp.conf)
. Откроется текстовый файл, поместите следующие настройки внизу файла:
ScriptAlias /php56 "C:/xampp/php56"
Action application/x-httpd-php56-cgi /php56/php-cgi.exe
<Directory "C:/xampp/php56">
AllowOverride None
Options None
Require all denied
<Files "php-cgi.exe">
Require all granted
</Files>
</Directory>
Примечание: Вы можете добавить больше версий PHP к вашей установке xampp, следуя шагам 1-3, если хотите.
Шаг 4 (вариант 1): [Добавить каталоги для запуска определенной версии PHP]
Теперь вы можете установить каталоги, которые будут работать в PHP 5.6. Просто добавьте следующее в нижней части файла конфигурации, чтобы установить каталоги.
<Directory "C:\xampp\htdocs\my_old_project1">
<FilesMatch "\.php$">
SetHandler application/x-httpd-php56-cgi
</FilesMatch>
</Directory>
<Directory "C:\xampp\htdocs\my_old_project2">
<FilesMatch "\.php$">
SetHandler application/x-httpd-php56-cgi
</FilesMatch>
</Directory>
Шаг 4 (вариант 2): [Запустить старую версию PHP на отдельном порту]
Теперь, чтобы установить PHP v5.6 на порт 8056, добавьте следующий код в конец файла конфигурации.
Listen 8056
<VirtualHost *:8056>
<FilesMatch "\.php$">
SetHandler application/x-httpd-php56-cgi
</FilesMatch>
</VirtualHost>
Шаг 4 (вариант 3): [Запустить старую версию PHP на виртуальном хосте]
Чтобы создать виртуальный хост (localhost56) в каталоге (htdocs56) для использования PHP v5.6 на http://localhost56, создайте каталог htdocs56 в нужном месте и добавьте localhost56 в файл hosts (см. Как), а затем добавьте следующий код в конец файла httpd-xampp.conf.
<VirtualHost localhost56:80>
DocumentRoot "C:\xampp\htdocs56"
ServerName localhost56
<Directory "C:\xampp\htdocs56">
Require all granted
</Directory>
<FilesMatch "\.php$">
SetHandler application/x-httpd-php56-cgi
</FilesMatch>
</VirtualHost>
Готово: сохранить и перезапустить Apache
Сохраните и закройте файл конфигурации, перезапустите apache из панели управления xampp. Если вы выбрали вариант 2, вы можете увидеть дополнительный порт (8056), указанный на панели управления xampp.
![enter image description here]()
Обновление для ошибки:
неправильно сформированный заголовок из сценария php-cgi.exe: неверный заголовок
Если вы столкнулись с вышеуказанной ошибкой, снова откройте httpd-xampp.conf
и закомментируйте следующую строку с httpd-xampp.conf
# (хеш-символ).
SetEnv PHPRC "\\path\\to\\xampp\\php"
Ответ 3
Вы можете download и установить два разных xampps, как я: (сначала php7 второй - php5)
![введите описание изображения здесь]()
и если вы не хотите этого делать, я предлагаю вам использовать версии с версией и изменением, например, здесь.
Ответ 4
Я бы порекомендовал использовать Docker, это позволяет разделить среду на различные компоненты, а также смешивать и подбирать нужные вам компоненты в любое время.
Docker позволит вам запускать один контейнер с MySQL, другой с PHP. Поскольку они являются отдельными изображениями, у вас может быть два контейнера, один PHP 5, другой PHP 7, вы запускаете тот, который вам нужен, и порт 80 может быть сопоставлен с обоими контейнерами.
https://hub.docker.com имеет широкий спектр предварительно настроенных образов, которые вы можете установить и запустить без особых хлопот.
Я также добавил portainer в качестве образа, который позволяет вам управлять различными аспектами вашей настройки докера - из образа докера (я запустил этот контейнер при запуске, чтобы избавить меня от необходимости использовать командную строку). Он не делает все для вас, и иногда проще настроить и запустить образы в первый раз из командной строки, но после настройки вы можете запускать и останавливать их через веб-интерфейс.
Также возможно запускать оба контейнера одновременно и сопоставлять отдельные порты с каждым. Таким образом, порт 80 может быть сопоставлен с PHP 5, а 81 с PHP 81 (или с PHP 7, если вы смотрите это в 2017 году).
Существуют различные учебные пособия по установке Docker (https://docs.docker.com/engine/installation/) и множество других "как" печатать вещи. Попробуйте http://www.masterzendframework.com/docker-development-environment/ для конфигурации среды разработки.
Ответ 5
У вас могут быть две разные версии XAMPP.
- Загрузите эти файлы из https://www.apachefriends.org/download.html и установите в каталог по вашему выбору, например, в C:\5.6.31\xampp и C:\7.1.18\xampp.
- После каждой установки перейдите в установленный каталог (например, C:\5.6.31\xampp, C:\7.1.18\xampp) и запустите "setup_xampp.bat", и вы увидите что-то вроде
this.
- Вы можете сделать ярлыки "xampp-control.exe" на своем рабочем столе (щелкните правой кнопкой мыши "xampp-control.exe" "Отправить на → Рабочий стол" ) и переименуйте ярлыки для ex. "xampp 5.6.31" и "xampp 7.1.8".
- Запустите панель управления XAMPP с двойным щелчком мыши на "xampp-control.exe" или ранее созданной ярлык и запустите серверы Apache и MySQL.
- Чтобы проверить установку, откройте свой браузер и введите 127.0.0.1 или localhost в строке местоположения. Вы должны увидеть начальный экран XAMPP.
- Не открывайте более одной панели управления XAMPP.
- Удаление XAMPP? Просто удалите каталог "xampp".
Но прежде чем отключить apache и mysql.
- Это все. Вы можете использовать разные версии php, открывая соответствующую панель управления XAMPP.
Ответ 6
Я использую Uniserver.
В него встроена эта функция.
http://www.uniformserver.com/
Это так просто.
Uniform Server - это бесплатное легкое WAMP-решение для Windows. Модульный дизайн размером менее 24 МБ включает в себя последние версии Apache2, Perl5, PHP (переключение между PHP53, PHP54, PHP55 или PHP56), MySQL5 или MariaDB5, phpMyAdmin или Adminer4. Не требуется установка! Нет пыли в реестре! просто распакуйте и запустите!
Он даже работает с флешки. Имеет эмуляцию cron, поддержку perl, mariaDB, пару версий Mysql, filezilla server и некоторые другие вещи.
![enter image description here]()
Ответ 7
Да, вы можете. Я предполагаю, что у вас уже установлен xampp. Таким образом,
- Закройте все экземпляры xampp. Используя диспетчер задач, остановите apache и mysqld.
- Затем переименуйте xampp в xampp1 или что-то после имени xampp.
- Теперь загрузите другую версию xampp. Создайте только имя папки xampp. Установите загруженный xampp там.
- Теперь, в зависимости от версии вашего требования xampp, просто переименуйте целевую папку только в xampp и другую папку на другое имя.
То, как я работаю с несколькими установленными xampp
Ответ 8
Если это не абсолютно и определенно XAMPP, вы можете попытаться получить то, что вы хотите, с помощью WAMP. WAMP - это почти одно и то же в другой упаковке.
После установки вы можете просто переключаться между версиями php:
![enter image description here]()
Вы можете установить столько версий PHP, сколько вам нужно.
Вот как это делается подробно.
Просто зайдите сюда: WAMP скачать
Затем выберите ваш базовый сервер, например последний с php7.
Затем, когда WAMP 3 установлен, перейдите в папку: addons и выберите версию php (или версии), которые вы ищете. Они предлагают разновидности php начиная с php 5.3.29, которые должны работать с mysql_connect.
Чтобы установить аддон, во время установки (дважды щелкните exe файл) просто укажите папку, в которой установлен WAMP 3.
Затем вы можете использовать содержимое других папок, таких как: приложения и т.д., Чтобы добавить больше функциональности
Все взаимосвязано, так что вы можете сосредоточиться на кодировании, а не на взломе вашей среды.
Ответ 9
Можно установить несколько версий PHP с одной установкой XAMPP. Приведенные ниже инструкции работают для Windows.
- Установите последнюю версию XAMPP для Windows (в моем случае это было с PHP 7.1)
- Убедитесь, что Apache не запущен из панели управления XAMPP
- Переименуйте каталог php в каталог установки XAMPP, например
C:\xampp\php
C:\xampp\php-7.1.11
. - Загрузите версию PHP, которую вы хотели бы запустить дополнительно (например: PHP 5.4.45)
- Переместите каталог php из версии, которую вы скачали, в каталог установки XAMPP. Переименуйте его, чтобы он включал версию PHP. Например,
C:\xampp\php-5.4.45
.
Теперь вам нужно отредактировать конфигурацию XAMPP и Apache:
- В
C:\xampp\apache\conf\httpd.conf
найдите настройки XAMPP для PHP, вы должны изменить его на что-то вроде:
Там, где вы должны прокомментировать (с #
) другие версии PHP, так что только одна Include
будет интерпретирована в то время.
#XAMPP settings PHP 7
Include "conf/extra/httpd-xampp.conf.7.1"
#XAMPP settings PHP 5.4.45
#Include "conf/extra/httpd-xampp.conf.5.4.45"
-
Теперь в C:\xampp\apache\conf\extra
переименуйте httpd-xampp.conf
в httpd-xampp.conf.7.1
и добавьте новый файл конфигурации для httpd-xampp.conf.5.4.45
. В моем случае я скопировал файл conf другой установки XAMPP для php 5.5, так как синтаксис может немного отличаться для каждой версии.
-
Редактировать httpd-xampp.conf.5.4.45
и httpd-xampp.conf.7.1
и заменить там все ссылки на php
директорию с новым php-XX
версии. Здесь нужно сделать как минимум 10 изменений для каждого файла.
-
Теперь вам нужно отредактировать php.ini для двух версий. Например, для php 7.1 отредактируйте C:\xampp\php-7.1.11\php.ini
где вы замените путь к каталогу php для include_path
, browscap
, error_log
, extension_dir
..
И это оно. Теперь вы можете запустить Apache из панели управления XAMPP. А чтобы переключиться с одной версии на другую, вам нужно всего лишь отредактировать C:\xampp\apache\conf\httpd.conf
и изменить включенную версию PHP перед перезапуском Apache.
Ответ 10
запустите это в командной строке Windows (cmd.exe).
set PATH=C:\xampp\php;%PATH%
измените его в зависимости от того, куда вы положили установку php 7.
Ответ 11
Вам не нужно тратить свое время на эти конфигурации, просто используйте MAMP:)
У MAMP есть функция выбора версии PHP на интерфейсе.
Ответ 12
Следуйте этим простым шагам. В настоящее время я использую XAMPP на PHP 7.2, но для работы над старыми проектами нужен PHP 5.6
ШАГ 1
Загрузите версию PHP Safe Thread на https://windows.php.net/download
Поместите файлы на ваш [диск]:\xampp\php5.6
- Переименуйте папку в зависимости от версии Php
ШАГ 2
Скопируйте [диск]:\xampp\apache\conf\extra\httpd-xampp.conf
Переименуйте его в [Drive]:\xampp\apache\conf\extra\httpd-xampp5.6.conf Переименуйте файл в зависимости от версии Php
ШАГ 3
Отредактируйте только что созданный httpd-xampp5.6.conf
В основном вам нужно изменить весь исходный код PHP и .dll
До
LoadFile "C:/xampp/php/php7ts.dll"
LoadFile "C:/xampp/php/libpq.dll"
LoadModule php7_module "C:/xampp/php/php7apache2_4.dll"
После
LoadFile "C:/xampp/php5.6/php5ts.dll"
LoadFile "C:/xampp/php5.6/libpq.dll"
LoadModule php5_module "C:/xampp/php5.6/php5apache2_4.dll"
Вот мой файл: https://gist.github.com/mpalencia/f8a20c31bffb02fe20d371218c23d1ec
ШАГ 4
Отредактируйте файл [Drive]:\xampp\apache\conf\httpd.conf
До
# XAMPP settings
Include "conf/extra/httpd-xampp.conf"
После
# XAMPP settings
Include "conf/extra/httpd-xampp5.6.conf"
- Вы можете просто отредактировать эту строку при переходе на другую версию
ШАГ 5
Отредактируйте конфигурацию PHP 5.6 - php.ini
Добавьте ваш каталог расширений: extension_dir = "C:\xampp\php5.6\ext"
ШАГ 6
Запустите Apache
ШАГ 7
Изменить путь к переменной среды PHP в Windows
Ответ 13
Это, вероятно, наименее технический ответ на вопрос, но его также легче всего достичь.
Если у вас два диска, таких как C: и D:, вы можете установить отдельный экземпляр XAMPP на оба диска с разными версиями php. Это заняло у меня менее 10 минут и является наименее подверженным ошибкам.
Я просто создаю два ярлыка на рабочем столе для обоих xampp-control.exe и называю ярлыки после их версии php. Я надеюсь, что это поможет кому-то вроде меня, который предпочитает очень быстрое и грязное решение.
Ответ 14
Используйте Docker. Самый простой способ решения различных проблем с версией.
Ответ 15
Может быть, немного поздно, но я использую пакет для переименования папок PHP (слегка измененная версия phpswitch, которую я нашел несколько лет назад).
Вы копируете разные папки в вашу установку XAMPP. Каждая папка PHP (кроме активной) получает номер версии в качестве суффикса (например, php_5.6.32). Во ВСЕХ папках PHP создается файл (PHP_VERSION), который содержит только соответствующий номер версии, поэтому скрипт может получить эту информацию. Но это все описано в README.
Начиная с PHP7, httpd-xampp.conf загружает php7ts.dll вместо php5ts.dll. Поэтому мне пришлось расширить скрипт (PHPSwitch.php), чтобы переименовать эти файлы конфигурации, следуя тому же подходу.
$renameCur = new PHPSwitch_Rename($currInst['path'], $this->_cfg['phpInstallationsPath'] . $this->_cfg['phpDirName'] . '_' . $currInst['version']);
$renameNew = new PHPSwitch_Rename($newInst['path'], $this->_cfg['phpInstallationsPath'] . $this->_cfg['phpDirName']);
$apache_curent = $this->_cfg["phpInstallationsPath"]."apache/conf/extra/httpd-xampp.conf";
$apache_curent_rename = $this->_cfg["phpInstallationsPath"]."apache/conf/extra/httpd-xampp_".$currInst['version'].".conf";
$apache_new = $this->_cfg["phpInstallationsPath"]."apache/conf/extra/httpd-xampp_".$newInst['version'].".conf";
$apache_new_rename = $this->_cfg["phpInstallationsPath"]."apache/conf/extra/httpd-xampp.conf";
$renameCur_apache_conf = new PHPSwitch_Rename($apache_curent, $apache_curent_rename);
$renameNew_apache_conf = new PHPSwitch_Rename($apache_new, $apache_new_rename);
$transaction = new PHPSwitch_Rename_Transaction();
$transaction->add($renameCur);
$transaction->add($renameNew);
$transaction->add($renameCur_apache_conf);
$transaction->add($renameNew_apache_conf);
Ответ 16
Мне нужно было сделать то же самое, поэтому я гуглил, как и пришел к переполнению стека, где у ОП была та же проблема... Итак, мои выводы... Я попытался переименовать файлы со всех сторон, и мой вывод в основном сводил меня слишком долго. SOOOO Я закончил просто установить версию 7 отсюда:
https://www.apachefriends.org/index.html (убить службы и выйти из xampp перед попыткой)
Когда спрошено, где поместить имя каталога, это так (дайте ему другое имя):
![enter image description here]()
а также
DONEZO! Теперь просто убедитесь, что убили сервисы и выйдите из системы, прежде чем менять местами, и у вас есть 2 стерильных конверта XAMPP для игры в...
Ура! теперь я действительно могу приступить к работе!
Ответ 17
Я работаю над десятилетним проектом на работе. Таким образом, 5.6 - мой по умолчанию. Есть также старые небольшие проекты, которые работают только с 5.2, и я также хочу работать над новыми версиями для моих личных проектов с 7.3.8
Вот что я сделал, чтобы добавить версии 5.2 и 7.3.8 по умолчанию в версии 5.6.
1 - загруженные версии php TS;
2 - Извлечено в папку c:\xampp\php738 и c:\xampp\php52 по порядку
3 - Добавлены эти строки в конец httpd-xampp.conf (или httpd.conf);
*** ВАЖНОЕ УВЕДОМЛЕНИЕ: Вы не должны использовать псевдоним сценария в качестве имени целевой папки,
они должны быть разными. (например,/php7x в порядке, /php7 нет)
PHP 7.3.8 для папки D:\www\php7
ScriptAlias /php7x "C:/xampp/php738"
Action application/x-httpd-php7-cgi /php7x/php-cgi.exe
<Directory "C:/xampp/php738">
AllowOverride None
Options None
Require all denied
<Files "php-cgi.exe">
Require all granted
</Files>
</Directory>
<Directory "D:\www\php7">
<FilesMatch "\.php$">
SetHandler application/x-httpd-php7-cgi
</FilesMatch>
</Directory>
PHP 5.2 для папки D:\www\php52
ScriptAlias /phpold "C:/xampp/php52"
Action application/x-httpd-phpold-cgi /phpold/php-cgi.exe
<Directory "C:/xampp/php52">
AllowOverride None
Options None
Require all denied
<Files "php-cgi.exe">
Require all granted
</Files>
</Directory>
<Directory "D:\www\php52">
<FilesMatch "\.php$">
SetHandler application/x-httpd-phpold-cgi
</FilesMatch>
</Directory>
Спасибо @Munim Munna за подробный ответ, я хотел бы поделиться надежным образцом с важным примечанием выше.
Ответ 18
Используйте этот php switcher
Вы можете контролировать версию php для любого вашего проекта через конфигурацию vhost.