Wow, almost a year I didn’t touch this blog. At least this blog still have visitor from nowhere 🙂
Ok, today I have challenge to install phalcon php extension (at the moment the version is 3.4.2). The vps server already has centminmod installed using latest version of CentOS 7.
Since the server is critical so I decide to use other vps server (get free $25 in credit for new user here) to get the recipe and share it here for others that might need it.
Lets get start!
Update CentOS
# yum update
Check current php version
# php -v
PHP 7.0.33 (cli) (built: Feb 16 2019 10:38:06) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.0.33, Copyright (c) 1999-2017, by Zend Technologies
Yes, this legacy app run on php 7.0.33
Compile Phalcon php
# git clone --branch v3.4.2 --depth=1 "git://github.com/phalcon/cphalcon.git" # cd cphalcon/build/ # ./install
Configuring for:
PHP Api Version: 20151012
Zend Module Api No: 20151012
Zend Extension Api No: 320151012
appending configuration tag “CXX” to libtool
mkdir .libs
gcc -I. -I/root/cphalcon/build/php7/64bits -DPHP_ATOM_INC -I/root/cphalcon/build/php7/64bits/include -I/root/cphalcon/build/php7/64bits/main -I/root/cphalcon/build/php7/64bits -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -DPHALCON_RELEASE -DHAVE_CONFIG_H -march=native -mtune=native -O2 -fomit-frame-pointer -c /root/cphalcon/build/php7/64bits/phalcon.zep.c -fPIC -DPIC -o .libs/phalcon.o
gcc -shared .libs/phalcon.o -march=native -mtune=native -Wl,-soname -Wl,phalcon.so -o .libs/phalcon.so
creating phalcon.la
(cd .libs && rm -f phalcon.la && ln -s ../phalcon.la phalcon.la)
cp ./.libs/phalcon.so /root/cphalcon/build/php7/64bits/modules/phalcon.so
cp ./.libs/phalcon.lai /root/cphalcon/build/php7/64bits/modules/phalcon.la
PATH=”$PATH:/sbin” ldconfig -n /root/cphalcon/build/php7/64bits/modules
———————————————————————-
Libraries have been installed in:
/root/cphalcon/build/php7/64bits/modules
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR’
flag during linking and do at least one of the following:
– add LIBDIR to the `LD_LIBRARY_PATH’ environment variable
during execution
– add LIBDIR to the `LD_RUN_PATH’ environment variable
during linking
– use the `-Wl,–rpath -Wl,LIBDIR’ linker flag
– have your system administrator add LIBDIR to `/etc/ld.so.conf’
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
Build complete.
Don’t forget to run ‘make test’.
Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20151012/
Installing header files: /usr/local/include/php/
Thanks for compiling Phalcon!
Build succeed: Please restart your web server to complete the installation
Enable phalcon extension
# nano /etc/centminmod/php.d/phalcon.ini
fill with this line :
extension=phalcon.so
save the file and restart
# nprestart
Check if phalcon extension installed
echo ‘<?php phpinfo();?>’ > /usr/local/nginx/html/info2.php
then access it with browser
or using command line
# php -m | grep phalcon
Handling rewrite problem
“Mod-Rewrite is not enabled
Please enable rewrite module on your web server to continue”
# nano /usr/local/nginx/conf/conf.d/learn.digitalfusi.com.ssl.conf
Change these sections :
1. root /home/nginx/domains/url/public/public;
2. try_files $uri $uri/ /index.php?_url=$uri&$args;
save.
Update 1 :
section 2 need to update as this :
try_files $uri $uri/ @rewrite;
and make new section for @rewrite :
location @rewrite {
rewrite ^/(.*)$ /index.php?_url=/$1;
} #rewrite
Update 2 :
Handling error message :
“warning: Remote branch v3.4.3 not found in upstream origin, using HEAD instead”
wget -c https://github.com/phalcon/cphalcon/archive/v3.4.3.tar.gz tar xvzf v3.4.3.tar.gz cd cphalcon-3.4.3/build/ ./install
Try if rewrite rule work
Edit controller file
# nano /home/nginx/domains/url/public/app/controllers/IndexController.php
Modify the content to this
<?php
class IndexController extends ControllerBase
{public function indexAction()
{}
public function testAction($id1,$id2,$id3)
{
echo ‘really nice bro ‘.$id1.’ var 2 :’.$id2.’ var 3 : ‘.$id3;
}
}
save the file.
Access the address from browser
https://url/index/test/d/e/f
and the output will be
really nice bro d var 2 :e var 3 : f
Great, since the value of d,e and f printed correctly then rewrite rule work perfectly.
Note :
- I upload sample project inside public folder so for root (document root) I change it to public/public.
- url in this note is depend on you. It might be tld os subdomain
- I enable https by default so I only deal with ssl.conf file
- webtools only available from localhost, enable it from cmd -> phalcon project projectname –enable-webtools