PHP Profiler SPX – A Another Simple Profiling Tool
SPX is a PHP Extension for Profiling, also open source, very simple, multimetric capable and with out-of-box web UI for listing, sorting and report details.
For installation, we need to build our extension. We can of course put the building phases directly into our Dockerfile, but I want to know, what things (extension file, webUI Files and configuration changes) need to come through the extension. For this reason, I make a seperate build process in my Dockerfile and copy everything this extension needs.
I follow the steps from official documentation (Timestamp: 20.05.2022), please check, if new or old steps were published, after this blog article)
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
FROM ubuntu:20.04 as spx_builder
# We declare, that we need using zero interaction while installation or upgrading system via apt.
ARGDEBIAN_FRONTEND="noninteractive"
# Default Timezone declartion, if your system in another timezone placed, update this
ENVTZ="Europe/Berlin"
# Install the php-dev, git and extension requirements for the extension building steps
FROM ubuntu:20.04 as spx_builder
# We declare, that we need using zero interaction while installation or upgrading system via apt.
ARG DEBIAN_FRONTEND="noninteractive"
# Default Timezone declartion, if your system in another timezone placed, update this
ENV TZ="Europe/Berlin"
# Install the php-dev, git and extension requirements for the extension building steps
RUN apt-get -y update && apt-get install -y git zlib1g-dev software-properties-common
RUN add-apt-repository ppa:ondrej/php
RUN apt-get update && apt-get install -y php8.0-dev
# Create tmp directory for git cloning and build
RUN mkdir /tmp/php-spx
WORKDIR /tmp
RUN git clone https://github.com/NoiseByNorthwest/php-spx.git /tmp/php-spx
RUN cd php-spx && git checkout release/latest && phpize && ./configure && make && make install
# Main PHP image with Apache
FROM php:8.0-apache
# Copy builded extension and webui files in to php image
COPY --from=spx_builder /tmp/php-spx/assets /usr/local/share/misc/php-spx/assets
COPY --from=spx_builder /tmp/php-spx/modules/spx.so /usr/local/lib/php/extensions/no-debug-non-zts-20190902
# Create ini file for extension
RUN echo 'extension=spx' > /usr/local/etc/php/conf.d/docker-php-ext-spx.ini
# Config for extension
RUN echo 'spx.http_enabled=1 \n\
spx.http_ui_assets_dir="/usr/local/share/misc/php-spx/assets/web-ui" \n\
spx.http_key="dev" \n\
spx.http_ip_whitelist="*" \n\
spx.http_trusted_proxies="*"' >> /usr/local/etc/php/php.ini
FROM ubuntu:20.04 as spx_builder
# We declare, that we need using zero interaction while installation or upgrading system via apt.
ARG DEBIAN_FRONTEND="noninteractive"
# Default Timezone declartion, if your system in another timezone placed, update this
ENV TZ="Europe/Berlin"
# Install the php-dev, git and extension requirements for the extension building steps
RUN apt-get -y update && apt-get install -y git zlib1g-dev software-properties-common
RUN add-apt-repository ppa:ondrej/php
RUN apt-get update && apt-get install -y php8.0-dev
# Create tmp directory for git cloning and build
RUN mkdir /tmp/php-spx
WORKDIR /tmp
RUN git clone https://github.com/NoiseByNorthwest/php-spx.git /tmp/php-spx
RUN cd php-spx && git checkout release/latest && phpize && ./configure && make && make install
# Main PHP image with Apache
FROM php:8.0-apache
# Copy builded extension and webui files in to php image
COPY --from=spx_builder /tmp/php-spx/assets /usr/local/share/misc/php-spx/assets
COPY --from=spx_builder /tmp/php-spx/modules/spx.so /usr/local/lib/php/extensions/no-debug-non-zts-20190902
# Create ini file for extension
RUN echo 'extension=spx' > /usr/local/etc/php/conf.d/docker-php-ext-spx.ini
# Config for extension
RUN echo 'spx.http_enabled=1 \n\
spx.http_ui_assets_dir="/usr/local/share/misc/php-spx/assets/web-ui" \n\
spx.http_key="dev" \n\
spx.http_ip_whitelist="*" \n\
spx.http_trusted_proxies="*"' >> /usr/local/etc/php/php.ini
For testing, we can use the docker-compose for simple exection..
and browse the localhost:3333, here is my result. Directly we can check the Enabled checkbox, it means, all incoming request will be analyzed and listed under control panel settings.
after enabling, I visit the index page via a new tab without any get parameters or anything.
After that, I refresh the control page, and i see the link the profiling detail from my request in index.php (3)