Saturday, January 10, 2015

Upgrading PHP, PhpPgAdmin after Mac Yosemite upgrade

Prepare Homebrew

  
brew update
brew doctor

Resolve pending issues, upgrade to latest version of XCode, etc.

Install PostgreSql

It doesn't come any easier than this.

http://postgresapp.com/

Update PHP

First using Homebrew. I had a typo the first time. The PostgreSql extention didn't get generated. Make sure to read the caveats at the end of the process!

  
brew tap --repair
brew tap homebrew/homebrew-php
brew install php56 --with-apache --with-mysql --with-postgresql --with-intl

Point php.ini to the right version.

  
sudo mv /etc/php.ini /etc/php.ini.pre-update
sudo ln -s /usr/local/etc/php/5.6/php.ini /etc/php.ini

Perhaps without any typos, the PostgreSql php extension gets generated. If the PostgreSql php extension doesn't get generated, these manual instructions are great. Especially if you installed PostgreSql as mentioned earlier in this document, you will need to specify where the installation directory is when you call ./configure. It should look something like this:

  
./configure --with-pgsql=/Applications/Postgres.app/Contents/Versions/9.4

http://stackoverflow.com/questions/6588174/enabling-postgresql-support-in-php-on-mac-os-x

Once you know where the pgsql.so extension resides, make sure it is included in php.ini. E.g.,

  
; Mac Extensions
extension=/usr/local/Cellar/php56/5.6.4/lib/php/extensions/no-debug-non-zts-20131226/pgsql.so

Edit Apache's httpd.conf and make sure that the php and rewrite modules are enabled. Also, you will likely need to update the path to the correct php module. You should use the new libphp5.so that got generated when brew installed php.

  
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
LoadModule php5_module /usr/local/opt/php56/libexec/apache2/libphp5.so

Test PHP

Before going to far, take a moment to verify that php is working well with Apache.

Keep an eye on Apache's error log file during this process. Run this in a separate terminal window.

  
tail -f /private/var/log/apache2/error_log

Create a test index.php file. Note, the recent versions of php require "<?php" and not simply the shortform, "<?".

  
echo "<?php phpinfo(); ?>" > /Library/WebServer/Documents/index.php
open http://localhost/index.php

Troubleshooting PHP

If you are having trouble simply installing php using Homebrew, this may be useful:

https://github.com/Homebrew/homebrew-php#common-upgrade-issues

The first bullet might be satisfied with

  
xcode-select --install

Thanks, joshlopes; https://github.com/Homebrew/homebrew-php/issues/997

Build problems with phar.php?

/bin/sh: line 1: 92714 Segmentation fault... 
make: *** [ext/phar/phar.php] Error 139

I'm not clear on what SNMP (some kind of mobile protocol?) is, but there is clear evidence that it gives some general grief with installing php. I resolved it by including --without-snmp in the call to brew install. I have updated this command in the previous instructions.

If you don't see an html page with a dump of php configuration information, it's time to have some fun debugging. What follows are somethings that I needed to do in order to stop getting a white screen.

Go through this set of steps.

http://stackoverflow.com/questions/5121495/php-code-is-not-being-executed-i-can-see-it-on-source-code-of-page

If php still doesn't seem to be running with Apache, I also found this useful to get brew install php56 to succeed. Again, this seems to be fallout from installing PostgreSql the way I did.

  
sudo mv /usr/lib/libpq.5.dylib /usr/lib/libpq.5.dylib.pre.php56.install
  sudo ln -s /Applications/Postgres.app/Contents/Versions/9.4/lib/libpq.5.dylib /usr/lib/libpq.5.dylib
  sudo apachectl restart
  sudo apachectl configtest

https://github.com/Homebrew/homebrew-php/issues/1489

Once you are able to view the php information in the index.php page and you have included the pgsql.so extension in php.ini, installing phppgadmin should be easy.

Install phppgadmin

  
brew install phppgadmin

Follow the instructions that follow after this runs.

Other

To set the timezone in php.ini, see the php manual for a list of supported values.

  
[Date]
  ; Defines the default timezone used by the date functions
  ; http://php.net/date.timezone
  date.timezone = "America/Los_Angeles"

The Apache log file may complain about ServerName missing from httpd.conf. Follow the instructions to stop it from complaining.

  
ServerName localhost:80

Add mime-type for php in the mime-types file instead of as a command in httpd.conf.

  
sudo mvim /etc/apache2/mime.types

  application/x-httpd-php            php

Update PATH to support pear and PostgreSql. Edit .bash_profile.

  
# add pear package manager (php)
  export PATH="/usr/local/pear/bin:$PATH"

  # add postgresql app
  export PATH="/Applications/Postgres.app/Contents/Versions/9.4/bin:$PATH"

Location of DocumentRoot

  
cd /Library/WebServer/Documents

Location of Apache

  
cd /etc/apache2

Edit Apache configuration file

  
sudo mvim /private/etc/apache2/httpd.conf

Edit the php configuration file

  
sudo mvim /etc/php.ini

View the Apache logs

  
cd /private/var/log/apache2
  tail -f /private/var/log/apache2/error_log

Thursday, January 8, 2015

Getting to know Atom

A new application can be as exciting as Christmas morning. I am a dedicated Vim user (specifically MacVim). I am grateful for those who have developed plugins to bring a Vim-like experience to the tools I use.

Eclipse has Vrapper and "Vrapper - Surround". I never quite made it on the Sublime bandwagon. Nic Raboy recently filled me in on this great tool. It does everything that Sublime does (almost), but faster. And because it was developed by the folks at GitHub, it provides some great integration with the well know source control giant. The name? The Atom editor.

My addiction to Vim may backfire on me one day. Apparently, that day hasn't come yet; Atom has a couple of plugins that satisfy my Vim addiction.

  • open-vim
  • vim-mode

The interface is slick and tasty. And I love the support for creating your own plugins using JavaScript and/or CoffeeScript.

I'll be spending the next little bit getting familiar with the documentation. The IDE also has a set of very useful developer tools that help with debugging the package scripts that are included in plugins. That's one thing Vim doesn't have!

  • View > Developer > Toggle Developer Tools