1
0
mirror of https://github.com/stefanocasazza/ULib.git synced 2025-09-28 19:05:55 +08:00
5 Running PHP scripts in ULib
stefano casazza edited this page 2019-01-18 15:09:46 +01:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#Running PHP scripts in ULib


Download and install the last release of ULib. I suggest for to have many info to configure ULib with debug (./configure --enable-debug ...). From the downloaded source copy the shell script php.sh, that you can found in ULib-2.4.2/tests/examples, to some working directory, say /var/www/example.


The first time we run ./php.sh inside /var/www/example we must have as result the following directory structure:

./php.sh

./userver.cfg

./err: php[1-3].err

./log: php[1-3].log

./out: php[1-3].out

./www: index.php ./www/cgi-bin: index.php


#1) You can safely run PHP scripts using ULibs CGI support.

Run ./php.sh with argument 1: (we have as output something like that)

stefano: /var/www/example # ./php.sh 1
PID = 26222
stefano: /var/www/example # curl http://localhost:8080/cgi-bin/index.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<style type="text/css">
body {background-color: #ffffff; color: #000000;}
...
stefano: /var/www/example # kill 26222

The downside of this approach is the latency caused by the spawn of a new PHP interpreter at each request as we can see in ./log/php1.log:

03/08/15 18:47:51 (pid 18714)> request "/cgi-bin/index.php" run in 219 ms

#2) To improve performance we can rely on a separate PHP processor to handle PHP requests proxed by FastCGI protocol. Most often, this processing is handled with php-fpm.

See the official PHP documentation for fpm for all possible configuration options.

a) TCP socket (IP and port) approach

Edit php-fpm.conf in order to have listen = 127.0.0.1:9000

stefano: /var/www/example # /etc/init.d/php-fpm start
Starting PHP FastCGI Process Manager ...
stefano: /var/www/example # ./php.sh 2a
PID = 26222
stefano: /var/www/example # curl http://localhost:8080/index.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<style type="text/css">
body {background-color: #ffffff; color: #000000;}
...
stefano: /var/www/example # kill 26222; /etc/init.d/php-fpm stop
Stopping PHP FastCGI Process Manager ...

Now the latency is much better as we can see in ./log/php2a.log:

03/08/15 20:21:00 (pid 2183)> request "/info.php" run in 8 ms

b) unix domain socket (UDS) approach

Edit php-fpm.conf in order to have listen = /tmp/fcgi.socket

stefano: /var/www/example # /etc/init.d/php-fpm start
Starting PHP FastCGI Process Manager ...
stefano: /var/www/example # ./php.sh 2b
PID = 26222
stefano: /var/www/example # curl http://localhost:8080/index.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<style type="text/css">
body {background-color: #ffffff; color: #000000;}
...
stefano: /var/www/example # kill 26222; /etc/init.d/php-fpm stop
Stopping PHP FastCGI Process Manager ...

The latency is not changed as we can see in ./log/php2b.log:

03/08/15 20:21:00 (pid 2183)> request "/info.php" run in 8 ms 

#3) To get superior performance you will want to embed the PHP interpreter in the Ulib, ie to configure ULib with php embedded (./configure --with-php-embedded ...).

A bunch of distros (such as Fedora, Red Hat and CentOS) include a php-embedded package. Install it, along with php-devel and you should be able to build ULib with PHP interpreter embedded (Ubuntu 16.10: apt-get install libphp-embed php-dev).

Reinstall ULib and run ./php.sh with argument 3: (we have as output something like that)

stefano: /var/www/example # ./php.sh 3
PID = 26222
stefano: /var/www/example # curl http://localhost:8080/
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<style type="text/css">
body {background-color: #ffffff; color: #000000;}
...
stefano: /var/www/example # kill 26222

The latency is now better as we can see in ./log/php3.log:

03/08/15 20:21:00 (pid 2183)> request "/info.php" run in 7 ms