Compile PHP 5.2.17 using phpfarm

In general phpfarm is working well in case you need multiple php environment in single machine. Special case is for PHP 5.2.17 (latest version of 5.2 generation), I got this error when compile :

opt/phpfarm/src/php-5.2.17/ext/dom/node.c: In function ‘zim_domnode_getNodePath’:
/opt/phpfarm/src/php-5.2.17/ext/dom/node.c:2002:8: warning: pointer targets in assignment differ in signedness [-Wpointer-sign]
value = xmlGetNodePath(nodep);
make: *** [ext/dom/node.lo] Error 1
make failed.

Google suggest me for apply patch.

php programmer

$cd php-5.2.17

$sudo curl -o php-5.2.17.patch
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Dload  Upload   Total   Spent    Left  Speed
100  1817  100  1817    0     0    722      0  0:00:02  0:00:02 –:–:–   722

run the patch ::

$sudo patch -p0 -b < php-5.2.17.patch

patching file ext/dom/node.c
Hunk #1 succeeded at 1950 (offset 55 lines).
patching file ext/dom/documenttype.c
Hunk #1 succeeded at 215 (offset 10 lines).
patching file ext/simplexml/simplexml.c
Hunk #1 succeeded at 1343 (offset -74 lines).

$cd ..

$ sudo ./ 5.2.17

and finally get this :

Build complete.
Don’t forget to run ‘make test’.

Installing PHP SAPI module:       cgi
Installing PHP CGI binary: /opt/phpfarm/inst/php-5.2.17/bin/
Installing PHP CLI binary:        /opt/phpfarm/inst/php-5.2.17/bin/
Installing PHP CLI man page:      /opt/phpfarm/inst/php-5.2.17/man/man1/
Installing build environment:     /opt/phpfarm/inst/php-5.2.17/lib/php/build/
Installing header files:          /opt/phpfarm/inst/php-5.2.17/include/php/
Installing helper programs:       /opt/phpfarm/inst/php-5.2.17/bin/
program: phpize
program: php-config
Installing man pages:             /opt/phpfarm/inst/php-5.2.17/man/man1/
page: phpize.1
page: php-config.1
Installing PDO headers:          /opt/phpfarm/inst/php-5.2.17/include/php/ext/pdo/


check version now ::

$ /opt/phpfarm/inst/php-5.2.17/bin/php -v

PHP 5.2.17 (cli) (built: Sep 24 2014 16:53:53) (DEBUG)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies

Archive patch for backup (php5.2.17.patch.txt)

How to install Laravel on FreeBSD 9.2

Laravel Shirt - Basic Dark As I have more machine that run FreeBSD 9 I decide to explore the installation process of PHP Framework. I want to start with Laravel as I feel this framework will be suitable with our team requirement. I already have working PHP 5.2.17 with Apache on my FreeBSD 9.2 box so I have to upgrade it to another version. Lets get started :

Checking installed PHP, MySQL and  Apache

Check PHP

# pkg_info | grep php
php52-5.2.17_15     PHP Scripting Language
php52-ctype-5.2.17_15 The ctype shared extension for php
php52-curl-5.2.17_15 The curl shared extension for php
php52-dom-5.2.17_15 The dom shared extension for php
php52-extensions-1.3_1 A “meta-port” to install PHP extensions
php52-filter-5.2.17_15 The filter shared extension for php
php52-gd-5.2.17_15  The gd shared extension for php
php52-hash-5.2.17_15 The hash shared extension for php
php52-iconv-5.2.17_15 The iconv shared extension for php
php52-json-5.2.17_15 The json shared extension for php
php52-pcre-5.2.17_15 The pcre shared extension for php
php52-pdo-5.2.17_15 The pdo shared extension for php
php52-pdo_mysql-5.2.17_15 The pdo_mysql shared extension for php
php52-pdo_sqlite-5.2.17_15 The pdo_sqlite shared extension for php
php52-posix-5.2.17_15 The posix shared extension for php
php52-session-5.2.17_15 The session shared extension for php
php52-simplexml-5.2.17_15 The simplexml shared extension for php
php52-spl-5.2.17_15 The spl shared extension for php
php52-sqlite-5.2.17_15 The sqlite shared extension for php
php52-tokenizer-5.2.17_15 The tokenizer shared extension for php
php52-xml-5.2.17_15 The xml shared extension for php
php52-xmlreader-5.2.17_15 The xmlreader shared extension for php
php52-xmlwriter-5.2.17_15 The xmlwriter shared extension for php

Check MySQL

# pkg_info | grep mysql
mysql51-client-5.1.72 Multithreaded SQL database (client)
mysql51-server-5.1.72 Multithreaded SQL database (server)
php52-pdo_mysql-5.2.17_15 The pdo_mysql shared extension for php

Check Apache

# pkg_info | grep apache
apache22-2.2.26     Version 2.2.x of Apache web server with prefork MPM.

Upgrade PHP and the Extensions

According to Laravel documentation, PHP version needed for Laravel 4 is PHP >=5.3.7

# cd /usr/ports/lang/ && ls | grep php

More in PHP5 port

# cat php5/Makefile | more

# Created by: Alex Dupre <[email protected]>
# $FreeBSD: lang/php5/Makefile 330741 2013-10-18 12:37:45Z ale $

PORTNAME=       php5
PORTVERSION=    5.4.21
CATEGORIES?=    lang devel www
MASTER_SITE_SUBDIR=     distributions

Ok, I’ll choose PHP5 port only as this version will give me PHP 5.4.21 which is supported by Laravel and also supported by specific package such as Laravel 4 Generator by Jeffery Way.

Delete older PHP 5.2

# pkg_delete -vx php52

Install PHP 5.4

# cd /usr/ports/lang/php5 && make install


Choose options; CLI, Apache module and LINKTHR.

Check PHP version after install

# php -v
PHP 5.4.21 (cli) (built: Dec 17 2013 13:07:34)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

ok, continue with PHP extensions

# cd /usr/ports/lang/php5-extensions && make install

Choose same as old process (PHP 5.2 install) + Mcrypt.


Restart Apache

# service apache22 restart
Performing sanity check on apache22 configuration:
Syntax OK
Stopping apache22.
Waiting for PIDS: 789.
Performing sanity check on apache22 configuration:
Syntax OK
Starting apache22.


At this stage we have working Apache, MySQL and PHP on FreeBSD 9.2

Install Composer & Laravel

Download Composer

I use snapshot version of Composer

# wget -c

# ln -s /home/alam/composer.phar /usr/local/bin/composer

# chmod 755 composer.phar

Download Laravel

# wget -c --no-check-certificate

Unzip Laravel

# unzip

Move Laravel to documentroot

# mv /home/alam/laravel-master /usr/local/www/apache22/data/laravel

Open composer.json

# cd /usr/local/www/apache22/data/laravel/ && ee composer.json

Add Jeffery Way Generator

“name”: “laravel/laravel”,
“description”: “The Laravel Framework.”,
“keywords”: [“framework”, “laravel”],
“license”: “MIT”,
“require”: {
“laravel/framework”: “4.1.*”,
“way/generators”: “dev-master”


Install Laravel through Composer

# cd /usr/local/www/apache22/data/laravel/

# composer install

All files will be download and when ready you can access it like previous how to.

Picture from : Laravel Shirt – Basic Dark by titeyado

Install Varnish with Apache on FreeBSD 9.2

Today I want to try to install Varnish on FreeBSD. A few scenarios  on my mind. Install varnish with nginx, lighttpd or cherokee with different port under Apache as front end. Due to lack of experience with Varnish I’ll start with Varnish using Apache first. Others will follow 🙂

Lets get started

Check Apache installation

# pkg_info | grep apache
apache22-2.2.26     Version 2.2.x of Apache web server with prefork MPM.

Check location of varnish

# whereis varnish
varnish: /usr/ports/www/varnish

Install varnish

# cd /usr/ports/www/varnish && make install


This port has installed the following files which may act as network
servers and may therefore pose a remote security risk to the system.

This port has installed the following startup scripts which may cause
these network services to be started at boot time.

If there are vulnerabilities in these programs there may be a security
risk to the system. FreeBSD makes no guarantee about the security of
ports included in the Ports Collection. Please type ‘make deinstall’
to deinstall the port if this is a concern.

For more information, and contact details about the security
status of this software, see the following webpage:

Check it

# pkg_info | grep varnish
varnish-3.0.4       The Varnish high-performance HTTP accelerator

Configure Varnish

Add varnish on rc.conf

# echo 'varnishd_enable=YES' >> /etc/rc.conf

Starting Varnish

# /usr/local/etc/rc.d/varnishd start
Starting varnishd.
Classic hash: 16383 buckets

Check if varnish really run?

# /usr/local/etc/rc.d/varnishd status
varnishd is not running.


View varnish configuration

# ee /usr/local/etc/varnish/default.vcl

Inside the file I see these :

 # Default backend definition.  Set this to point to your content
# server.
# backend default {
#     .host = “”;
#     .port = “8080”;
# }

It means the content need to run on port 8080.

Remove all # mark to be like this :

backend default {
.host = “”;
.port = “8080”;

save the file.

Change apache configuration to run on port 8080.

# ee /usr/local/etc/apache22/httpd.conf


Listen 80


Listen 8080

save the fle.

Restart apache

# /usr/local/etc/rc.d/apache22 restart
Performing sanity check on apache22 configuration:
Syntax OK
Stopping apache22.
Waiting for PIDS: 770.
Performing sanity check on apache22 configuration:
Syntax OK
Starting apache22.

# ps -ax | grep httpd
944 ??  Ss    0:00.11 /usr/local/sbin/httpd -DNOHTTPACCEPT
945 ??  S     0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
946 ??  I     0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
947 ??  I     0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
948 ??  I     0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
949 ??  I     0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT

Retry to run varnish

# /usr/local/etc/rc.d/varnishd start
Starting varnishd.
Classic hash: 16383 buckets

Check varnish
# ps -ax | grep varnish
963 ??  Ss    0:00.00 varnishd: Varnish-Mgr (varnishd)
964 ??  S     0:00.03 varnishd: Varnish-Chld (varnishd)
966  0  R+    0:00.00 grep varnish

Check Varnish

Check via phpinfo file, I can see it run on Varnish :


Interesting. I’ll continue this experiment with different web server as soon as possible.

See you.

P.S : you can enable varnish log

# echo 'varnishlog_enable=YES' >> /etc/rc.conf
# /usr/local/etc/rc.d/varnishlog start
Starting varnishlog.

Deploy google app engine :

Deploy php script aka application to google app engine is interesting. I came from traditional ftp-ing (so 1999 hehehe), scp and cpanel. Google app engine provide 2 ways of deployment; through and via git. I’ll try to explore both options now.


In this stage, application need to get register first to App Engine Administration Console. Visit this address to get it done :


Choose google account to use for this purpose.


click “Create Application” button.


make sure to check name availability and quota application (max 10).


Google app engine will need grant access from your google account.


Click ‘Accept” button to get started.


Deployment using

$ google_appengine/ –oauth2 update digitalfusi/

08:59 PM Application: difuphp; version: 1
08:59 PM Host:
08:59 PM
Starting update of app: difuphp, version: 1
08:59 PM Getting current resource limits.
Your browser has been opened to visit:

If your browser is on a different machine then exit and re-run this
application with the command-line parameter


(process:3287): GLib-CRITICAL **: g_slice_set_config: assertion `sys_page_size == 0′ failed
Authentication successful.
09:01 PM Scanning files on local disk.
09:01 PM Cloning 2 application files.
09:01 PM Uploading 2 files and blobs.
09:01 PM Uploaded 2 files and blobs
09:01 PM Compilation starting.
09:01 PM Compilation completed.
09:01 PM Starting deployment.
09:01 PM Checking if deployment succeeded.
09:01 PM Deployment successful.
09:01 PM Checking if updated app version is serving.
09:01 PM Completed update of app: difuphp, version: 1

Testing the result by visit

Selection_013 is very straightforward command. Combine with oauth option I can upload all my php script to google infrastructure. Awesome.


install php sdk for google app engine on ubuntu 13.04

Another need for try php on google app engine make install all required stuff :

Install python

$ sudo apt-get install python

Check version :

$ python -V
Python 2.7.4

Install PHP CGI

Download latest php 5.4 from download page :

$ wget -c -O php-5.4.22.tar.gz

$ tar xvzf php-5.4.22.tar.gz

$ cd php-5.4.22/

$ sudo apt-get install gcc libmysqlclient-dev libxml2-dev

$ ./configure --prefix=$PWD/installdir --enable-bcmath --with-mysql

$ make install

Check version :

$ pwd


using absolute path

$ /home/alamsyah/php-5.4.22/installdir/bin/php-cgi -v

PHP 5.4.22 (cgi-fcgi) (built: Nov 23 2013 11:22:27)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

Google APP engine SDK for PHP

Download latest version from here.

$ cd

$ wget -c

$ unzip

MySQL Server

$ sudo apt-get install mysql-server-5.5 mysql-client-5.5

check :

$ dpkg -l | grep mysql

ii  libdbd-mysql-perl                         4.021-1                                i386         Perl5 database interface to the MySQL database
ii  libmysqlclient-dev                        5.5.34-0ubuntu0.13.04.1                i386         MySQL database development files
ii  libmysqlclient18:i386                     5.5.34-0ubuntu0.13.04.1                i386         MySQL database client library
ii  mysql-client-5.5                          5.5.34-0ubuntu0.13.04.1                i386         MySQL database client binaries
ii  mysql-client-core-5.5                     5.5.34-0ubuntu0.13.04.1                i386         MySQL database core client binaries
ii  mysql-common                              5.5.34-0ubuntu0.13.04.1                all          MySQL database common files, e.g. /etc/mysql/my.cnf
ii  mysql-server-5.5                          5.5.34-0ubuntu0.13.04.1                i386         MySQL database server binaries and system database setup
ii  mysql-server-core-5.5                     5.5.34-0ubuntu0.13.04.1                i386         MySQL database server binaries

Great, client and server installed.

At this stage all requirement has installed correctly. I need php editor and I choose sublime text 2.

Install Sublime Text 2

$sudo add-apt-repository ppa:webupd8team/sublime-text-2

$sudo apt-get update

$sudo apt-get install sublime-text