When i got mac, it had already installed php 7.3. I installed new version of php with Brew to /usr/local/Cellar/php/7.4.9/bin/php and edited ~/bash_profile, where i added
export PATH="/usr/local/Cellar/php/7.4.9/bin:$PATH"
export PATH="/usr/local/Cellar/php/7.4.9/sbin:$PATH"
then did source .bash_profile. It worked for the current terminal window, but other terminal windows are still on older PHP version /usr/bin/php, even after restart. Even plugin in PhpStorm claims that php version is older. Any help?
You can try the following
brew unlink php#7.3
brew link php#7.4 --force --overwrite
brew services start php#7.4
Related
I made the seemingly bad decision to update to macOS Monterey 12.3.1, and am having a hell of a time trying to get PHP working on it again. From what I've seen, Apple has decided that PHP is deprecated - at least from their machines, and they removed every php version and setting that I had set up for all my Laravel and Wordpress projects!
I tried reinstalling PHP using homebrew but I got a lot of errors about certain packages not being able to be downloaded due to authorization denial?
So then I attempted to uninstall and reinstall Homebrew, and I did the following:
Install Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
Add the following to zshrc
eval "$(/opt/homebrew/bin/brew shellenv)"
Test brew version to see if it's working
brew --version
Run brew doctor to make sure everything is configured correctly
brew doctor
I also saw that it was likely that there would be libraries missing and that i should reinstall open ssl so i did that as well:
brew install openssl
Then for PHP I ran:
brew tap shivammathur/php
and then
brew install shivammathur/php/php#7.4
brew install shivammathur/php/php#8.0
and I even restarted the php services just in case
brew services restart shivammathur/php/php#7.4
brew services restart shivammathur/php/php#8.0
Then I ran
php -v
and I got the following error:
zsh: command not found: php
and which php says php not found
what the heck!
I then tried to unlink php and force a link to 7.4:
brew unlink php && brew link --overwrite --force php#7.4
and I got the following brew error:
Error: No such keg: /usr/local/Cellar/php
I tried digging into fixing this keg issue but i haven't been able to figure it out, do you have any suggestions on next steps
Check that Homebrew's bin directory i.e. $(brew --prefix)/bin is in your PATH.
If you want to link PHP 7.4, run
brew link --overwrite --force php#7.4
If you get an error mentioning that it is already linked, you can relink it by unlinking it first and linking it again to be sure. Make sure you unlink the correct version.
brew unlink php#7.4
brew link --overwrite --force php#7.4
I would like to test my application on PHP 5.3 up to PHP 7.0.
Where and how can I install the versions and how can I switch them by running a small script?
If you have both versions of PHP installed, you can switch between versions using the link and unlink brew commands.
For example, to switch between PHP 7.4 and PHP 7.3
brew unlink php#7.4
brew link php#7.3
PS: both versions of PHP have be installed for these commands to work.
I found this very good tutorial on how to install and switch php versions on OSX.
I can switch the version like
$ sphp 7.0 => PHP 7.0
$ sphp 7.3 => PHP 7.3
$ sphp 7.4 => PHP 7.4
Exactly what I want!
Example: Let us switch from php 7.4 to 7.3
brew unlink php#7.4
brew install php#7.3
brew link php#7.3
If you get Warning: php#7.3 is keg-only and must be linked with --force
Then try with:
brew link php#7.3 --force
Using brew
Show current version
$ php -v
Change to different version
(eg. changing from 5.5.x to version 7.0.latest) :
$ brew unlink php55
$ brew install php70
I liked the switcher idea because I'm working of different version at the moment so what you need is
brew install brew-php-switcher
then brew-php-switcher version
for example brew-php-switcher 7.4
i think unlink & link php versions are not enough because we are often using php with apache(httpd), so need to update httpd.conf after switch php version.
i have write shell script for disable/enable php_module automatically inside httpd.conf, look at line 46 to line 54 https://github.com/dangquangthai/switch-php-version-on-mac-sierra/blob/master/switch-php#L46
Follow my steps:
1) Check installed php versions by brew, for sure everything good
> brew list | grep php
#output
php56
php56-intl
php56-mcrypt
php71
php71-intl
php71-mcrypt
2) Run script
> switch-php 71 # or switch-php 56
#output
PHP version [71] found
Switching from [php56] to [php71] ...
Unlink php56 ... [OK] and Link php71 ... [OK]
Updating Apache2.4 Configuration /usr/local/etc/httpd/httpd.conf ... [OK]
Restarting Apache2.4 ... [OK]
PHP 7.1.11 (cli) (built: Nov 3 2017 08:48:02) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
3) Finally, when your got above message, check httpd.conf, in my laptop:
vi /usr/local/etc/httpd/httpd.conf
You can see near by LoadModule lines
LoadModule php7_module /usr/local/Cellar/php71/7.1.11_22/libexec/apache2/libphp7.so
#LoadModule php5_module /usr/local/Cellar/php56/5.6.32_8/libexec/apache2/libphp5.so
4) open httpd://localhost/info.php
i hope it helpful
If you install PHP with homebrew, you can switch between versions very easily. Say you want php56 to point to Version 5.6.17, you just do:
brew switch php56 5.6.17
If you have installed php with latest version on your local system and using homebrew then to switch to older version, run following commands.
Here, we are switching to 7.4
brew unlink php
brew install php#7.4
brew link php#7.4
How to:
Find installed PHP versions
Switch from default PHP package to a versioned package
% brew search php
brew-php-switcher php-cs-fixer php#7.3 phplint phpstan pup
php ✔ php-cs-fixer#2 php#7.4 ✔ phpmd phpunit
php-code-sniffer php#7.2 phpbrew phpmyadmin pcp
% brew unlink php
% brew link php#7.4
brew link --overwrite php#7.3
Works perfectly for me :-)
delete all row with "php" in:
nano ~/.zshrc
after that it will work:
brew unlink php#7.4 && brew link php#8.0
if you are using homebrew, then it allows multiple versions of a formula to be installed.
hence,
brew unlink is used to detach a version of formula from usage.
brew link is used to attach a version of formula to usage.
for example, if you have php 7.4 and 8.0 both installed and want to switch between them assuming you are currently using 7.4, then it can be done as :
brew unlink php#7.4
brew link php#8.0
I prefer to use phpbrew where you can easily install ($ phpbrew install 8.1.3 +default) and switch (phpbrew switch 8.1.3) the used php version.
https://github.com/phpbrew/phpbrew
Old question but it's still a difficulty to have a quick way to switch between php versions in 2022. I use Laravel valet and switching PHP versions requires a re install of valet to work. I basically have two custom functions defined in my .zhsrc file, but I think this will work for bash too:
switchphp7() {
valet stop
brew unlink php#8.1
brew services stop php#8.1
brew link --force --overwrite php#7.4
brew services start php#7.4
composer global update
rm -f ~/.config/valet/valet.sock
valet install
valet start
}
switchphp8() {
valet stop
brew unlink php#7.4
brew services stop php#7.4
brew link --force --overwrite php#8.1
brew services start php#8.1
composer global update
rm -f ~/.config/valet/valet.sock
valet install
valet start
}
And then just run them in the command line:
switchphp8
This works reliably for me, however, if you use Valets virtual SSL certificates, the command line will ask for admin account password for every ssl certificate you have linked which is potentially annoying if you have loads of them. It's not a bug if it keeps asking, eventually you will allow all if you keep typing password/use touch id.
Since the OP has specifically asked for switching from "PHP 5.3 up to PHP 7.0", a lot has been deprecated and/or removed in brew due to official support ending for them - as of Dec 2022.
So if we are to switch versions and install any of these unsupported versions brew install php#7.3, it will fail (Question and its answer here). You'll need to use the tap shivammathur/php (praise the devs responsible for this) which can be used to install unsupported versions of PHP.
brew tap shivammathur/php //need to do only once
brew install shivammathur/php/php#7.0 //or brew install php#7.4 depending on your choice
brew search php //optional, shows all the versions available if you want some other version
brew link php#7.0
Switching henceforth is simple:
brew unlink php#7.0
brew link php#5.6 //OP asked 5.3 but 5.6 is the lowest version supported by the tap
All versions <= php#7.4 have been deprecated and removed from brew because they reached their end of life. As of Dec 2022, the only officially supported versions are 8.0 and 8.1 which brew supports.
This too eventually will get outdated as more versions reach EOL but the steps should remain the same as long as that tap remains in development.
The link provided by Xaver's answer served as a good further reading.
Don't forget to change you environment PATH with this command :
echo 'export PATH="/usr/local/opt/php#8.1/bin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile
My purpose was install old patch of php#7.4.24 to MacOS and I done that this way:
I found revision of brew, which contains old php patch, which i need, and reset git to them
repository: https://github.com/Homebrew/homebrew-core/commit/3b342c146da0452d71d982324977567960da2979
git -C $(brew --repo)/Library/Taps/homebrew/homebrew-core reset --hard 3b09794
brew reinstall php#7.4
First install or reinstall the version you want
brew reinstall php#7.4
Secondly you need to switch to the version you want
echo 'export PATH="/usr/local/opt/php#7.4/bin:$PATH"' >> ~/.zshrc
echo 'export PATH="/usr/local/opt/php#7.4/sbin:$PATH"' >> ~/.zshrc
Then you need to add in your PATH by running below command
brew-php-switcher 7.4
If you don't need to play with apache then there is a very easy way with one function, just add it to your ~/.bash_profile or ~/.zshrc (depends on your terminal)
function php-toggle() {
currentVersion=$(php -v | tail -r | tail -n 1 | cut -d " " -f 2 | cut -c 1-3)
switchTo='7.4'
[[ $currentVersion == '7.4' ]] && switchTo='8.1'
brew unlink php#"$currentVersion"
brew services stop php#"$currentVersion"
brew link php#"$switchTo"
brew services start php#"$switchTo"
exportString="export PATH=\"/opt/homebrew/opt/php#${switchTo}/bin:\$PATH\""
echo $exportString > ~/.php_version
source ~/.php_version
}
source ~/.php_version
Open new terminal and run php-toggle.
Hello guys I want to downgrade from PHP7.3 to 7.2 but after installing PHP 7.2 with
brew install php#7.2
and unlinking PHP 7.3 with brew unlink php#7.3 the problem that I have is when I relink PHP 7.2 with brew link php#7.2 it goes back to the 7.3 version has anyone ever faced this problem, the project that I am working with requires PHP 7.2?
Update: This problem is still not fixed, i still can't get the PHP version to go down from 7.3 to 7,2
After Mac OS full reinstall I perform php 8.0 install by brew install php.
Unfortunately, brew didn't make this version active: php --version report about 7.3 (not recommended version).
I cannot unlink this version because it's not installed by brew, so brew link also doesn't have much sense.
How to bring latest php to system level and completely forget about php7.3 ?
You'll need to tell your terminal where to find your new installed php.
export PATH="/usr/local/opt/php#8.0/sbin:$PATH"
And you need to add it to the bash_profile if you want all terminals to keep using your installed version.
echo 'export PATH="/usr/local/opt/php#8.0/sbin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile
This is for terminal use only. So not for your web servers.
In the future, when you install other versions, you can update the profile with:
nano ~/.bash_profile
I would like to test my application on PHP 5.3 up to PHP 7.0.
Where and how can I install the versions and how can I switch them by running a small script?
If you have both versions of PHP installed, you can switch between versions using the link and unlink brew commands.
For example, to switch between PHP 7.4 and PHP 7.3
brew unlink php#7.4
brew link php#7.3
PS: both versions of PHP have be installed for these commands to work.
I found this very good tutorial on how to install and switch php versions on OSX.
I can switch the version like
$ sphp 7.0 => PHP 7.0
$ sphp 7.3 => PHP 7.3
$ sphp 7.4 => PHP 7.4
Exactly what I want!
Example: Let us switch from php 7.4 to 7.3
brew unlink php#7.4
brew install php#7.3
brew link php#7.3
If you get Warning: php#7.3 is keg-only and must be linked with --force
Then try with:
brew link php#7.3 --force
Using brew
Show current version
$ php -v
Change to different version
(eg. changing from 5.5.x to version 7.0.latest) :
$ brew unlink php55
$ brew install php70
I liked the switcher idea because I'm working of different version at the moment so what you need is
brew install brew-php-switcher
then brew-php-switcher version
for example brew-php-switcher 7.4
i think unlink & link php versions are not enough because we are often using php with apache(httpd), so need to update httpd.conf after switch php version.
i have write shell script for disable/enable php_module automatically inside httpd.conf, look at line 46 to line 54 https://github.com/dangquangthai/switch-php-version-on-mac-sierra/blob/master/switch-php#L46
Follow my steps:
1) Check installed php versions by brew, for sure everything good
> brew list | grep php
#output
php56
php56-intl
php56-mcrypt
php71
php71-intl
php71-mcrypt
2) Run script
> switch-php 71 # or switch-php 56
#output
PHP version [71] found
Switching from [php56] to [php71] ...
Unlink php56 ... [OK] and Link php71 ... [OK]
Updating Apache2.4 Configuration /usr/local/etc/httpd/httpd.conf ... [OK]
Restarting Apache2.4 ... [OK]
PHP 7.1.11 (cli) (built: Nov 3 2017 08:48:02) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
3) Finally, when your got above message, check httpd.conf, in my laptop:
vi /usr/local/etc/httpd/httpd.conf
You can see near by LoadModule lines
LoadModule php7_module /usr/local/Cellar/php71/7.1.11_22/libexec/apache2/libphp7.so
#LoadModule php5_module /usr/local/Cellar/php56/5.6.32_8/libexec/apache2/libphp5.so
4) open httpd://localhost/info.php
i hope it helpful
If you install PHP with homebrew, you can switch between versions very easily. Say you want php56 to point to Version 5.6.17, you just do:
brew switch php56 5.6.17
If you have installed php with latest version on your local system and using homebrew then to switch to older version, run following commands.
Here, we are switching to 7.4
brew unlink php
brew install php#7.4
brew link php#7.4
How to:
Find installed PHP versions
Switch from default PHP package to a versioned package
% brew search php
brew-php-switcher php-cs-fixer php#7.3 phplint phpstan pup
php ✔ php-cs-fixer#2 php#7.4 ✔ phpmd phpunit
php-code-sniffer php#7.2 phpbrew phpmyadmin pcp
% brew unlink php
% brew link php#7.4
brew link --overwrite php#7.3
Works perfectly for me :-)
delete all row with "php" in:
nano ~/.zshrc
after that it will work:
brew unlink php#7.4 && brew link php#8.0
if you are using homebrew, then it allows multiple versions of a formula to be installed.
hence,
brew unlink is used to detach a version of formula from usage.
brew link is used to attach a version of formula to usage.
for example, if you have php 7.4 and 8.0 both installed and want to switch between them assuming you are currently using 7.4, then it can be done as :
brew unlink php#7.4
brew link php#8.0
I prefer to use phpbrew where you can easily install ($ phpbrew install 8.1.3 +default) and switch (phpbrew switch 8.1.3) the used php version.
https://github.com/phpbrew/phpbrew
Old question but it's still a difficulty to have a quick way to switch between php versions in 2022. I use Laravel valet and switching PHP versions requires a re install of valet to work. I basically have two custom functions defined in my .zhsrc file, but I think this will work for bash too:
switchphp7() {
valet stop
brew unlink php#8.1
brew services stop php#8.1
brew link --force --overwrite php#7.4
brew services start php#7.4
composer global update
rm -f ~/.config/valet/valet.sock
valet install
valet start
}
switchphp8() {
valet stop
brew unlink php#7.4
brew services stop php#7.4
brew link --force --overwrite php#8.1
brew services start php#8.1
composer global update
rm -f ~/.config/valet/valet.sock
valet install
valet start
}
And then just run them in the command line:
switchphp8
This works reliably for me, however, if you use Valets virtual SSL certificates, the command line will ask for admin account password for every ssl certificate you have linked which is potentially annoying if you have loads of them. It's not a bug if it keeps asking, eventually you will allow all if you keep typing password/use touch id.
Since the OP has specifically asked for switching from "PHP 5.3 up to PHP 7.0", a lot has been deprecated and/or removed in brew due to official support ending for them - as of Dec 2022.
So if we are to switch versions and install any of these unsupported versions brew install php#7.3, it will fail (Question and its answer here). You'll need to use the tap shivammathur/php (praise the devs responsible for this) which can be used to install unsupported versions of PHP.
brew tap shivammathur/php //need to do only once
brew install shivammathur/php/php#7.0 //or brew install php#7.4 depending on your choice
brew search php //optional, shows all the versions available if you want some other version
brew link php#7.0
Switching henceforth is simple:
brew unlink php#7.0
brew link php#5.6 //OP asked 5.3 but 5.6 is the lowest version supported by the tap
All versions <= php#7.4 have been deprecated and removed from brew because they reached their end of life. As of Dec 2022, the only officially supported versions are 8.0 and 8.1 which brew supports.
This too eventually will get outdated as more versions reach EOL but the steps should remain the same as long as that tap remains in development.
The link provided by Xaver's answer served as a good further reading.
Don't forget to change you environment PATH with this command :
echo 'export PATH="/usr/local/opt/php#8.1/bin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile
My purpose was install old patch of php#7.4.24 to MacOS and I done that this way:
I found revision of brew, which contains old php patch, which i need, and reset git to them
repository: https://github.com/Homebrew/homebrew-core/commit/3b342c146da0452d71d982324977567960da2979
git -C $(brew --repo)/Library/Taps/homebrew/homebrew-core reset --hard 3b09794
brew reinstall php#7.4
First install or reinstall the version you want
brew reinstall php#7.4
Secondly you need to switch to the version you want
echo 'export PATH="/usr/local/opt/php#7.4/bin:$PATH"' >> ~/.zshrc
echo 'export PATH="/usr/local/opt/php#7.4/sbin:$PATH"' >> ~/.zshrc
Then you need to add in your PATH by running below command
brew-php-switcher 7.4
If you don't need to play with apache then there is a very easy way with one function, just add it to your ~/.bash_profile or ~/.zshrc (depends on your terminal)
function php-toggle() {
currentVersion=$(php -v | tail -r | tail -n 1 | cut -d " " -f 2 | cut -c 1-3)
switchTo='7.4'
[[ $currentVersion == '7.4' ]] && switchTo='8.1'
brew unlink php#"$currentVersion"
brew services stop php#"$currentVersion"
brew link php#"$switchTo"
brew services start php#"$switchTo"
exportString="export PATH=\"/opt/homebrew/opt/php#${switchTo}/bin:\$PATH\""
echo $exportString > ~/.php_version
source ~/.php_version
}
source ~/.php_version
Open new terminal and run php-toggle.