Skip to main content

PHP 7 and Apache on macOS Sierra

PHP 7.1.2 running on macOS Sierra
I posted several talks about compiling PHP from source, but everyone was trying to convince me that a package manager like Homebrew was a more convenient way to install.
The purpose of Homebrew is simple: a package manager for macOS that will allow you to set up and install common packages easily and allows you to update frequently using simple commands.
I used a clean installation of macOS Sierra to ensure all steps could be recorded and tested. In most cases you already have done work on your Mac, so chances are you can skip a few steps in this tutorial.

APACHE AND PHP WITH HOMEBREW

I’ve made this according to the installation instructions given on GetGrav.

The installation procedures

These installation procedures will set up your macOS Sierra with PHP 7.1 and Apache 2.4.

Install Xcode command line tools (if not done yet)

xcode-select --install

Install Homebrew

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Set up for installation of PHP and Apache
brew tap homebrew/dupes
brew tap homebrew/versions
brew tap homebrew/homebrew-php
brew tap homebrew/apache

Unload the provisioned Apache from macOS Sierra

sudo apachectl stop
sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist 2>/dev/null

Install Homebrew Apache

brew install httpd24 --with-privileged-ports --with-http2

Set up Apache for autostart at macOS Sierra (re)boot

sudo cp -v /usr/local/Cellar/httpd24/2.4.25/homebrew.mxcl.httpd24.plist /Library/LaunchDaemons
sudo chown -v root:wheel /Library/LaunchDaemons/homebrew.mxcl.httpd24.plist
sudo chmod -v 644 /Library/LaunchDaemons/homebrew.mxcl.httpd24.plist
sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.httpd24.plist

Check to see Apache is running

ps -aef | grep httpd
You should see something similar as output
    0 23417     1   0  2:48PM ??         0:00.06 /usr/local/opt/httpd24/bin/httpd -D FOREGROUND
    1 23420 23417   0  2:48PM ??         0:00.00 /usr/local/opt/httpd24/bin/httpd -D FOREGROUND
    1 23421 23417   0  2:48PM ??         0:00.00 /usr/local/opt/httpd24/bin/httpd -D FOREGROUND
    1 23422 23417   0  2:48PM ??         0:00.00 /usr/local/opt/httpd24/bin/httpd -D FOREGROUND
    1 23423 23417   0  2:48PM ??         0:00.00 /usr/local/opt/httpd24/bin/httpd -D FOREGROUND
    1 23424 23417   0  2:48PM ??         0:00.00 /usr/local/opt/httpd24/bin/httpd -D FOREGROUND
  501 23428   403   0  2:48PM ttys000    0:00.00 grep httpd

Uninstall previous versions of PHP

We assume you had PHP 7.0 installed
brew unlink php70

Install latest PHP version (PHP 7.1.2 at the time of writing)

Time to install latest PHP with the apache web server
brew install php71 --with-httpd24
Don’t forget to set date.timezone in /usr/local/etc/php/7.1/php.ini!!!

Configure Apache for PHP usage

Also make sure to set the following line in /usr/local/etc/apache2/2.4/httpd.conf (You might need to disable others):
LoadModule php7_module    /usr/local/opt/php71/libexec/apache2/libphp7.so
Also make sure you have set the following lines correctly:
#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#

    DirectoryIndex index.html index.php



    SetHandler application/x-httpd-php

Time to restart apache

sudo /usr/local/bin/apachectl -k restart

Test your setup

Create a phpinfo.php in /usr/local/var/www/htdocs with the following contents:
<?php phpinfo();
You should see the famous PHP information page!

Next steps

Now you can set up your virtual hosts like you normally would do.

Comments

Post a Comment

Popular posts from this blog

Deploy Docker containers fast to Microsoft Azure

DEPLOY DOCKER CONTAINERS FAST TO MICROSOFT AZURE It’s hard to ignore the fact thatDockeris a way to move forward for rapid application development, distributed architectures and microservices. For developersDockeroffers great advantages as they can build their containers specifically for the task they work on. They grab a base image of a container, modify it for their purpose and prepare the functionality inside the container. Quality, testing and security teams now have a single instance to look at and ensure all functional and regulatory requirements are met. System engineers now don’t have to worry about providing a system with the required specs as the container is already provisioned for that purpose. But where do you deploy yourDockercontainers? You can set up your existing bare metal infrastructure to allow them to run containers, but this also means you need to learn about securing your container infrastructure, which is not an easy task. Luckily “the cloud” offers container …

Speeding up database calls with PDO and iterators

When you review lots of code, you often wonder why things were written the way they were. Especially when making expensive calls to a database, I still see things that could and should be improved.
No framework development When working with a framework, mostly these database calls are optimized for the developer and abstract the complex logic to improve and optimize the retrieval and usage of data. But then developers need to build something without a framework and end up using the basics of PHP in a sub-optimal way.

$pdo = new \PDO( $config['db']['dsn'], $config['db']['username'], $config['db']['password'] ); $sql = 'SELECT * FROM `gen_contact` ORDER BY `contact_modified` DESC'; $stmt = $pdo->prepare($sql); $stmt->execute(); $data = $stmt->fetchAll(\PDO::FETCH_OBJ); echo 'Getting the contacts that changed the last 3 months' . PHP_EOL; foreach ($data as $row) { $dt = new \DateTime('2015-04-…