Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/arueckauer/pvs
PHP version switcher for Windows (PowerShell Module)
https://github.com/arueckauer/pvs
php powershell version-switcher
Last synced: 5 days ago
JSON representation
PHP version switcher for Windows (PowerShell Module)
- Host: GitHub
- URL: https://github.com/arueckauer/pvs
- Owner: arueckauer
- License: bsd-3-clause-clear
- Created: 2019-05-29T17:56:19.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2020-12-03T06:19:28.000Z (about 4 years ago)
- Last Synced: 2024-12-24T05:31:49.932Z (7 days ago)
- Topics: php, powershell, version-switcher
- Language: PowerShell
- Homepage:
- Size: 17.6 KB
- Stars: 4
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# PHP version switcher for Windows (PowerShell Module)
This project offers version switching functionality of locally installed PHP
versions as a PowerShell module.It assumes PHP is used as an Apache module and restarts the Apache service
after a version switch. This process can easily be adjusted, if PHP-FPM or any
another setup is used.## Installation
The following instructions describe the installation of the module for the
current user.### Download and move module to modules path
Download the latest [release](https://github.com/arueckauer/pvs/releases) and
extract it to a temporary directory. To use the latest version, clone the
repository instead.Create a path for the module. If applicable replace `1.1.0` with the actual
downloaded version.```powershell
New-Item -Type Directory -Path $HOME\Documents\WindowsPowerShell\Modules\pvs\1.1.0
```Copy `src\pvs.psd1` and `src\pvs.psm1` module to its new home.
```powershell
Copy-Item C:\path\to\pvs\pvs.* -Destination $HOME\Documents\WindowsPowerShell\Modules\pvs\1.1.0\
```### Import module
The restart of the Apache service, requires elevated rights. That is why this
module will only be imported in elevated PowerShell sessions. Loading and
executing the pvs in a non-elevated PowerShell will fail the to restart the
Apache service.Add the following lines to the `profile.ps1`. To learn more about the
PowerShell profiles and their locations, read [about_profiles](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7).```powershell
$currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
if ($currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
Import-Module pvs
}
```## Configuration
The pvs comes with a configuration, which assumes various PHP versions are
installed in `C:\webserv`. You can adjust this configuration to your needs.For the "active" version a symlink is set to `C:\webserv`. This path is set in
the PATH environment variable and the Apache configuration is referencing the
symlink instead of the actual path.To support both PHP 7 and PHP 8 releases, two configuration files for Apache
httpd are required. Dependeing on the used major PHP version either one is
referenced by a symlink.`httpd-php7.conf`
```
# Load PHP7 Module
AddHandler application/x-httpd-php .php
AddType application/x-httpd-php .php .html
LoadModule php7_module "C:/webserv/php/php7apache2_4.dll"
PHPIniDir "C:/webserv/php"
````httpd-php8.conf`
```
# Load PHP8 Module
AddHandler application/x-httpd-php .php
AddType application/x-httpd-php .php .html
LoadModule php_module "c:/webserv/php/php8apache2_4.dll"
PHPIniDir "c:/webserv/php"
```> Note: As of PHP 8, the module no longer includes the major version number.
> See https://bugs.php.net/bug.php?id=78681In `src\pvs.psm1` you can configure the available versions and their paths. For
example:```powershell
$apacheConfigPath = "C:\webserv\httpd-2.4.41-win64-VS16\Apache24\conf\"
$apacheConfigFile = $apacheConfigPath + "httpd.conf"
$apacheConfigTarget = $apacheConfigPath + "httpd-php7.conf"switch ($version) {
"7.0" {
$phpPath = "C:\webserv\php-7.0.33-Win32-VC14-x64"
}
"7.1" {
$phpPath = "C:\webserv\php-7.1.33-Win32-VC14-x64"
}
"7.2" {
$phpPath = "C:\webserv\php-7.2.32-Win32-VC15-x64"
}
"7.3" {
$phpPath = "C:\webserv\php-7.3.20-Win32-VC15-x64"
}
"7.4" {
$phpPath = "C:\webserv\php-7.4.8-Win32-vc15-x64"
}
"8.0" {
$phpPath = "C:\webserv\php-8.0.0alpha3-Win32-vs16-x64"
$apacheConfigTarget = $apacheConfigPath + "httpd-php8.conf"
}
Default { throw "Provided PHP version $version is not supported" }
}
```This configuration shows a setup of all the latest PHP 7 minor versions and the
latest QA release of PHP 8. It is possible to have multiple patch version of
the same minor installed by providing the full version number, e.g. `7.4.6`.## Usage
Open an elevated PowerShell, invoke `pvs` and provide the version as parameter.
```powershell
C:\source> pvs 7.4
PHP Version Switcher 1.1.0 by Andi RückauerSwitching to version: 7.4...
Removing SymbolicLink...
Creating SymbolicLink...
Verzeichnis: C:\webserv
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----l 26.06.2020 09:15 php
Restarting Apache...WARNUNG: Warten auf Beendigung des Diensts "Apache2.4 (Apache2.4)"...
C:\source> php -v
PHP 7.4.8 (cli) (built: Jun 9 2020 13:36:15) ( ZTS Visual C++ 2017 x64 )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Xdebug v2.9.0, Copyright (c) 2002-2019, by Derick Rethans
```