Подтвердить что ты не робот

Есть ли способ использовать две версии PHP в XAMPP?

Мы запускаем XAMPP с PHP 7.0, потому что для наших новых продуктов требуется PHP 7.

Но есть старые проекты, которые используют такие функции, как mysql_connect и т.д. Они удалены в PHP 7.0.

Итак, есть ли способ легко изменить версии PHP в XAMPP?

Примечание: пожалуйста, не предлагайте обновить старый проект до совместимости с новыми версиями, потому что я не в состоянии сделать это из-за тех решений, которые я не могу принять как разработчик (просто сотрудник).

4b9b3361

Ответ 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 варианта:

  1. Запустите старую версию PHP только для каталога вашего старого проекта: это будет служить цели большую часть времени, у вас может быть один или два старых проекта, которые вы собираетесь запускать со старой версией PHP. Просто настройте xampp для запуска более старой версии PHP только для этих каталогов проекта.

  2. Запустите старую версию 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.

  3. Запустите старую версию 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.

  1. Установите последнюю версию XAMPP для Windows (в моем случае это было с PHP 7.1)
  2. Убедитесь, что Apache не запущен из панели управления XAMPP
  3. Переименуйте каталог php в каталог установки XAMPP, например C:\xampp\php C:\xampp\php-7.1.11.
  4. Загрузите версию PHP, которую вы хотели бы запустить дополнительно (например: PHP 5.4.45)
  5. Переместите каталог php из версии, которую вы скачали, в каталог установки XAMPP. Переименуйте его, чтобы он включал версию PHP. Например, C:\xampp\php-5.4.45.

Теперь вам нужно отредактировать конфигурацию XAMPP и Apache:

  1. В 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"
  1. Теперь в C:\xampp\apache\conf\extra переименуйте httpd-xampp.conf в httpd-xampp.conf.7.1 и добавьте новый файл конфигурации для httpd-xampp.conf.5.4.45. В моем случае я скопировал файл conf другой установки XAMPP для php 5.5, так как синтаксис может немного отличаться для каждой версии.

  2. Редактировать httpd-xampp.conf.5.4.45 и httpd-xampp.conf.7.1 и заменить там все ссылки на php директорию с новым php-XX версии. Здесь нужно сделать как минимум 10 изменений для каждого файла.

  3. Теперь вам нужно отредактировать 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.