PhpSpreadsheet und Schreibrechte


#1
Hallo,

möchte gern eine Excel-datei zur Bearbeitung frei geben.
Hierzu habe ich PhpSpreadsheet gefunden und auch mit composer installiert.
Der Hello World code funktioniert leider nicht, ich vermute das es mit den Schreibrechten zusammenhängt?
Mein bisheriger code:
PHP:
<?php

ini_set('display_errors', 1);
ini_set('display_start_up_errors', 1);
error_reporting(E_ALL);

require_once (libpath . 'vendor/autoload.php');

use phpoffice/phpspreadsheet/Spreadsheet;
use phpoffice/phpspreadsheet/Writer/Xlsx;

$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setValue('A1', 'Hello World !');

$writer = newXlsx($spreadsheet);
$writer->save('hello_world.xlsx');
?>
Sobald ich die Seite aufrufe ist diese leer und es werden keine Fehler angegeben.
Mache ich da was grundlegendes falsch oder liege ich mit der Vermutung vielleicht recht und wie könnte ich das heraus finden?
Ist mein erster Versuch mit php :oops:

Gruß Air
 

Kalito

Erfahrenes Mitglied
#2
hallo dazu stellen sich mir 2 Fragen
  1. In welcher Umgebung entwickelst du? Windows, Linux, Mac? Lokal unter xampp?
  2. Wird überhaupt eine Datei erzeugt? ggfs im Root-Ordner des Projekt geschaut?#
  3. Was bringt folgende Ausgabe:
PHP:
echo var_dump($writer->save('hello_world.xlsx'));
 
Zuletzt bearbeitet:

EuroCent

Erfahrenes Mitglied
#3
Die ersten 2 Fragen wären da sehr Hilfreich.

Ich habe es auch in Verwendung und bei mir gab es da keinerlei Probleme :)

Mein Beispiel:
PHP:
<?php
require_once('./vendor/autoload.php');

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\Style\Color;
use PhpOffice\PhpSpreadsheet\Style\Fill;
use PhpOffice\PhpSpreadsheet\Style\Font;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
use PhpOffice\PhpSpreadsheet\Style\Protection;
use PhpOffice\PhpSpreadsheet\Style\Style;
use PhpOffice\PhpSpreadsheet\IOFactory;

$spreadsheet = new Spreadsheet();

$sheet = $spreadsheet->getActiveSheet()->setTitle('Statistik');
$sheet->setCellValue('B2', 'Personalstatistik');
$sheet->setCellValue('B4', 'Datum:');
$sheet->setCellValue('C4', '00.00.0000');
$sheet->setCellValue('B6', 'Team:');
$sheet->setCellValue('C6', 'Test');
$sheet->setCellValue('B8', 'Mitarbeiter');
$sheet->setCellValue('C8', 'Personalnummer');
$sheet->setCellValue('E8', 'Information');
$sheet->setCellValue('F8', 'Kürzel');

$writer = new Xlsx($spreadsheet);
$sheetName = 'Test_00.00.0000.xlsx';
$writer->save($sheetName);
?>
Versuch mal meines zu testen und dann ggf. vergleich es mit deiner :)
 
#4
Hallo,

vielen dank für eure Hilfe.
Sorry das ich die Umgebung nicht mit angegeben hab.
Zu den Fragen:
1. In welcher Umgebung entwickelst du? Windows, Linux, Mac? Lokal unter xampp?
Ubuntu 16.04, Apache2
2. Wird überhaupt eine Datei erzeugt? ggfs im Root-Ordner des Projekt geschaut?#
Nein es wird keine xlsx Datei erstellt deshalb dachte ich das es mit den Schreibrechten zusammenhängt.
Hab auch andere Test-php tutorials zur Ausgabe und $_POST Verarbeitung gemacht und das läuft.
Was bringt folgende Ausgabe:
PHP:
echo var_dump($writer->save('hello_world.xlsx'));
Leider keine Ausgabe die Seite bleibt trotzdem leer.

Hab auch den Code von EuroCent probiert, funktioniert auch nicht die Seite bleibt leer:confused:

Gruß Air
 

EuroCent

Erfahrenes Mitglied
#5
Dann ist dein Server nicht richtig konfiguriert :)
Das solltest Du einmal nachholen.

Aber um sicher zu gehen versuche mal Xampp oder Mamp über Linux ob es da funktioniert.
 
#6
:( Warum sollte der Server falsch eingerichtet sein?
Bisher funktioniert alles und es funktioniert immer noch. Auch die Verknüpfung mit MySQL.

Jedoch funktioniert PHPSpreadsheet nicht. Wie kann ich das jetzt am besten angehen?
Welcher user versucht den die xlsx Datei zu erzeugen wenn ich PHPSpreadsheet nutze?

Gruß Air
 

Kalito

Erfahrenes Mitglied
#7
naja, so falsch gedacht ist das von @EuroCent nicht. Wenn var_dump nichts ausgibt dann stimmt was nicht. Läuft überhaupt PHP? kommt was wenn du eine php-Datei mit
PHP:
phpinfo();
ausführst?

Hast du mal in die Logs geschaut? Was sagt den var/log/apache2/error.log?
 
#8
Hallo versteht das nicht falsch bin froh das ihr mir hilft.
Aber der Server funktioniert da andere php beispiel scripte funktionieren.
Ich mache bestimmt einen absoluten anfängerfehler jedoch weiß ich noch nicht welchen :oops:
Ich hab mal is_writable ausprobiert und eine test.xlsx Datei erstellt und es kommt false.
Das heißt php kann nicht auf die Datei zugreifen.

Hab auch in die error.log geschaut beim script von EuroCent kommt die Fehlermeldung:
PHP Fatal error: Uncaught PhpOffice\\PhpSpreadsheet\\Writer\\Exception: Could not close zip file Test_00.00.0000.xlsx. in ...Ordner...
Das ist glaub ich von Windows die Pfad angabe oder musst das bei PhpSpreadsheet so sein?

Gruß Air
 
Zuletzt bearbeitet:
#9
Hab die Pfadangabe angepasst jedoch scheint ein / irgendwo unexpected zu sein.
Nur wo bin auf der Suche, vielleicht sieht es ja jemand.
PHP:
<?php
require_once('vendor/autoload.php');
use PhpOffice/PhpSpreadsheet/Spreadsheet;
use PhpOffice/PhpSpreadsheet/Writer/Xlsx;
use PhpOffice/PhpSpreadsheet/Style/Alignment;
use PhpOffice/PhpSpreadsheet/Style/Border;
use PhpOffice/PhpSpreadsheet/Style/Color;
use PhpOffice/PhpSpreadsheet/Style/Fill;
use PhpOffice/PhpSpreadsheet/Style/Font;
use PhpOffice/PhpSpreadsheet/Style/NumberFormat;
use PhpOffice/PhpSpreadsheet/Style/Protection;
use PhpOffice/PhpSpreadsheet/Style/Style;
use PhpOffice/PhpSpreadsheet/IOFactory;
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet()->setTitle('Statistik');
$sheet->setCellValue('B2', 'Personalstatistik');
$sheet->setCellValue('B4', 'Datum:');
$sheet->setCellValue('C4', '00.00.0000');
$sheet->setCellValue('B6', 'Team:');
$sheet->setCellValue('C6', 'Test');
$sheet->setCellValue('B8', 'Mitarbeiter');
$sheet->setCellValue('C8', 'Personalnummer');
$sheet->setCellValue('E8', 'Information');
$sheet->setCellValue('F8', 'Kürzel');
$writer = new Xlsx($spreadsheet);
$sheetName = 'Test_00.00.0000.xlsx';
$writer->save($sheetName);
?>
 

Kalito

Erfahrenes Mitglied
#10
Naja, das deutet auf fehlende Schreibrechte. Hat der WWW-Nutzer Schreibrechte auf den Ordner, wo die Datei hingeschrieben werden soll. Aktuell will er es in den Ordner packen, wo sich das Script befindet.
 
#11
Hi,

habe jetzt mal den Ordner für alle freigegeben damit mal die Rechte nicht im weg sind und es kommt keine Fehler mehr in der error.log und die "Test_00.00.0000.xlsx" Datei wurde erstellt vom www-Nutzer.
Jedoch bleibt die Seite im Browser leer, das heißt wohl PHPSpreadsheet nicht funktioniert?

Gruß Air

Ups das war wohl ein heftiger Gedankenfehler, PHPSpreadsheet nutze ich ja zur Bearbeitung der Datei und nicht zur Anzeige :oops:
Ok, also da müsste ich das mit den Rechten in Ordnung bringen und ein php script erstellen, welches die Excel Datei in eine html tabelle ausgibt?
Zu den Rechten kann ich anstatt dem www-Nutzer auch spezifische Nutzer definieren? Habe hierzu eine Datenbank mit Nutzern die sich Registrieren müssen, bevor sie zugriff bekommen (auch ein php script, welches nach Änderung der Datenbank die User durchgeht und in die Gruppe aufnimmt?)
Würde gern noch von Euch hören ob diese Ansätze richtig sind oder ob ich da immer noch auf dem Holzweg bin?
Ansonsten ist ja das Thema ja erledigt und vielen Dank Euch für die Hilfe.

Gruß Air
 
Zuletzt bearbeitet: