godlie
Goto Top

Simpler XLSX Parser in PHP + Docker + Webserver Ausgabe als einfaches HTML

Hallo,
hier mal eine kleine Anleitung für einen einfachen XLSX Parser, der aus der XLSX eine einfache HTML Seite macht.

Es wird hier von einer lokalen Datei ausgegangen, die Erste Reihe wird automatisch als TableHeader gesetzt.

Dateistruktur:
/
- docker
--docker.compose.yml
--Dockerfile
-src
--composer.json
--index.php
--example.xlsx

docker-compose.yml
version: '3.8'  

services:
  xlsxparse:
    build:
      context: ./
      dockerfile: ./Dockerfile
    container_name: xlsxparse
    working_dir: /app
    volumes:
      - ../src/:/app
    command: sh -c "php -S 0.0.0.0:80 -t /app"  
    ports:
      - 8066:80
    depends_on:
      - composer

  composer:
    image: composer:latest
    container_name: composer-installer
    working_dir: /app
    volumes:
      - ../src/:/app
    command: ["composer", "install", "--ignore-platform-req=ext-gd"]  

Dockerfile
FROM php:8.2-cli

RUN apt-get update
RUN apt-get update && apt-get install -y zlib1g-dev libzip-dev
RUN docker-php-ext-install zip

composer.josn
{
    "name": "pr/xlsxparser",  
    "require": {  
        "aspera/xlsx-reader": "^1.1"  
    },
    "autoload": {  
        "psr-4": {  
            "Pr\\Xlsxparser\\": "src/"  
        }
    }
}

index.php
<!DOCTYPE html>
<html lang="de">  
<head>
    <meta charset="utf-8">  
    <title>SimpleXLSXParser</title>
</head>
<body>
<?php

require 'vendor/autoload.php';   

use Aspera\Spreadsheet\XLSX\Reader;
try {
    $reader = new Reader();
    $reader->open('exa-mple.xlsx');  
    $i = 0;
    echo '<table><thead><tr>';  
    foreach ($reader as $row) {
        renderSingleRow($row, $i == 0);
        if($i == 0){
            echo '</tr></thead><tbody><tr>';  
        } else {
            echo '</tr><tr>';  
        }
        $i++;
    }
    echo '</tbody></table>';  

    function renderSingleRow($row, $tableHeader=false) {
        foreach($row as $data){
            if($tableHeader){
                echo '<th>'.$data.'</th>';  
            } else {
                echo '<td>'.$data.'</td>';  
            }
        }
    }

    $reader->close();
} catch( Exception $ex ) {
    echo '<pre>'.print_r($ex, true).'<pre>';  
}

?>
</body>
</html>

grüße

Content-ID: 671311

Url: https://administrator.de/tutorial/simpler-xlsx-parser-in-php-docker-webserver-ausgabe-als-einfaches-html-671311.html

Ausgedruckt am: 12.02.2025 um 13:02 Uhr

Evolutio
Evolutio 12.02.2025 um 13:57:06 Uhr
Goto Top
Hallo,

ein paar Korrekturen/Verbesserungen:
- working_dir: /app -> pack das mit WORKDIR /app in die Dockerfile
- command: sh -c "php -S 0.0.0.0:80 -t /app" -> pack das mit CMD ["php", "-S", "0.0.0.0:80", "-t", "/app"] an das Ende deiner Dockerfile
- reduziere die Layer deiner Dockerfile:
FROM php:8.2-cli

RUN apt-get update \
 && apt-get install -y zlib1g-dev libzip-dev \
 && docker-php-ext-install zip
- pack die renderSingleRow aus dem try-catch raus