Skip to content

Commit e386dc3

Browse files
authored
[php] Phalcon5 and PHP8.1 (#7615)
* Dockerfiles update: Phalcon5, PHP8.1, Ubuntu22.04 * Change code for Phalcon5 * Update benchmark config * Update config for Phalcon5 * Clean php-fpm config * Changes to mongodb work
1 parent 962830a commit e386dc3

File tree

11 files changed

+158
-27
lines changed

11 files changed

+158
-27
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
use Phalcon\Config;
4+
5+
return new Config([
6+
'database' => [
7+
'adapter' => 'Mysql',
8+
'host' => 'tfb-database',
9+
'username' => 'benchmarkdbuser',
10+
'password' => 'benchmarkdbpass',
11+
'name' => 'hello_world',
12+
'persistent' => true,
13+
],
14+
'mongodb' => [
15+
'url' => 'mongodb://tfb-database:27017',
16+
'db' => 'hello_world'
17+
],
18+
'application' => [
19+
'controllersDir' => APP_PATH . '/app/controllers/',
20+
'modelsDir' => APP_PATH . '/app/models/',
21+
'collectionsDir' => APP_PATH . '/app/collections/',
22+
'viewsDir' => APP_PATH . '/app/views/',
23+
'baseUri' => '/',
24+
]
25+
]);

frameworks/PHP/phalcon/app/config/config.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
use Phalcon\Config;
3+
use Phalcon\Config\Config;
44

55
return new Config([
66
'database' => [

frameworks/PHP/phalcon/benchmark_config.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"database": "MySQL",
1515
"framework": "phalcon",
1616
"language": "PHP",
17-
"flavor": "PHP7",
17+
"flavor": "PHP8.1",
1818
"orm": "raw",
1919
"platform": "FPM/FastCGI",
2020
"webserver": "nginx",
@@ -34,7 +34,7 @@
3434
"database": "MongoDB",
3535
"framework": "phalcon",
3636
"language": "PHP",
37-
"flavor": "PHP7",
37+
"flavor": "PHP8.1",
3838
"orm": "raw",
3939
"platform": "FPM/FastCGI",
4040
"webserver": "nginx",
@@ -56,7 +56,7 @@
5656
"database": "MySQL",
5757
"framework": "phalcon",
5858
"language": "PHP",
59-
"flavor": "PHP7",
59+
"flavor": "PHP8.1",
6060
"orm": "raw",
6161
"platform": "FPM/FastCGI",
6262
"webserver": "nginx",

frameworks/PHP/phalcon/deploy/conf/php-fpm.conf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
; Pid file
1515
; Note: the default prefix is /var
1616
; Default Value: none
17-
pid = /run/php/php7.4-fpm.pid
17+
pid = /run/php/php-fpm.pid
1818

1919
; Error log file
2020
; If it's set to "syslog", log is sent to syslogd instead of being written
@@ -161,7 +161,7 @@ group = www-data
161161
; (IPv6 and IPv4-mapped) on a specific port;
162162
; '/path/to/unix/socket' - to listen on a unix socket.
163163
; Note: This value is mandatory.
164-
listen = /run/php/php7.4-fpm.sock
164+
listen = /run/php/php-fpm.sock
165165

166166
; Set listen(2) backlog.
167167
; Default Value: 511 (-1 on FreeBSD and OpenBSD)

frameworks/PHP/phalcon/deploy/nginx.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ http {
4242

4343

4444
upstream fastcgi_backend {
45-
server unix:/var/run/php/php7.4-fpm.sock;
45+
server unix:/var/run/php/php-fpm.sock;
4646
keepalive 40;
4747
}
4848

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,24 @@
1-
FROM ubuntu:20.04
1+
FROM ubuntu:22.04
22

33
ARG DEBIAN_FRONTEND=noninteractive
44

55
RUN apt-get update -yqq && apt-get install -yqq software-properties-common > /dev/null
66
RUN LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php
77
RUN apt-get update -yqq > /dev/null && \
88
apt-get install -yqq nginx git unzip \
9-
php7.4-cli php7.4-fpm php7.4-mysql php7.4-mbstring > /dev/null
9+
php8.1-cli php8.1-fpm php8.1-mysql php8.1-mbstring php8.1-xml > /dev/null
1010

1111
COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
1212

13-
COPY deploy/conf/* /etc/php/7.4/fpm/
13+
COPY deploy/conf/* /etc/php/8.1/fpm/
1414

1515
ADD ./ /phalcon
1616
WORKDIR /phalcon
1717

18-
RUN apt-get install -yqq php7.4-psr php7.4-phalcon > /dev/null
18+
RUN apt-get install -y php-pear php8.1-dev > /dev/null
19+
RUN pecl install phalcon-5.0.2 && echo "extension=phalcon.so" > /etc/php/8.1/fpm/conf.d/phalcon.ini
1920

20-
RUN if [ $(nproc) = 2 ]; then sed -i "s|pm.max_children = 1024|pm.max_children = 512|g" /etc/php/7.4/fpm/php-fpm.conf ; fi;
21+
RUN if [ $(nproc) = 2 ]; then sed -i "s|pm.max_children = 1024|pm.max_children = 512|g" /etc/php/8.1/fpm/php-fpm.conf ; fi;
2122

2223
RUN composer install --optimize-autoloader --classmap-authoritative --no-dev --ignore-platform-reqs
2324

@@ -27,5 +28,5 @@ RUN chmod -R 777 app
2728

2829
EXPOSE 8080
2930

30-
CMD service php7.4-fpm start && \
31+
CMD service php8.1-fpm start && \
3132
nginx -c /phalcon/deploy/nginx.conf

frameworks/PHP/phalcon/phalcon-mongodb.dockerfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ RUN apt-get install -yqq php7.4-psr php7.4-phalcon > /dev/null
2121

2222
RUN composer install --optimize-autoloader --classmap-authoritative --no-dev --quiet --ignore-platform-reqs
2323

24+
RUN mv /phalcon/public/index-mongo.php /phalcon/public/index.php
25+
2426
RUN chmod -R 777 app
2527

2628
EXPOSE 8080
Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,30 @@
1-
FROM ubuntu:20.04
1+
FROM ubuntu:22.04
22

33
ARG DEBIAN_FRONTEND=noninteractive
44

55
RUN apt-get update -yqq && apt-get install -yqq software-properties-common > /dev/null
66
RUN LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php
77
RUN apt-get update -yqq > /dev/null && \
88
apt-get install -yqq nginx git unzip \
9-
php7.4-cli php7.4-fpm php7.4-mysql php7.4-mbstring > /dev/null
9+
php8.1-cli php8.1-fpm php8.1-mysql php8.1-mbstring php8.1-xml> /dev/null
1010

1111
COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
1212

13-
COPY deploy/conf/* /etc/php/7.4/fpm/
13+
COPY deploy/conf/* /etc/php/8.1/fpm/
1414

1515
ADD ./ /phalcon
1616
WORKDIR /phalcon
1717

18-
RUN apt-get install -yqq php7.4-psr php7.4-phalcon > /dev/null
18+
RUN apt-get install -y php-pear php8.1-dev > /dev/null
19+
RUN pecl install phalcon-5.0.2 && echo "extension=phalcon.so" > /etc/php/8.1/fpm/conf.d/phalcon.ini
1920

20-
RUN if [ $(nproc) = 2 ]; then sed -i "s|pm.max_children = 1024|pm.max_children = 512|g" /etc/php/7.4/fpm/php-fpm.conf ; fi;
21+
RUN if [ $(nproc) = 2 ]; then sed -i "s|pm.max_children = 1024|pm.max_children = 512|g" /etc/php/8.1/fpm/php-fpm.conf ; fi;
2122

2223
RUN composer install --optimize-autoloader --classmap-authoritative --no-dev --ignore-platform-reqs
2324

2425
RUN chmod -R 777 app
2526

2627
EXPOSE 8080
2728

28-
CMD service php7.4-fpm start && \
29+
CMD service php8.1-fpm start && \
2930
nginx -c /phalcon/deploy/nginx.conf

frameworks/PHP/phalcon/public/index-micro.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
use Phalcon\Mvc\Micro;
66
use Phalcon\Mvc\View;
77
use Phalcon\Mvc\View\Engine\Volt;
8-
use Phalcon\Exception as PhalconException;
98

109
try {
1110
$app = new Micro();
@@ -101,6 +100,6 @@
101100

102101
$url = $_REQUEST['_url'] ?? '/';
103102
$app->handle($url);
104-
} catch (PhalconException $e) {
105-
echo "PhalconException: ", $e->getMessage();
103+
} catch (Exception $e) {
104+
echo "Exception: ", $e->getMessage();
106105
}
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
<?php
2+
3+
use MongoDB\Client;
4+
use Phalcon\Db\Adapter\Pdo\Mysql;
5+
use Phalcon\DI\FactoryDefault;
6+
use Phalcon\Exception as PhalconException;
7+
use Phalcon\Http\Request;
8+
use Phalcon\Incubator\MongoDB\Mvc\Collection\Manager as MongoDBCollectionManager;
9+
use Phalcon\Loader;
10+
use Phalcon\Mvc\Application;
11+
use Phalcon\Mvc\Model\MetaData\Apc;
12+
use Phalcon\Mvc\Model\MetaData\Memory;
13+
use Phalcon\Mvc\View;
14+
use Phalcon\Mvc\View\Engine\Volt;
15+
16+
define('APP_PATH', realpath('..'));
17+
require APP_PATH . "/vendor/autoload.php";
18+
19+
try {
20+
// Load the config
21+
$config = include APP_PATH . "/app/config/config-mongo.php";
22+
23+
// Register an autoloader
24+
$loader = new Loader();
25+
$loader->registerDirs([
26+
$config->application->controllersDir,
27+
$config->application->modelsDir,
28+
$config->application->collectionsDir,
29+
])->register();
30+
31+
// Create a DI
32+
$di = new FactoryDefault();
33+
34+
// Setting up the router
35+
$di->setShared('router', require APP_PATH . '/app/config/routes.php');
36+
37+
//MetaData
38+
$di->setShared('modelsMetadata', function () {
39+
if (function_exists('apc_store')) {
40+
return new Apc();
41+
}
42+
43+
return new Memory([
44+
'metaDataDir' => APP_PATH . "/app/compiled-templates/"
45+
]);
46+
});
47+
48+
// Setting up the view component (seems to be required even when not used)
49+
$di->setShared('view', function () use ($config) {
50+
$view = new View();
51+
$view->setViewsDir($config->application->viewsDir);
52+
$view->registerEngines([
53+
".volt" => function ($view) {
54+
$volt = new Volt($view);
55+
$volt->setOptions([
56+
"path" => APP_PATH . "/app/compiled-templates/",
57+
"extension" => ".compiled",
58+
"separator" => '_',
59+
]);
60+
61+
return $volt;
62+
}
63+
]);
64+
65+
return $view;
66+
});
67+
68+
// Setting up the database connection
69+
$di->setShared('db', function () use ($config) {
70+
$database = $config->database;
71+
72+
return new Mysql([
73+
'host' => $database->host,
74+
'username' => $database->username,
75+
'password' => $database->password,
76+
'dbname' => $database->name,
77+
'options' => [
78+
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
79+
PDO::ATTR_PERSISTENT => true,
80+
],
81+
]);
82+
});
83+
84+
// Setting up the mongodb connection
85+
$di->setShared('mongo', function () use ($config) {
86+
$mongodbConfig = $config->mongodb;
87+
$mongo = new Client($mongodbConfig->url);
88+
89+
return $mongo->selectDatabase($mongodbConfig->db);
90+
});
91+
92+
// Registering the mongoDB CollectionManager service
93+
$di->setShared('collectionsManager', function () {
94+
return new MongoDBCollectionManager();
95+
});
96+
97+
// Handle the request
98+
$request = new Request();
99+
$application = new Application();
100+
$application->setDI($di);
101+
$application->handle($request->getURI())->send();
102+
} catch (PhalconException $e) {
103+
echo "PhalconException: ", $e->getMessage();
104+
}

0 commit comments

Comments
 (0)