Skip to main content

Installing PHP 7 on OS X Yosemite

Yesterday was the release of PHP7.0.0 and I wanted to have it on my mac as fast as possible. Since I'm still using Mac OS X Yosemite I will post here the steps to upgrade my platform, it might be useful for you too.

Requirements

Since Apple is doing a great job to provide PHP, Apache and MySQL straight out of the box, I'm not worrying about the Apache and MySQL.

In order to to install PHP from source, you need to have XCode installed as it provides required libraries and headers that you will need to have a successful experience.
Of course, get the latest and greatest PHP7.0.0 bundle straight from php.net. Don't forget to verify the signatures before you get started unpacking the sources.

Time to bake the sources

I like to build my apps from sources, even though there are package managers that will do it in a single command. There are really some great benefits from building from sources:

  • You can switch on and off modules as you go
  • You can now choose how you want to run PHP (as module, cgi or fpm)
  • You can enable extra debugging and profiling features
  • And my favorite: you can automate it
When you've unpacked the bundle (let's say its in /tmp) go into the directory /tmp/php-7.0.0. Here you will find your master command configure that you will need to set up your PHP installation. When you're requiring to know what options you can use, configure --help|less is your friend.

For my own convenience, I've created a little tool that helps me to configure any version of PHP as it sets the bare minimum I need to achieve a running PHP platform.


#!/bin/sh

PHP=$1

if [ -t $PHP ]; then
  echo "Usage: $0 "
  echo "  prefix    A prefix for your installation you would like to use"
  echo "            e.g. 'php7', 'php56'"
  exit 0
fi


XCODE_PATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/
LIB_PATH=/usr

./configure \
--prefix=/opt/${PHP} \
--enable-cli \
--with-apxs2 \
--with-iconv=${LIB_PATH} \
--with-config-file-path=/etc/${PHP} \
--with-config-file-scan-dir=/Library/Server/Web/Config/php \
--with-libxml-dir=${XCODE_PATH} \
--with-openssl=/usr \
--with-mysqli \
--with-pdo-mysql \
--with-mysql-sock=/tmp/mysql.sock

I made this script (configure-php.sh) executable with chmod +x configure-php.sh. All that's required is to pick a great prefix (where you want php to be installed) and with ./configure-php.sh /opt/php7 you start configuring PHP.

Once your process is completed (and you don't get errors), it's time to run makemake test and make install.

Let's check it out

Now it's time to check if we have a working PHP. Let's find out with /opt/php7/bin/php -v and you should be getting something like this.


In a next article I will explain hot to add xdebug and have PHP7 run as an Apache module in the existing Mac OS environment. Until then.



Comments

Popular posts from this blog

PHP 7 and Apache 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 in…

Sessions in PHP 7.1 and Redis

In case you have missed it, PHP 7.1.0 has been released recently. Now you can’t wait to upgrade your servers to the latest and greatest PHP version ever. But hold that thought a second… With PHP 7 lots of things have changed underneath the hood. But these changed features can also put unexpected challenges on your path. Our challenge One of these challenges that we faced was getting PHP 7.1 to play nice storing sessions in our Redis storage. In order to store sessions in Redis, we needed to install the Redis PHP extension that not only provides PHP functions for Redis, but also installs the PHP session handler for Redis. Because we upgraded our servers to PHP 7.1, we were looking to use the latest provided version for this Redis extension: redis-3.1.0. Once installed, we bumped against a nasty problem. Warning: session_start(): Failed to read session data: redis (path: tcp://127.0.0.1:6379) Searching the internet for this error, we didn’t got many hits that could point us into a dire…

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-…