This comprehensive guide provides detailed instructions for setting up the AI MultiBarcode Capture system using XAMPP instead of Docker. This method is ideal for environments where Docker cannot be used due to administrative restrictions or organizational policies.
XAMPP offers several advantages in restricted environments:
- ✅ No Admin Rights Required - Can run in portable mode without system installation
- ✅ No Docker Desktop - Works without virtualization or containers
- ✅ Lightweight - Uses less system resources than Docker
- ✅ Direct Access - Easy access to Apache, MySQL, and PHP configurations
- ✅ Windows Native - Runs natively on Windows without WSL2
-
XAMPP (v8.0 or higher)
- Download from: https://www.apachefriends.org/
- Portable version recommended for no-admin environments
- Includes: Apache 2.4.x, MySQL 8.x, PHP 8.x
-
Git (for cloning repository)
- Download from: https://git-scm.com/
- Portable version available
-
Android Studio (for building the Android app)
- Download from: https://developer.android.com/studio
- Required to build the barcode scanner APK
-
Android Device with:
- Camera support
- USB debugging enabled
- Android 11 (API 30) or higher
- OS: Windows 10/11 (64-bit)
- RAM: 4GB minimum, 8GB recommended
- Storage: 2GB free space for XAMPP + 1GB for project
- Ports: 3500 (HTTP), 3543 (HTTPS) must be available
- Network: Local network connectivity for Android device
# Check if ports are available (should return nothing)
netstat -an | findstr "3500"
netstat -an | findstr "3543"
# Verify Git installation
git --versionThis is the fastest and easiest way to get started. No manual configuration needed!
git clone https://github.com/your-repo/AI_MultiBarcode_Capture.git
cd AI_MultiBarcode_CaptureNavigate to the XAMPP_Full_Install folder and run the automated installation script:
For C: drive (recommended):
cd XAMPP_Full_Install
install_Xampp_to_C.batFor D: drive (if C: drive has limited space):
cd XAMPP_Full_Install
install_Xampp_to_D.batThe script will automatically:
- Join split archives if needed
- Extract XAMPP to
C:\xampporD:\xampp - Configure paths
- Verify installation
cd AI_MultiBarcode_Capture\WebInterface
xampp_start_server.batThat's it! The server will:
- Update all website files automatically
- Start Apache and MySQL
- Configure the database
- Update network IP for QR codes
- Display access URLs
Access the web interface at: https://localhost:3543 or http://localhost:3500
The WebInterface folder contains several batch scripts for managing your XAMPP installation:
Purpose: Starts the XAMPP server with automatic file updates
Usage:
cd WebInterface
xampp_start_server.batWhat it does:
- Automatically calls
xampp_update_server.bat - Detects XAMPP at
C:\xampporD:\xampp - Backs up existing htdocs folder
- Copies latest website files from
src/to XAMPP htdocs - Applies XAMPP-specific path fixes
- Copies SSL certificates
- Creates Apache HTTP configuration (port 3500)
- Creates Apache HTTPS/SSL configuration (port 3543)
- Updates
httpd.confwith custom configurations - Changes Apache port from 80 to 3500
- Enables required modules (mod_rewrite, mod_ssl, mod_headers, mod_expires)
- Updates PHP database configuration
- Fixes configuration paths for D: drive (if needed)
- Starts MySQL server
- Creates
barcode_wmsdatabase - Creates database user
wms_userwith passwordwms_password - Grants all privileges
- Imports database schema (3 tables, 2 views)
- Verifies database installation
- Starts Apache web server
- Verifies all services running
- Calls
xampp_update_network_IP.bat - Detects local network IP (192.168.x.x or 10.x.x.x)
- Detects external/public IP
- Creates
config/ip-config.jsonwith current IPs - Enables QR code generation in web interface
- Displays all access URLs
When to use: Every time you want to start the server or after pulling new code changes
Purpose: Cleanly stops Apache and MySQL services
Usage:
cd WebInterface
xampp_stop_server.batWhat it does:
- Stops Apache web server gracefully
- Stops MySQL database server
- Closes all XAMPP-related processes
- Displays confirmation messages
When to use:
- Before system shutdown/restart
- When updating XAMPP itself
- When switching between Docker and XAMPP
- To free up ports 3500/3543
Purpose: Updates website files without restarting services
Usage:
cd WebInterface
xampp_update_server.batWhat it does:
- Detects XAMPP installation (C:\xampp or D:\xampp)
- Backs up existing htdocs folder
- Copies latest files from
src/to XAMPP htdocs - Applies XAMPP-specific path fixes (server-info.php)
- Updates Apache configurations
- Updates SSL certificates
- Updates PHP database configuration
- Does NOT restart services
When to use:
- Updating PHP/HTML/CSS/JavaScript files only
- Testing new code changes
- When you want minimal downtime
- After pulling code updates
Note: PHP file changes take effect immediately. Apache config changes require server restart.
Purpose: Updates IP addresses when changing networks (WiFi, mobile hotspot, etc.)
Usage:
cd WebInterface
xampp_update_network_IP.batWhat it does:
- Detects XAMPP installation (C:\xampp or D:\xampp)
- Detects current local network IP (192.168.x.x, 10.x.x.x)
- Attempts to detect external/public IP via PowerShell
- Creates/updates
config/ip-config.jsonwith:{ "local_ip": "192.168.1.188", "external_ip": "109.221.226.173", "last_updated": "2025-11-20T16:34:13Z", "detection_method": "xampp_batch_update" } - Updates web interface endpoint configuration
- Refreshes QR codes with new IPs
- No service restart needed - changes take effect immediately
When to use:
- After connecting to a different WiFi network
- When switching from WiFi to mobile hotspot
- When Android app can't connect (wrong IP)
- After moving to a new location/network
Expected Output:
[OK] Local IP detected: 192.168.1.188
[OK] External IP detected: 109.221.226.173
[OK] IP configuration updated successfully
# Start working
cd WebInterface
xampp_start_server.bat
# ... do your development work ...
# Stop when done
xampp_stop_server.bat# Pull latest changes
git pull origin main
# Stop services
cd WebInterface
xampp_stop_server.bat
# Restart with automatic update
xampp_start_server.bat# Just update IPs (no restart needed)
cd WebInterface
xampp_update_network_IP.bat
# Open web interface and use QR code to update Android app
# http://localhost:3500 → Settings → Endpoint Configuration → QR Code# Update files while services running
cd WebInterface
xampp_update_server.bat
# PHP changes work immediately
# For Apache config changes, restart:
xampp_stop_server.bat
xampp_start_server.batAfter running install_Xampp_to_C.bat or install_Xampp_to_D.bat, your XAMPP installation will have this structure:
C:\xampp\ OR D:\xampp\
├── apache\ ├── apache\
│ ├── bin\ │ ├── bin\
│ │ ├── httpd.exe │ │ ├── httpd.exe
│ │ └── ... │ │ └── ...
│ ├── conf\ │ ├── conf\
│ │ ├── httpd.conf │ │ ├── httpd.conf
│ │ ├── extra\ │ │ ├── extra\
│ │ │ ├── httpd-multibarcode.conf │ │ ├── httpd-multibarcode.conf
│ │ │ └── httpd-multibarcode-ssl.conf│ │ └── httpd-multibarcode-ssl.conf
│ │ └── ssl\ │ │ └── ssl\
│ │ ├── server.crt │ │ ├── server.crt
│ │ ├── server.key │ │ ├── server.key
│ │ └── ca.crt │ │ └── ca.crt
│ ├── logs\ │ ├── logs\
│ │ ├── error.log │ │ ├── error.log
│ │ ├── access.log │ │ ├── access.log
│ │ ├── multibarcode_error.log │ │ ├── multibarcode_error.log
│ │ └── multibarcode_access.log │ │ └── multibarcode_access.log
│ └── modules\ │ └── modules\
├── mysql\ ├── mysql\
│ ├── bin\ │ ├── bin\
│ │ ├── mysql.exe │ │ ├── mysql.exe
│ │ ├── mysqld.exe │ │ ├── mysqld.exe
│ │ ├── mysqldump.exe │ │ ├── mysqldump.exe
│ │ └── ... │ │ └── ...
│ ├── data\ │ ├── data\
│ │ └── barcode_wms\ │ │ └── barcode_wms\
│ └── ... │ └── ...
├── php\ ├── php\
│ ├── php.exe │ ├── php.exe
│ ├── php.ini │ ├── php.ini
│ └── ... │ └── ...
├── phpMyAdmin\ ├── phpMyAdmin\
├── htdocs\ ├── htdocs\
│ ├── api\ │ ├── api\
│ │ ├── barcodes.php │ │ ├── barcodes.php
│ │ ├── server-info.php │ │ ├── server-info.php
│ │ └── ... │ │ └── ...
│ ├── config\ │ ├── config\
│ │ ├── database.php │ │ ├── database.php
│ │ └── ip-config.json │ │ └── ip-config.json
│ ├── index.html │ ├── index.html
│ └── ... │ └── ...
├── xampp-control.exe ├── xampp-control.exe
└── setup_xampp.bat └── setup_xampp.bat
apache/conf/httpd.conf- Main Apache configuration (port 3500, modules)apache/conf/extra/httpd-multibarcode.conf- HTTP virtual host configurationapache/conf/extra/httpd-multibarcode-ssl.conf- HTTPS virtual host configurationapache/conf/ssl/- SSL certificates for HTTPShtdocs/config/database.php- Database connection settingshtdocs/config/ip-config.json- Network IP configuration for QR codesmysql/bin/my.ini- MySQL configuration
# Check if Apache is running
tasklist /FI "IMAGENAME eq httpd.exe"
# Check if MySQL is running
tasklist /FI "IMAGENAME eq mysqld.exe"- Open browser and go to http://localhost:3500 or https://localhost:3543
- Check dashboard - should display "AI MultiBarcode Capture WMS"
- Click Settings (⚙️) in top-right corner
- Click "Endpoint Configuration" - should show your local network IP
- Click "QR Code" button - should display QR code with endpoint URL
- Open phpMyAdmin at http://localhost:3500/phpmyadmin or https://localhost:3543/phpmyadmin
- Login with username:
root(no password) - Check database
barcode_wmsexists in sidebar - Verify tables:
symbologiescapture_sessionsbarcodes
- Verify views:
session_statisticsbarcode_details
Use the QR code from the web interface:
- Open AI MultiBarcode Capture app on Android device
- Go to Settings
- Tap "Scan QR Code"
- Scan the QR code displayed in web interface
- Endpoint is automatically configured!
Alternatively, manually enter:
- HTTP Endpoint:
http://YOUR_IP:3500/api/barcodes.php - HTTPS Endpoint:
https://YOUR_IP:3543/api/barcodes.php
- Scan some barcodes with Android app
- Tap upload button in app
- Check web interface at http://localhost:3500 or https://localhost:3543
- Session should appear within 1 second
- Click session to view captured barcodes
Cause: XAMPP not installed or installed in different location
Solution:
- Check if XAMPP exists:
dir C:\xampp\apache\bin\httpd.exe dir D:\xampp\apache\bin\httpd.exe
- If not found, run
install_Xampp_to_C.batorinstall_Xampp_to_D.bat - If installed elsewhere, scripts only support C: or D: drive
Cause: Another application is using port 3500
Solution:
- Find what's using the port:
netstat -ano | findstr :3500
- Note the PID (last column)
- Check which process:
tasklist /FI "PID eq YOUR_PID"
- Stop that process or choose different port
Cause: Configuration error or port conflict
Solution:
-
Check Apache error log:
type C:\xampp\apache\logs\error.log -
Common issues:
- Port 80 or 443 already in use (IIS, Skype)
- Syntax error in httpd.conf
- Missing SSL certificates for HTTPS
-
Test configuration:
C:\xampp\apache\bin\httpd.exe -t
Cause: Port 3306 in use or data corruption
Solution:
- Check MySQL error log:
type C:\xampp\mysql\data\*.err - Check if port 3306 is available:
netstat -ano | findstr :3306
- Stop any conflicting MySQL instances
Cause: Incorrect credentials or MySQL not running
Solution:
- Verify MySQL is running:
tasklist /FI "IMAGENAME eq mysqld.exe"
- Test database connection:
C:\xampp\mysql\bin\mysql.exe -u wms_user -pwms_password barcode_wms -e "SELECT 1;" - If fails, recreate user:
C:\xampp\mysql\bin\mysql.exe -u root -e "DROP USER IF EXISTS 'wms_user'@'localhost';" C:\xampp\mysql\bin\mysql.exe -u root -e "CREATE USER 'wms_user'@'localhost' IDENTIFIED BY 'wms_password';" C:\xampp\mysql\bin\mysql.exe -u root -e "GRANT ALL PRIVILEGES ON barcode_wms.* TO 'wms_user'@'localhost';" C:\xampp\mysql\bin\mysql.exe -u root -e "FLUSH PRIVILEGES;"
Cause: Network IP not updated
Solution:
cd WebInterface
xampp_update_network_IP.batRefresh web interface (Ctrl+F5)
Cause: Wrong IP, firewall, or network issue
Solution:
- Verify both devices on same WiFi network
- Check Windows Firewall:
- Allow port 3500 for Apache
- Allow port 3543 for HTTPS
- Test from Android browser first:
- Open
http://YOUR_IP:3500in Chrome - Should show web interface
- Open
- Use QR code to configure app endpoint
- Check Android app logs for errors
When pulling new code from Git:
# Pull latest changes
cd D:\Dev\LTGithub\AI_MultiBarcode_Capture
git pull origin main
# Stop XAMPP services (if running)
cd WebInterface
xampp_stop_server.bat
# Restart with automatic update
xampp_start_server.batThe xampp_start_server.bat script automatically:
- Calls
xampp_update_server.batto update all files from src/ - Backs up existing htdocs
- Copies new website files
- Applies XAMPP-specific configurations
- Updates Apache and PHP configurations
- Preserves vendor directory (if using Composer)
- Restarts services with updated files
If you want to update website files without restarting the entire XAMPP stack:
cd WebInterface
xampp_update_server.batWhat This Script Does:
- ✅ Detects XAMPP installation (C:\xampp or D:\xampp)
- ✅ Backs up existing htdocs folder
- ✅ Copies latest files from
src/to XAMPP htdocs - ✅ Applies XAMPP-specific path fixes
- ✅ Updates Apache configurations
- ✅ Updates SSL certificates
- ✅ Updates PHP database configuration
- ✅ Does NOT restart services - changes take effect immediately for PHP files
When to Use:
- Updating website files only (PHP, HTML, CSS, JavaScript)
- Quick updates without service interruption
- Testing new code changes
Note: Apache configuration changes still require an Apache restart to take effect. For those changes, use xampp_start_server.bat instead.
If database schema changes:
# Backup current database
C:\xampp\mysql\bin\mysqldump.exe -u root barcode_wms > backup.sql
# Import updated schema
C:\xampp\mysql\bin\mysql.exe -u root barcode_wms < database\init.sql- Managing IP Changes - Detailed guide for network changes
- Android App Configuration - Configure the mobile app
- API Documentation - API endpoints and usage
- Troubleshooting Guide - Comprehensive troubleshooting
- Generating HTTPS Certificates - SSL certificate setup
- Understanding Certificates - Certificate basics
You now have a fully functional AI MultiBarcode Capture system running on XAMPP!
Next Steps:
- Configure your Android app using the QR code
- Scan some barcodes
- View sessions in the web interface
- Explore the API documentation
- Customize for your needs
Need Help?
- Check the Troubleshooting Guide
- Review the API Documentation
- Check the GitHub issues page