Related
OK so I am experiencing something quite odd. My phpinfo() shows one version while php -v shows another.
I am running locally on a MacBook Air (Mojave), with Laravel and Valet.
phpinfo():
PHP Version 7.2.13
Configuration File (php.ini) Path /usr/local/etc/php/7.2
Loaded Configuration File /usr/local/etc/php/7.2/php.ini
Scan this dir for additional .ini files /usr/local/etc/php/7.2/conf.d
While in my terminal, it shows:
php -v
PHP 7.3.0 (cli) (built: Dec 7 2018 11:00:11) ( NTS )
Now, if I do a which php I get this:
/usr/local/bin/php
In my ~/.bash-profile, I have this:
export "PATH=~/.composer/vendor/bin:$PATH"
I have tried to:
Restart Nginx
Restart Valet
Unlink PHP#7.2 and link PHP#7.3with Homebrew:
Olivers-MacBook-Air:~ oliverbusk$ brew unlink php#7.2
Error: No such keg: /usr/local/Cellar/php#7.2
How can I get my actual valet site to use php#7.3?
Below simple fix worked for me.
rm ~/.config/valet/valet.sock
valet restart
In my case it worked after forcing the specific PHP version:
valet use php#7.4 --force
Good news, please upgrade to latest valet version, you can easily switch php version.
Source: https://laravel.com/docs/5.8/valet
PHP Versions
Valet allows you to switch PHP versions using the valet use php#version command. Valet will install the specified PHP version via Brew if it is not already installed:
valet use php#7.2
valet use php //without any specification, it will be using latest version
Something so basic as rebooting my Macbook solved this issue. Once rebooted, the correct version 7.3 showed in my phpinfo();
From MacBook pro (Mojave), with Laravel and Valet:
valet use php#7.2
To be able to effectively change the version of php on my machine I use the following script:
Add to your user's .bash_profile
Then use the following command to switch
switch-php7.x
switch-php() {
valet stop
brew unlink php#7.2 php#7.3 php#7.4
brew link --force --overwrite php#$1
brew services restart php#$1
composer global update
rm -f ~/.config/valet/valet.sock
valet install
}
https://gist.github.com/r1tt3r/e0f199eb274d5ff186b73956af594316
I am running linux valet on Ubuntu 20.04 , The following command works for me
valet use 8.0
Here, 8.0 refers to the php version.
NB: Tested this solution on Ubuntu 20.04 Desktop
If you are using Valet Linux Plus(Has more features than Valet Linux) Just do valet use {your PHP version} --update-cli. For instance to use php8.0 just run:
valet use 8.0 --update-cli
This will update both php-fpm version plus php-cli version too.
Basically the php valet uses and the one used by your macbook is different.
But as already mentioned by #Shiro and #Israel Alexis Palma Quezada, in newer versions valet use php73 would solve your problem.
If it's not working, try running composer global update to update your global packages, thus updating valet
To update the mac php version, execute the following lines:
export PATH="your/path/to/php#7.3/bin:$PATH"
export PATH="your/path/to/php#7.3/sbin:$PATH"
or simply add these two lines to your ~/.profile or ~/.bash_profile
Don't forget to run source ~/.profile or source ~/.bash_profile or whatever file you chose to edit.
Yesterday I encountered the same problem on Ubuntu 18.
At first I changed the PHP version:
$ sudo a2dismod php7.2
$ sudo a2enmod php7.3
$ sudo update-alternatives --set php /usr/bin/7.3
But valet was still showing the wrong PHP version. Rebooting did not work. In fact, phpinfo() was displaying PHP 7.1.
After run ps -aux | grep php I noticed few instances of php-fpm (5.6, 7.1 and 7.2) running.
I stopped them
$ sudo service php5.6-fpm stop
$ sudo service php7.1-fpm stop
$ sudo service php7.2-fpm stop
Then started 7.3
$ sudo service php7.3-fpm start
And now my phpinfo() display the correct version of PHP
I ran into this same problem while using valet plus today. When I switched PHP versions it was showing the previous one in my browser but the correct one in my terminal. Looking at the my brew services list:
brew services list
It showed that one of the valet-php services (valet-php#7.2) was not in the service list but somehow my valet was able to switch to it. Valet didn't install this PHP properly and that's what was causing the issue. I did the following to uninstall that PHP and reinstall it with brew.
brew uninstall valet-php#7.2
sudo rm -rf /usr/local/Cellar/valet-php#7.2/7.2.34_1
brew install valet-php#7.2
The PHP version that was once not showing in the brew services list now showed and I was able to "stop" that php version's service:
brew services stop valet-php#7.2
which made everything work properly again without a restart.
I installed ruby on my Mac OSX High Sierra and am running into issues now with my php installation for some reason. I'm on php 7.1.
Following this (also here) Github suggestion, I tried
brew update && brew reinstall php71
While installing, it broke at
==> Pouring php#7.1-7.1.23.high_sierra.bottle.tar.gz
==> /usr/local/Cellar/php#7.1/7.1.23/bin/pear config-set php_ini /usr/local/etc/php/7.1/php.ini system
With error:
dyld: Library not loaded: /usr/local/opt/openldap/lib/libldap-2.4.2.dylib
Referenced from: /usr/local/Cellar/php#7.1/7.1.23/bin/php
Reason: image not found
Warning: The post-install step did not complete successfully
You can try again using `brew postinstall php#7.1`
Typing in php into terminal throws the same error.
Other things I've tried:
I thought perhaps it wasn't linked, so I also tried: brew unlink libldap && brew link libldap - but libldap is not supported by Homebrew
Then here, while unrelated to postgres, it does discuss the issue of libldap and says to install via brew install openldap (I guess libldap is referred to as openldap to Homebrew) - this installed fine but didn't resolve the issue
How can I fix this?
According to this issue, you need to install openldap and libiconv.
brew install openldap libiconv
I tried it and it worked for my system. I was originally missing the PHP intl extension.
It's worked for me:
brew reinstall openldap
Although I'm not sure why installing Ruby caused the issue, I solved the issue ultimately with:
According to this discussion, libldap is referred to as openldap to Homebrew. brew install openldap then ran php reinstall php71. This linked the libraries properly
The next issue was with libiconv, fortunately this is easily installed with brew install libiconv. Rerunning php install php71 solved the problem
I specifically had to uninstall the offending version. You can grab this broken version from the line that looked like this:
Referenced from: /usr/local/Cellar/php#7.1/7.1.23/bin/php
In OP's case, it was php#7.1. In my case it was php#7.3. After I ran the following based on my situation, everything worked
brew uninstall php#7.3
For those who can not resolve by brew install openldap libiconv,
try below command:
brew reinstall openldap
brew reinstall php#7.4
brew services restart php#7.4
This issue is discussed and tracked at https://github.com/Homebrew/homebrew-core/issues/32916
if you have two PHP running via brew as well a XAMPP, there could be issue in environment path in .bash_profile.
which php
Try above command to see current php path. If it not accurate, set appropriate path and comment other.
export PATH=/Applications/XAMPP/xamppfiles/bin:$PATH
#export PATH=”/usr/local/opt/php#5.6/bin:/usr/local/opt/php#5.6/sbin:$PATH
After trying all above solutions. Finally uninstalling and reinstalling worked for me.
brew uninstall php
brew install php
For me, after running the following commands:
brew reinstall openldap
brew reinstall php#7.4
brew services restart php#7.4
I had to restart my computer for the error to stop and everything worked fine.
I'm using MacOS X 10.7.5 and I need a newer OpenSSL version due to handshake failures. There are several tutorials on the internet and I tried the following:
brew install openssl
brew link openssl --force
Nevertheless, it does not work:
openssl version
OpenSSL 0.9.8r 8 Feb 2011
brew unlink openssl && brew link openssl --force
Unlinking /usr/local/Cellar/openssl/1.0.1e... 1139 links removed
Linking /usr/local/Cellar/openssl/1.0.1e... 1139 symlinks created
The SVN issue is not resolved either. Any ideas? I would rather not try the MacPorts way because it may interfere with Homebrew.
If you're using Homebrew /usr/local/bin should already be at the front of $PATH or at least come before /usr/bin. If you now run brew link --force openssl in your terminal window, open a new one and run which openssl in it. It should now show openssl under /usr/local/bin.
In a terminal, run:
export PATH=/usr/local/bin:$PATH
brew link --force openssl
You may have to unlink openssl first if you get a warning: brew unlink openssl
This ensures we're linking the correct openssl for this situation. (and doesn't mess with .profile)
Hat tip to #Olaf's answer and #Felipe's comment. Some people - such as myself - may have some pretty messed up PATH vars.
installed openssl on mac with brew but nothing found on /usr/local/bin where other brew installed bins are located. Found my fresh openssl here:
/usr/local/opt/openssl/bin/openssl
Run it like this:
/usr/local/opt/openssl/bin/openssl version
I don't want to update OS X openssl, while some OS stuff or other 3rd party apps may have dependency on older version.
I also don't mind longer path than just openssl
Writing this here for all the Googlers who are looking for location of openssl installed by brew.
I had this issue and found that the installation of the newer openssl did actually work, but my PATH was setup incorrectly for it -- my $PATH had the ports path placed before my brew path so it always found the older version of openssl.
The fix for me was to put the path to brew (/usr/local/bin) at the front of my $PATH.
To find out where you're loading openssl from, run which openssl and note the output. It will be the location of the version your system is using when you run openssl. Its going to be somewhere other than the brewpath of "/usr/local/bin". Change your $PATH, close that terminal tab and open a new one, and run which openssl. You should see a different path now, probably under /usr/local/bin. Now run openssl version and you should see the new version you installed "OpenSSL 1.0.1e 11 Feb 2013".
To answer your question regarding updating openssl I followed these steps to successfully update the version found on my Mac to the newest openssl version 1.0.1e.
I followed the steps found here: http://foodpicky.com/?p=99
When you reach the steps for terminal commands make and make install be sure to use sudo make and sudo make install (I had to go through the step-by-step twice because I did it without sudo and it did not update).
Hope this helps
I had problems installing some Wordpress plugins on my local server running php56 on OSX10.11. They failed connection on the external API over SSL.
Installing openSSL didn't solved my problem. But then I figured out that CURL also needed to be reinstalled.
This solved my problem using Homebrew.
brew rm curl && brew install curl --with-openssl
brew uninstall php56 && brew install php56 --with-homebrew-curl --with-openssl
On mac OS X Yosemite, after installing it with brew it put it into
/usr/local/opt/openssl/bin/openssl
But kept getting an error "Linking keg-only openssl means you may end up linking against the insecure" when trying to link it
So I just linked it by supplying the full path like so
ln -s /usr/local/opt/openssl/bin/openssl /usr/local/bin/openssl
So now when I do
$ openssl version -a
It's showing version OpenSSL 1.0.2o.
So I guess it worked!
Try:
mkdir homebrew && curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew
Afterwards try:
brew install homebrew/portable-ruby/portable-openssl
On OSX Big Sur, I had a very frustrating experience with the error, because all of the solutions lean on using brew install. But running brew install was always returning an error like:
Error:
homebrew-core is a shallow clone.
To `brew update`, first run:
git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow
This command may take a few minutes to run due to the large size of the repository.
This restriction has been made on GitHub's request because updating shallow
clones is an extremely expensive operation due to the tree layout and traffic of
Homebrew/homebrew-core and Homebrew/homebrew-cask. We don't do this for you
automatically to avoid repeatedly performing an expensive unshallow operation in
CI systems (which should instead be fixed to not use shallow clones). Sorry for
the inconvenience!
But I couldn't run that command because git was failing with:
% git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow
dyld: Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
Referenced from: /usr/local/libexec/git-core/git-remote-https
Reason: image not found
In the end, the solution was to reinstall git.
brew reinstall git
And then update symlinks, if necessary:
brew link --overwrite git
For those, who are using macOS Monterey and are installing latest openssl v3 with brew, it's located in completely different path:
/opt/homebrew/Cellar/openssl#3/
A specific version is installed in the subfolder and the binary is reachable at (example for v.3.0.7):
/opt/homebrew/Cellar/openssl#3/3.0.7/bin/openssl
Using brew link --force openssl is still valid to create symlinks. Though it creates symlinks, the system openssl installed in /usr/bin/openssl has a preference because it's located earlier in the $PATH list.
So the solution will be to set the local symlink:
ln -s /opt/homebrew/Cellar/openssl#3/3.0.7/bin/openssl /usr/local/bin/openssl
This preserves 2 version in different path but /usr/local/bin has the highest priority when searching in $PATH.
The drawback is that you'll need to update a symlink once a new version updated with brew because each version is located in a separate subfolder now.
install port: https://guide.macports.org/
install or upgrade openssl package: sudo port install openssl or sudo port upgrade openssl
that's it, run openssl version to see the result.
PHP was not working for me as I was encountering this libpng issue, so I reinstalled a new version with Homebrew.
However, I'm getting a similar error with libjpeg this time:
$ php -v
dyld: Library not loaded: /usr/local/lib/libjpeg.8.dylib
Referenced from: /usr/local/bin/php
Reason: image not found
Trace/BPT trap: 5
Any suggestions?
As proposed by #jirson-tavera in the homebrew-php repo issue, this can be fixed without overriding your brew installation:
wget -c http://www.ijg.org/files/jpegsrc.v8d.tar.gz
tar xzf jpegsrc.v8d.tar.gz
cd jpeg-8d
./configure
make
cp ./.libs/libjpeg.8.dylib /usr/local/opt/jpeg/lib
Even though the solution in the accepted answer works, it's not the right way to fix the problem. It violates brew's metadata integrity.
Problem
The issue is that Homebrew's jpeg formula has been upgraded to v9 but the existing "bottled" PHP formula is still built and linked against the previous version, v8, which is no longer exists on your system.
You have a few options to fix the issue.
1. Recompile phpxx formula from source (highly recommended)
Uninstall your php formula, and rebuild it from the source instead of using the bottled version. This way, php will use and link against the currently installed version of jpeg. Assuming that you're dealing with php71:
brew reinstall php71 --build-from-source
2. Downgrade jpeg formula the right way (preferred over recompiling it manually)
If you haven't run brew cleanup, you already got the previous jpeg version in your brew's cellar, switch to it:
brew switch jpeg 8d
If you get a jpeg does not have a version "8d" in the Cellar. error, you need to first restore it by reverting the history:
cd $(brew --prefix)/Homebrew/Library/Taps/homebrew/homebrew-core
git checkout b231469
HOMEBREW_NO_AUTO_UPDATE=1 brew install jpeg
git checkout master
brew switch jpeg 8d
You can find out the commit hash by using brew log jpeg and going through the commit messages.
The downside is that there might be other formulas that require the newer version to work properly, e.g. imagemagick. If you face such incompatibility issues, check the first solution above.
3. Downgrade jpeg by manually recompiling (not recommended)
Fetch the source, compile and overwrite brew's version. Refer to Denis' answer for details.
This is not recommended because it violates the integrity of your brew metadata. Brew thinks that it has the 8b version, however, you manually compiled 9b and overwrote the files.
4. Manually symlink the old version (seriously?)
Do not manually symlink the leftover libjpeg.8.dylib. If the file is there, you can just brew switch to it as mentioned in the second solution above.
It's just the worst hack you can do here.
Such issues will be eventually fixed.
I encountered the similar problem today. The cause of the problem was a newer version of libjpeg. And the solution that worked was building php bottle from source.
Check available version of libjpeg:
$brew info libjpeg
jpeg: stable 9b (bottled)
Image manipulation library
http://www.ijg.org
/usr/local/Cellar/jpeg/9b (20 files, 724KB) *
Poured from bottle on 2017-08-07 at 12:06:42
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/jpeg.rb
Install php from source:
brew install --build-from-source php56
Update:
If you have already installed php you have to uninstall it prior to building from source. It also applies to extensions.
I had the same problem and I solved it by downloading the libjpeg tarball manuallu from here and running:
tar zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b
cp /usr/share/libtool/config.sub .
cp /usr/share/libtool/config.guess .
./configure --enable-shared --enable-static
make
sudo make install
sudo ranlib /usr/local/lib/libjpeg.a #Optionally
I was getting a similar problem trying to upgrade composer:
dyld: Library not loaded: /usr/local/opt/jpeg/lib/libjpeg.8.dylib
Referenced from: /usr/local/bin/php
Reason: image not found
composer: PHP Phar support is required for this formula
Error: An unsatisfied requirement failed this build.
Problem was php couldn't find libjpeg library anymore. One way to fix this is to reinstall php and libjpeg. Here's how I reinstalled them:
# find out which version of php is installed
brew list | grep php
# uninstall php
brew uninstall php70 --ignore-dependencies
# uninstall libjpeg
brew uninstall libjpeg --ignore-dependencies
# install libjpeg again
brew install libjpeg
# install php again
brew install php70
I was then able to upgrade everything again :)
brew update && brew upgrade
🍻
Following command worked for me.
brew switch libjpeg 8d
A dirty solution, that work fine for me.
ln -s /usr/local/lib/libjpeg.9.dylib /usr/local/lib/libjpeg.8.dylib
I didn't try Jirson's answer, but what worked for me was:
brew uninstall libjpeg
brew install libjpeg
I was having the same problem and the only thing that helped was to use the --build-from-source parameter:
brew install php70 --build-from-source
I had also this problem. I solved it in this way:
Uninstall jpeg/8b:
brew uninstall --ignore-dependencies libjpeg
Uninstall jpeg/9b:
brew uninstall --ignore-dependencies jpeg
Re install jpeg/9b
brew install jpeg
I am sharing this as I had the same issue when using PHP5.4. Originally, I had PHP5.6 and it was working fine. Then I downgraded to php5.4 as my app only supports PHP5.4.
Then this error came up. I noticed that I have libjpeg.9.dylib and PHP5.4 is looking for libjpeg.8.dylib.
Doing the following sorted the issue:
brew uninstall php54
brew install --build-from-source php54
As #lifecom notes, this is fixed with homebrew's php70 update, but you might still run into the problem if brew upgrade is trying to update other packages before upgrading php70.
Fix this by manually updating php70 first with brew upgrade php70 and you then should be able to run brew upgrade no problem (or, well, at least without this problem).
In some cases, especially in Catalina, the Homebrew cask for the package may exist but not be properly linked. In that case try:
brew link libjpeg
brew reinstall php --build-from-source
Homebrew php has been updated and no longer an issue with libjpeg
I have installed ImageMagick using brew install imagemagick. This all worked fine and I can run any ImageMagick command from the Terminal / Command line.
Now when I try to use the ImageMagick classes in PHP, I get an error Class 'Imagick' not found in .... I guess this is because the ImageMagick module is not loaded.
Could anyone help me to get this thing working in PHP? Thanks!
Additional info:
Mac OS X Version: 10.8: Mountain Lion
PHP Version: 5.3.13
I just did this after a lot of experimenting. For now, this seems to be the way to do it for php 5.3:
brew tap josegonzalez/php
brew tap homebrew/dupes
brew install php53-imagick
No idea who Jose Gonzalez is but apparently we are in his debt....
php72-imagick is now deprecated as imagick is part of php binary itself. Use pecl to install imagick e.g.:
brew install php
brew install imagemagick
brew install pkg-config
pecl install imagick
Your ImageMagick installation is not enough. You also need the Imagick package (possibly called php72-imagick or similar for home brew).
Imagick doesn't do the work itself, it is a native PHP extension for creating and modifying images using the ImageMagick API.
Try to search for the exact name of the package via brew search imagick.
I'm using Yosemite. For me, the solution is a combination of the answer and comment already listed here.
brew install imagemagick
brew install php55-imagick
Edit /etc/php.ini to include imagick
extension=/usr/local/Cellar/php55-imagick/{version of php55-imagick}/imagick.so
Example:
extension = /usr/local/Cellar/php55-imagick/3.1.2_1/imagick.so
I had the same issue. These are the steps that worked for me if you are using php 5.6
brew install php56-imagick
brew install imagemagick
find /usr/local/Cellar -name "imagick.so"
copy the path from the output of this command into your php.ini file
e.g. extension=/usr/local/Cellar/php56-imagick/3.3.0_2/imagick.so
save your file. Now to double check that the imagemagick class exists type
php -r "print(class_exists('imagick'));"
Brew symlinking wasn't working for me so I had to put the full pathname into the php.ini file to get it to work.
Hope this helps
this one worked for me:
brew install imagemagick # If it's not already installed
mkdir /usr/local/lib/php/pecl # On my system this dir didn't exist and this caused pecl install to fail
pecl install imagick
here
Try:
brew install homebrew/php/php53-imagick
I've looking for correct way to install imagick on Mojavie and found solution that fully worked.
brew install imagemagick#6
brew install php#7.1
Install headers (Xcode-select --install)
Download imagick source code from: https://pecl.php.net/package/imagick
Open terminal and enter unzipped folder imagick-3.4.3/imagick-3.4.3 (in my case)
Run command phpize
./configure
make
And now if error occurs like MagicWand not found, edit file Makefile and look for CPPFLAGS = -I/usr/local/opt/imagemagick#6/include/. Inspect if in include folder there is no other folder. In my case it should be like this:
CPPFLAGS = -I/usr/local/opt/imagemagick#6/include/ImageMagick-6
save and return to terminal and type make (after finished)
sudo make install
imagick.so is located in imagick-3.4.3/imagick-3.4.3/modules
Ok after 1 hour at this I have figured it out. The mac is not giving the pecl script permissions to make a PHP directory. To resolve do as follows.
brew install imagemagick
Sudo pecl install imagick .
php --ini | grep "Loaded Configuration File"
Add extension=imagick.so under extensions.
The install will be complete. Then, to test run:
php -r "print(class_exists('imagick'));"
From: php error: Class 'Imagick' not found
Did you add extension=imagick.so to your php.ini (or /etc/php.d/imagick.ini) file?
I had the same error having already installed imagemagick and php71-imagick.
brew upgrade imagemagick - did the trick for me.
You may need sudo:
sudo brew upgrade imagemagick
You may need to restart apache / php-fpm / <other webserver>.
I cannot add comments because of reputation, but to add to this anwser:
answered Apr 12 at 16:52
Grzegorz Miśkiewicz
I was getting a missing php.h file, so as per Installing xdebug on MacOs Mojave - 'php.h' file not found I installed the necessary file via the below command:
sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /