PHP and Xvfb usage

Xvfb (X Virtual Frame Buffer) creates a virtual display in memory without requiring physical display hardware. This allows running graphical applications in a headless environment. When combined with PHP, Xvfb enables serverside execution of GUI applications through PHP scripts.

Why Use Xvfb with PHP?

PHP typically handles serverside logic without direct graphics support. However, certain scenarios require running graphical applications on servers

  • Automated testing of GUI applications

  • Browser automation for web scraping

  • Image/video processing with graphical tools

  • Running desktop applications headlessly

Installation

Ubuntu/Debian:

sudo apt-get update
sudo apt-get install xvfb

CentOS/RHEL:

sudo yum install xorg-x11-server-Xvfb

Basic Usage with PHP

Starting Xvfb Server

Use PHP's shell_exec() to start a virtual display ?

<?php
    $display = ':99';
    $resolution = '1024x768x24';
    
    // Start Xvfb server in background
    $command = "Xvfb $display -screen 0 $resolution > /dev/null 2>&1 &";
    shell_exec($command);
    
    // Wait for server to start
    sleep(2);
    
    echo "Xvfb started on display $display
"; ?>

Running Applications with Virtual Display

Execute graphical applications using the virtual display ?

<?php
    $display = ':99';
    
    // Set DISPLAY environment variable and run application
    $command = "DISPLAY=$display firefox --screenshot=example.png https://example.com";
    $output = shell_exec($command);
    
    echo "Screenshot taken successfully
"; ?>

Complete Example: Web Scraping with Selenium

Here's a practical example using Xvfb with Selenium for headless browser automation ?

<?php
    class XvfbManager {
        private $display;
        private $resolution;
        
        public function __construct($display = ':99', $resolution = '1280x720x24') {
            $this->display = $display;
            $this->resolution = $resolution;
        }
        
        public function start() {
            $command = "Xvfb {$this->display} -screen 0 {$this->resolution} > /dev/null 2>&1 &";
            shell_exec($command);
            sleep(2); // Wait for startup
            putenv("DISPLAY={$this->display}");
            return true;
        }
        
        public function stop() {
            $command = "pkill -f 'Xvfb {$this->display}'";
            shell_exec($command);
            return true;
        }
        
        public function executeCommand($cmd) {
            $fullCommand = "DISPLAY={$this->display} $cmd";
            return shell_exec($fullCommand);
        }
    }
    
    // Usage
    $xvfb = new XvfbManager(':100');
    $xvfb->start();
    
    // Run Firefox headlessly
    $result = $xvfb->executeCommand('firefox --screenshot=page.png https://tutorialspoint.com');
    
    $xvfb->stop();
    echo "Browser automation completed
"; ?>

Common Use Cases

Use Case Application Command Example
Web Screenshots Firefox/Chrome firefox --screenshot=file.png URL
Image Processing GIMP gimp -i -b script.scm
PDF Generation LibreOffice libreoffice --headless --convert-to pdf

Error Handling

Always implement proper error handling when using Xvfb ?

<?php
    function checkXvfbStatus($display) {
        $check = shell_exec("pgrep -f 'Xvfb $display'");
        return !empty(trim($check));
    }
    
    function startXvfbSafely($display = ':99') {
        if (checkXvfbStatus($display)) {
            echo "Xvfb already running on $display
"; return true; } $command = "Xvfb $display -screen 0 1024x768x24 > /dev/null 2>&1 &"; shell_exec($command); sleep(2); if (checkXvfbStatus($display)) { echo "Xvfb started successfully on $display
"; return true; } else { echo "Failed to start Xvfb on $display
"; return false; } } // Usage with error handling if (startXvfbSafely(':99')) { // Proceed with graphical operations echo "Ready for graphical operations
"; } else { echo "Cannot proceed without Xvfb
"; } ?>

Key Benefits

  • Headless automation Run GUI applications without physical displays

  • Resource efficiency Virtual displays consume minimal memory

  • Automated testing Test graphical applications programmatically

  • Server deployment Run desktop apps on headless servers

Conclusion

Xvfb enables PHP applications to control graphical programs in headless environments. This combination is powerful for automated testing, web scraping, and serverside GUI operations. Always implement proper error handling and cleanup when managing virtual displays.

Updated on: 2026-03-15T10:19:11+05:30

1K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements