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.
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
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..

docker-compose.yaml

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
version: '2'
services:
php-apache-environment:
container_name: php-apache
build:
context: .
dockerfile: ./Dockerfile
volumes:
- ./src:/var/www/html/
ports:
- "3333:80"
version: '2' services: php-apache-environment: container_name: php-apache build: context: . dockerfile: ./Dockerfile volumes: - ./src:/var/www/html/ ports: - "3333:80"
version: '2'
services:
  php-apache-environment:
    container_name: php-apache
    build:
      context: .
      dockerfile: ./Dockerfile
    volumes:
      - ./src:/var/www/html/
    ports:
      - "3333:80"
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
docker-compose up -d
docker-compose up -d
docker-compose up -d

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)

And… Here is the profiling detail page

Views: 212