PECL PDO Mysql

From DreamHost

Jump to: navigation, search

Contents

Introduction to PECL PDO_MySQL

PDO_MYSQL provides a mysql driver for PDO. Some PHP applications require this, so it can be useful to enable on a custom PHP 5 installation.

Installing PECL PDO_MSYQL

The instructions provided in this article or section are considered advanced.

You are expected to be knowledgeable in the UNIX shell.
Support for these instructions is not available from DreamHost tech support.
Server changes may cause this to break. Be prepared to troubleshoot this yourself if this happens.
We seriously aren't kidding about this. Read the blinky part again.

Please Note: The installation of PECL pdo_mysql requires Installing_PHP5.
The default dreamhost PHP installation already has pdo_mysql, this is only for custom installations.


Below is the install script for the PECL pdo_mysql PHP module.
Please make sure to run 'dos2unix pdo_mysql.sh' from the shell if you used a Windows-based editor to create this file.

pdo_mysql.sh

#!/bin/sh
set -e


# Based off of the PECL Zip install script.

#### User Configuration Options
# Temporary source directory
SRCDIR=${HOME}/source
# Download temporary DIST files to which directory?
DISTDIR=${HOME}/dist
# Delete contents of DISTDIR after installation? (Default: Yes)
DISTDEL="No"
# Install to which directory?
# Note: This *MUST* be set to your PHP5 installation directory!
INSTALLDIR=${HOME}/php5
# Nice Level for Processes. (Depreciated)
# Higher is nicer, lower is less nice and could get your install process killed!
NICE=19

## Program Version Configuration
# Don't touch unless you know what you're doing!
AUTOCONF="autoconf-2.61"
AUTOMAKE="automake-1.10"
# What features do you want enabled?
PDOFEATURES="--prefix=${INSTALLDIR}"


set -e


#### END User Configuration Options

########## DO NOT MODIFY BELOW ##########
sleep 1s

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

# Clear and/or create the source directory.
if [ -d ${SRCDIR} ]; then
		  echo "Source directory already exists! Cleaning it..."
		  rm -rf $SRCDIR/*
else
		  echo "Creating source directory..."
		  mkdir -p ${SRCDIR}
fi
# Create the dist files directory if it doesn't exist
# optionally cleaning it if it does exist already.
if [ -d ${DISTDIR} ]; then
	echo ""; echo "Distribution directory already exists!"; echo "Clean it?"
	if [ ${DISTDEL} == "Yes" ]
	then
		echo ""; echo "Yes!"; echo "Cleaning now..."; echo ""
		rm -rf $DISTDIR/*
	else
		echo ""; echo "No!"; echo "Leaving the distribution directory intact."; echo ""
	fi
else
		  echo "Creating distribution directory..."
		  mkdir -p ${DISTDIR}
fi
# Make sure the extensions directory exists.
if [ -d ${INSTALLDIR}/lib/php/extensions ]; then
		  echo "lib/php/extensions folder already exists! Doing nothing..."
else
		  mkdir -p ${INSTALLDIR}/lib/php/extensions
fi

# Detect how many processors the system has (for more optimal compliation).
cores=2   # the number of cores/procs to use when building
if [ $cores -a $cores -gt 1 ]; then
		  j="-j$cores "
fi
		  OS=`uname -s`
if [ "Darwin" = $OS ]; then
		  sed=gnused
		  makefile=makefile.macosx
else
		  makefile=makefile.linux_x86_ppc_alpha
		  sed=sed
fi

for i in $sed wget; do
		  $i --version >/dev/null 2>&1
done

## Check if packages already exist and get packages the ones that don't.
cd ${DISTDIR}
# Do not abort on errors.
set +e
# Wget options
WGETOPT="-t1 -T10 -w5 -q -c"

# Do some of our own error checking here too.
if [ -a ${DISTDIR}/${AUTOCONF}.tar.gz ]; then
		  echo "Skipping wget of ${AUTOCONF}.tar.gz"
else
		  wget $WGETOPT ftp://ftp.ucsb.edu/pub/mirrors/linux/gentoo/distfiles/${AUTOCONF}.tar.gz
		  # If primary mirror fails, use the alternative mirror.
		  if [ -a ${DISTDIR}/${AUTOCONF}.tar.gz ]; then
			echo "Got ${AUTOCONF}.tar.gz"
		  else
				wget $WGETOPT ftp://ftp.gnu.org/gnu/autoconf/${AUTOCONF}.tar.gz
				# Check to make sure the alternative mirror worked.
				if [ -a ${DISTDIR}/${AUTOCONF}.tar.gz ]; then
					echo "Got ${AUTOCONF}.tar.gz"
				else
					echo "Failed to get ${AUTOCONF}.tar.gz. Aborting install!"
					exit 0
				fi
		  fi
fi
if [ -a ${DISTDIR}/${AUTOMAKE}.tar.bz2 ]; then
		  echo Skipping wget of ${AUTOMAKE}.tar.bz2
else
		  wget $WGETOPT ftp://ftp.ucsb.edu/pub/mirrors/linux/gentoo/distfiles/${AUTOMAKE}.tar.bz2
		  # If primary mirror fails, use the alternative mirror.
		  if [ -a ${DISTDIR}/${AUTOMAKE}.tar.bz2 ]; then
			echo "Got ${AUTOMAKE}.tar.bz2"
		  else
				wget $WGETOPT ftp://ftp.gnu.org/gnu/automake/${AUTOMAKE}.tar.bz2
				# Check to make sure the alternative mirror worked.
				if [ -a ${DISTDIR}/${AUTOMAKE}.tar.bz2 ]; then
					echo "Got ${AUTOMAKE}.tar.bz2"
				else
					echo "Failed to get ${AUTOMAKE}.tar.bz2. Aborting install!"
					exit 0
				fi
		  fi
fi


set -e

# Extract the source files into the source directory.
cd ${SRCDIR}
echo "Extracting ${AUTOCONF}..."
tar xzf ${DISTDIR}/${AUTOCONF}.tar.gz > /dev/null
echo "Done."
echo "Extracting ${AUTOMAKE}..."
tar xjf ${DISTDIR}/${AUTOMAKE}.tar.bz2 > /dev/null
echo "Done."

## Compile deps and install Pecl pdo_mysql
#AUTOCONF
cd ${SRCDIR}/${AUTOCONF}
./configure --prefix=${SRCDIR}
# make clean
nice -n ${NICE} make
make install

#AUTOMAKE
cd ${SRCDIR}/${AUTOMAKE}
./configure --prefix=${SRCDIR}
# make clean
nice -n ${NICE} make
make install

cd ${HOME}

echo "Downloading PDO_MYSQL..."
pecl download pdo_mysql
echo "Done."
echo "Extracting PDO_MYSQL..."
pecl bundle pdo_mysql
echo "Done"

# Required exports
export PATH=${SRCDIR}/bin:$PATH
export PHP_PREFIX=${INSTALLDIR}/bin


echo "Building PDO_MYSQL...."

cd ${HOME}/PDO_MYSQL
$PHP_PREFIX/phpize
./configure ${PDOFEATURES}
# make clean
nice -n ${NICE} make


echo "Done!"

# Copy the SO files
cp modules/pdo_mysql.so ${INSTALLDIR}/lib/php/extensions/pdo_mysql.so
cp modules/pdo_mysql.la ${INSTALLDIR}/lib/php/extensions/pdo_mysql.la

# Post install clean-up.
sleep 2s
cd ${HOME} && clear

#rm -rf $SRCDIR
if [ ${DISTDEL} == "Yes" ]; then
	rm -rf $DISTDIR
elif [ ${DISTDEL} == "No" ]; then
	echo "Your DISTDIR will not be cleaned."
else
	echo "Unknown DISTDEL option! Cleaning your DISTDIR by default."
fi

## End of Install
echo "Installation completed!" `date +%r`

php.ini Modifications

Locate the following line(s) in your php.ini file:

; Directory in which the loadable extensions (modules) reside.
extension_dir = "./"

Modify the extension_dir line to look like this, replacing username with the username of your account:

; Directory in which the loadable extensions (modules) reside.
extension_dir = "/home/username/php5/lib/php/extensions"


Now add the following near the very end of your current php.ini file.

[pdo_mysql]
extension="pdo_mysql.so"
Personal tools