Installing PHP5

From DreamHost
Jump to: navigation, search
NOTE: Most of the instructions here are unnecessary for common customizations to PHP 5.3. See PHP.ini : PHP 5.3 for details.


Using DreamHost's PHP 5

PHP 5 was added to all plans by DreamHost as of June 2005.

Important icon.png Important: Please be aware that DreamHost recommends you use PHP version 5.5. You can find more info about PHP here:

DreamHost provides PHP 5 CLI binaries which are available for use from the shell commanded line. The paths for the default DreamHost PHP-CLI installed binaries are as follows:

  • PHP 5.3 – /usr/local/php53/bin/php
  • PHP 5.4 – /usr/local/php54/bin/php

You can confirm the exact version numbers in use by executing the selected binary from within the shell using the "-v" option, which will run the binary and return the version information.

If you've previously installed your own copy of PHP (for example, by following the instructions below), you'll also need to remove the appropriate AddHandler and Actions directives from your .htaccess file.

Some PHP applications like MediaWiki includes scripts that must be executed from the shell account, and since version 1.21.x MediaWiki requires PHP ≥ 5.3. PHP5 can be used from:

/usr/local/php53/bin/php

Or, for PHP 5.4:

/usr/local/php54/bin/php

The two above examples are the command to put in the bash shell.

PHP 5.4

PHP 5.4 is now available through the DreamHost Panel! To activate it, just head over to Manage Domains then Edit the domain on which you wish to activate it. On the next page, look for "PHP Mode:". From there, you can select to use PHP 5.4 by default on your domain!

As an added bonus, it can now be pretty significantly customized, without needing to set up custom .htaccess files and all that mess! For more information on customizing PHP 5.3 configurations, see php.ini for PHP 5.4.

In light of this recent addition, install scripts should not be necessary for use with PHP 5.4.

Install script for PHP 5.5.x

If you get the following error "configure: error: Cannot find libpq-fe.h. Please specify correct PostgreSQL installation path" and you don't need PostgreSQL, take off these flags:

--with-pgsql \
--with-pdo-pgsql \

This has not been tested with nginx, but perhaps the following still apply as follows: If you are trying to use this for nginx on the dreamhost vps then you will need to do the following:

php5.5-install.sh

# php5.5-install.sh from http://wiki.dreamhost.com/Installing_PHP5
# Revision history:
# 2014-06-14 by Andrew [http://standingmist.com/] for latest PHP 5.5 and modules
# 2013-08-09 by Graham [http://blog.ham1.co.uk/] for latest PHP 5.4 and APC 3.1.13.
# 2013-05-02 by Krishna Desai (http://krishnadesai.com) for latest version of libmcrypt
# 2012-10-05 by Leonid Komarovsky (http://leonid.komarovsky.info) for PHP 5.4 and latest version of Xdebug. Added PostgreSQL support.
# 2011-12-01 by David (deceifermedia.com) for latest package versioins, updated download links,
#      and for the MySQLi and PDO extensions to use mysqlnd instead of libmysql (highly recommended)
# 2010-07-03 by Andres (andrew67.com) for latest php, curl and openssl versions and enabling perl/pecl
# 2009-12-27 by Steven Rosato to fix PHP 5.3 Compile Error: Undefined References in dns.c
# 2009-09-24 by Christopher (heavymark.com) for latest source versions and incorrect url and addition of proper enabling of xmlrpc.
# 2009-08-05 by Andy (andy.hwang.tw) to correct typo on m4 extract command.
# 2009-07-28 by samutz (samutz.com) to include ZIP, XMLRPC,
#          and GNU M4 (previous version of script failed without it)
# 2009-07-24 by ercoppa (ercoppa.org) to convert this script for PHP 5.3 (with all features of dreamhost,
#          except kerberos) with Xdebug and APC
# 2009-05-24 by ksmoe to correct copying of correct PHP cgi file (php-cgi instead of php)
# 2009-04-25 by Daniel (whathuhstudios.com) for latest source versions
# 2007-11-24 by Andrew (ajmconsulting.net) to allow 3rd wget line to pass 
#          MCRYPT version information (was set as static download file name previously.)
# 2006-12-25 by Carl McDade (hiveminds.co.uk) to allow memory limit and freetype

# Save the code to a file as *.sh
# Don't forget to chmod a+x it!

# Abort on any errors
set -e

# The domain in which to install the PHP CGI script.
export DOMAIN="standingmist.com"

# Where do you want all this stuff built? I'd recommend picking a local filesystem.
# ***Don't pick a directory that already exists!*** 
# We clean up after ourselves at the end!
SRC_DIR=${HOME}/php5.5-source

# # And where should it be installed?
# INSTALL_DIR=${HOME}/php5.5

# And where should it be installed?
INSTALL_DIR=${HOME}/php/php55

# Set DIST_DIR to somewhere persistent, if you plan to muck around with this
# script and run it several times!
DIST_DIR=${HOME}/dist

# Pre-download clean up!!!!
rm -rf ${SRC_DIR}

# Update version information here.
PHP5="php-5.5.13" #MUST BE THE CURRENT VERSION
CURL="curl-7.37.0"
XDEBUG="xdebug-2.2.5"
M4="m4-1.4.17"
AUTOMAKE="automake-1.14.1"
AUTOCONF="autoconf-2.69"
CCLIENT="imap-2007f" #MUST BE THE CURRENT VERSION
CCLIENT_DIR="imap-2007f"
OPENSSL="openssl-1.0.1g"   
OPENSSL_DIR="openssl-1.0.1g"
LIBMCRYPT_VER="2.5.8"
LIBMCRYPT="libmcrypt-${LIBMCRYPT_VER}"
LIBTOOL="libtool-2.4.2"
BISON="bison-3.0.2"
FLEX_VER="2.5.4.a"
FLEX_FILE="flex-2.5.4"
FLEX="${FLEX_FILE}a"
RE2C_VER="0.13.6"
RE2C="re2c-${RE2C_VER}"

# What PHP features do you want enabled?
PHPFEATURES="--prefix=${INSTALL_DIR} \
--with-config-file-path=${INSTALL_DIR}/etc/php5 \
--with-config-file-scan-dir=${INSTALL_DIR}/etc/php5/conf.d \
--enable-fastcgi \
--bindir=${INSTALL_DIR}/bin \
--enable-force-cgi-redirect \
--enable-zip \
--enable-xmlrpc \
--with-xmlrpc \
--with-xml \
--with-freetype-dir=/usr \
--with-mhash=/usr \
--with-zlib-dir=/usr \
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
--with-curl=${INSTALL_DIR} \
--with-gd \
--enable-gd-native-ttf \
--enable-memory-limit \
--enable-ftp \
--enable-exif \
--enable-sockets \
--enable-wddx \
--enable-sqlite-utf8 \
--enable-calendar \
--enable-mbstring \
--enable-mbregex \
--enable-bcmath \
--with-mysql=/usr \
--with-mysqli=mysqlnd \
--with-pear \
--with-gettext \
--with-pdo-mysql=mysqlnd \
--with-pgsql \
--with-pdo-pgsql \
--with-openssl=${INSTALL_DIR} \
--with-xsl \
--with-ttf=/usr \
--with-xslt \
--with-xslt-sablot=/usr \
--with-dom-xslt=/usr \
--with-mcrypt=${INSTALL_DIR} \
"
# ---- end of user-editable bits. Hopefully! ----

# Push the install dir's bin directory into the path
export PATH=${INSTALL_DIR}/bin:$PATH

#fix for PHP 5.3 Compile Error: Undefined References in dns.c
export EXTRA_LIBS="-lresolv"

# set up directories
mkdir -p ${SRC_DIR}
mkdir -p ${INSTALL_DIR}
if [ ! -f ${DIST_DIR} ] 
then
mkdir -p ${DIST_DIR}
fi

cd ${DIST_DIR}

# Get all the required packages
echo 'Downloading PHP'
if [ ! -f ${DIST_DIR}/${PHP5}.tar.gz ] 
then
    wget -c http://us.php.net/get/${PHP5}.tar.gz/from/this/mirror/ 
    mv index.html ${PHP5}.tar.gz
else
    echo 'Skipping: PHP already downloaded'
fi

echo 'Downloading CURL'
if [ ! -f ${DIST_DIR}/${CURL}.tar.gz ] 
then
    wget -c http://curl.haxx.se/download/${CURL}.tar.gz
else
    echo 'Skipping: CURL already downloaded'
fi

echo 'Downloading XDEBUG'
if [ ! -f ${DIST_DIR}/${XDEBUG}.tgz ] 
then
    wget -c http://xdebug.org/files/${XDEBUG}.tgz
else
    echo 'Skipping: XDEBUG already downloaded'
fi

echo 'Downloading M4'
if [ ! -f ${DIST_DIR}/${M4}.tar.gz ] 
then
    wget -c http://ftp.gnu.org/gnu/m4/${M4}.tar.gz
else
    echo 'Skipping: M4 already downloaded'
fi

echo 'Downloading AUTOMAKE'
if [ ! -f ${DIST_DIR}/${AUTOMAKE}.tar.gz ] 
then
    wget -c http://ftp.gnu.org/gnu/automake/${AUTOMAKE}.tar.gz
else
    echo 'Skipping: AUTOMAKE already downloaded'
fi

echo 'Downloading AUTOCONF'
if [ ! -f ${DIST_DIR}/${AUTOCONF}.tar.gz ] 
then
    wget -c http://ftp.gnu.org/gnu/autoconf/${AUTOCONF}.tar.gz
else
    echo 'Skipping: AUTOCONF already downloaded'
fi

echo 'Downloading CCLIENT'
if [ ! -f ${DIST_DIR}/${CCLIENT}.tar.Z ] 
then
    wget -c ftp://ftp.cac.washington.edu/imap/${CCLIENT}.tar.Z
else
    echo 'Skipping: CCLIENT already downloaded'
fi

echo 'Downloading OPENSSL'
if [ ! -f ${DIST_DIR}/${OPENSSL}.tar.gz ] 
then
    wget -c http://www.openssl.org/source/${OPENSSL}.tar.gz
else
    echo 'Skipping: OPENSSL already downloaded'
fi

echo 'Downloading LIBMCRYPT'
if [ ! -f ${DIST_DIR}/${LIBMCRYPT}.tar.gz ] 
then
    wget -c http://downloads.sourceforge.net/project/mcrypt/Libmcrypt/${LIBMCRYPT_VER}/${LIBMCRYPT}.tar.gz
else
    echo 'Skipping: LIBMCRYPT already downloaded'
fi

echo 'Downloading LIBTOOL'
if [ ! -f ${DIST_DIR}/${LIBTOOL}.tar.gz ] 
then
    wget -c http://ftp.gnu.org/gnu/libtool/${LIBTOOL}.tar.gz
else
    echo 'Skipping: LIBTOOL already downloaded'
fi

echo 'Downloading BISON'
if [ ! -f ${DIST_DIR}/${BISON}.tar.gz ] 
then
    wget -c http://ftp.gnu.org/gnu/bison/${BISON}.tar.gz
else
    echo 'Skipping: BISON already downloaded'
fi

echo 'Downloading FLEX'
if [ ! -f ${DIST_DIR}/${FLEX}.tar.gz ] 
then
    wget -c http://downloads.sourceforge.net/project/flex/flex/${FLEX_VER}/${FLEX}.tar.gz
else
    echo 'Skipping: FLEX already downloaded'
fi

echo 'Downloading RE2C'
if [ ! -f ${DIST_DIR}/${RE2C}.tar.gz ] 
then
    wget -c http://downloads.sourceforge.net/project/re2c/re2c/${RE2C_VER}/${RE2C}.tar.gz
else
    echo 'Skipping: RE2C already downloaded'
fi

echo '---------- Unpacking downloaded archives. This process may take several minutes! ----------'

cd ${SRC_DIR}
rm -rf *

# Unpack them all
echo "Extracting ${PHP5}..."
tar xzf ${DIST_DIR}/${PHP5}.tar.gz
echo 'Done.'

echo "Extracting ${CURL}..."
tar xzf ${DIST_DIR}/${CURL}.tar.gz
echo 'Done.'

echo "Extracting ${XDEBUG}..."
tar xzf ${DIST_DIR}/${XDEBUG}.tgz
echo 'Done.'

echo "Extracting ${M4}..."
tar xzf ${DIST_DIR}/${M4}.tar.gz
echo 'Done.'

echo "Extracting ${AUTOMAKE}..."
tar xzf ${DIST_DIR}/${AUTOMAKE}.tar.gz
echo 'Done.'

echo "Extracting ${AUTOCONF}..."
tar xzf ${DIST_DIR}/${AUTOCONF}.tar.gz
echo 'Done.'

echo "Extracting ${CCLIENT}..."
uncompress -cd ${DIST_DIR}/${CCLIENT}.tar.Z |tar x
echo 'Done.'

echo "Extracting ${OPENSSL}..."
uncompress -cd ${DIST_DIR}/${OPENSSL}.tar.gz |tar x
echo 'Done.'

echo "Extracting ${LIBMCRYPT}..."
tar xzf ${DIST_DIR}/${LIBMCRYPT}.tar.gz
echo 'Done.'

echo "Extracting ${LIBTOOL}..."
tar xzf ${DIST_DIR}/${LIBTOOL}.tar.gz
echo 'Done.'

echo "Extracting ${BISON}..."
tar xzf ${DIST_DIR}/${BISON}.tar.gz
echo 'Done.'

echo "Extracting ${FLEX}..."
tar xzf ${DIST_DIR}/${FLEX}.tar.gz
echo 'Done.'

echo "Extracting ${RE2C}..."
tar xzf ${DIST_DIR}/${RE2C}.tar.gz
echo 'Done.'

# Build them in the required order to satisfy dependencies

#cURL
echo '###################'
echo 'Compile CURL'
echo '###################'
cd ${SRC_DIR}/${CURL}
./configure --enable-ipv6 --enable-cookies \
--enable-crypto-auth --prefix=${INSTALL_DIR}
make
make install

#M4
echo '###################'
echo 'Compile M4'
echo '###################'
cd ${SRC_DIR}/${M4}
./configure --prefix=${INSTALL_DIR}
make
make install

#CCLIENT
echo '###################'
echo 'Compile CCLIENT'
echo '###################'
cd ${SRC_DIR}/${CCLIENT_DIR}
make ldb<<EOCCLIENT
y
EOCCLIENT
# Install targets are for wusses!
cp c-client/c-client.a ${INSTALL_DIR}/lib/libc-client.a
cp c-client/*.h ${INSTALL_DIR}/include

#OPENSSL
echo '###################'
echo 'Compile OPENSSL'
echo '###################'
# openssl
cd ${SRC_DIR}/${OPENSSL_DIR}
./config --prefix=${INSTALL_DIR}
make
make install

#LIBMCRYPT
echo '###################'
echo 'Compile LIBMCRYPT'
echo '###################'
cd ${SRC_DIR}/${LIBMCRYPT}
./configure --disable-posix-threads --prefix=${INSTALL_DIR}
make
make install

#LIBTOOL
echo '###################'
echo 'Compile LIBTOOL'
echo '###################'
cd ${SRC_DIR}/${LIBTOOL}
./configure --prefix=${INSTALL_DIR}
make
make install

#FLEX
echo '###################'
echo 'Compile FLEX'
echo '###################'
cd ${SRC_DIR}/${FLEX_FILE}
./configure --prefix=${INSTALL_DIR}
make
make install

#BISON
echo '###################'
echo 'Compile BISON'
echo '###################'
cd ${SRC_DIR}/${BISON}
./configure --prefix=${INSTALL_DIR}
make
make install

#RE2C
echo '###################'
echo 'Compile RE2C'
echo '###################'
cd ${SRC_DIR}/${RE2C}
./configure --prefix=${INSTALL_DIR}
make
make install

#AUTOMAKE
echo '###################'
echo 'Compile AUTOMAKE'
echo '###################'
cd ${SRC_DIR}/${AUTOMAKE}
./configure --prefix=${INSTALL_DIR}
make
make install

#AUTOCONF
echo '###################'
echo 'Compile AUTOCONF'
echo '###################'
cd ${SRC_DIR}/${AUTOCONF}
./configure --prefix=${INSTALL_DIR}
make
make install

#PHP 5
echo '###################'
echo 'Compile PHP'
echo '###################'
cd ${SRC_DIR}/${PHP5}
./configure ${PHPFEATURES}
make
make install

# Copy a basic configuration for PHP
mkdir -p ${INSTALL_DIR}/etc/php5/${DOMAIN}
cp ${SRC_DIR}/${PHP5}/php.ini-production ${INSTALL_DIR}/etc/php5/${DOMAIN}/php.ini

# XDEBUG
echo '###################'
echo 'Compile XDEBUG'
echo '###################'
cd ${SRC_DIR}/${XDEBUG}
export PHP_AUTOHEADER=${INSTALL_DIR}/bin/autoheader
export PHP_AUTOCONF=${INSTALL_DIR}/bin/autoconf
echo "$PHP_AUTOHEADER"
echo "$PHP_AUTOCONF"
${INSTALL_DIR}/bin/phpize
./configure --enable-xdebug --with-php-config=${INSTALL_DIR}/bin/php-config --prefix=${INSTALL_DIR}
# make clean
make
mkdir -p ${INSTALL_DIR}/extensions
cp modules/xdebug.so ${INSTALL_DIR}/extensions

echo "zend_extension=${INSTALL_DIR}/extensions/xdebug.so" >> ${INSTALL_DIR}/etc/php5/${DOMAIN}/xdebug.ini

# Copy PHP CGI
mkdir -p ${HOME}/${DOMAIN}/cgi-bin
chmod 0755 ${HOME}/${DOMAIN}/cgi-bin
cp ${INSTALL_DIR}/bin/php-cgi ${HOME}/${DOMAIN}/cgi-bin/php.cgi
rm -rf $SRC_DIR $DIST_DIR

# Create .htaccess
if [ -f ${HOME}/${DOMAIN}/.htaccess ] 
    then
    echo #
    echo '#####################################################################'
    echo ' Your domain already has a .htaccess, it is ranamed .htaccess_old    '
    echo '               --> PLEASE FIX THIS PROBLEM <--                       '
    echo '#####################################################################'
    echo #
    mv ${HOME}/${DOMAIN}/.htaccess ${HOME}/${DOMAIN}/.htaccess_old
fi

echo 'Options +ExecCGI' >> ${HOME}/${DOMAIN}/.htaccess
echo 'AddHandler php5-fastcgi .php' >> ${HOME}/${DOMAIN}/.htaccess
echo 'Action php5-fastcgi /cgi-bin/php.cgi' >> ${HOME}/${DOMAIN}/.htaccess
echo '' >> ${HOME}/${DOMAIN}/.htaccess
echo '<FilesMatch "^php5?\.(ini|cgi)$">' >> ${HOME}/${DOMAIN}/.htaccess
echo 'Order Deny,Allow' >> ${HOME}/${DOMAIN}/.htaccess
echo 'Deny from All' >> ${HOME}/${DOMAIN}/.htaccess
echo 'Allow from env=REDIRECT_STATUS' >> ${HOME}/${DOMAIN}/.htaccess
echo '</FilesMatch>' >> ${HOME}/${DOMAIN}/.htaccess 

echo '---------- INSTALL COMPLETE! ----------'
echo 
echo 'Configuration files:'
echo "1) General PHP -> ${INSTALL_DIR}/etc/php5/${DOMAIN}/php.ini"
echo "2) Xdebug conf -> ${INSTALL_DIR}/etc/php5/${DOMAIN}/xdebug.ini"
echo
echo 'You have to modify these files in order to enable Xdebug.'

exit 0

See also