Dies ist eine statische Kopie unseres alten Forums. Es sind keine Interaktionen möglich.
This is a static copy of our old forum. Interactions are not possible.

Coolyo

Junior Schreiberling

  • "Coolyo" is male
  • "Coolyo" started this thread

Posts: 196

Date of registration: Oct 1st 2007

Location: Hannover

1

Wednesday, March 5th 2008, 2:08am

PHPMailer und Generierte Attachments

Hi,

hab nen DRINGENDES Problem:
Ich muss mit PHP ne Excel-Datei generieren und die dann per Mail verschicken.
Da es mit PHPMailer prinzipiell am einfachsten ist, hab ich dort die Funktion ->AddAttachment('datei', 'wunschname'); (sollte jeder der damit Arbeitet wohl kennen) benutzt um die datei anzuhängen. Da die Excel-Datei aber erst generiert werden muss isses logischerweise keine xls-Datei, sondern ein PHP-Script... PHPMailer (genau wie jede andere methode ein Attachmend zu verschicken die ich gefunden habe) liest jetzt das PHP-Script aus und hängt es hinten dran... leider nicht die Ausgabe des PHP-Scripts, sondern den inhalt des Scripts :-X

Zum Script:
Ich benutze den Spreadsheet_Excel_Writer ... der würde halt, wenn man das Script normal aufrufen würde, erst die Header einer Excel-File und dann den Inhalt senden, damit der Browser es als solche identifiziert.

Wie kann ichs jetzt hinbekommen, dass er erst das Spreadsheet erzeugt und dan an die Mail hängt? Mir würd auch ne möglichkeit reichen, um die Excel-Datei auf den Server zu schreiben...dann erledigt sich der Rest ja von alleine... aber es ist Dringend, also wäre ich für Hilfe SEHR dankbar!

ciao, Julian

This post has been edited 1 times, last edit by "Coolyo" (Mar 5th 2008, 2:09am)


Bastian

Dies, das, einfach so verschiedene Dinge

Posts: 988

Date of registration: Sep 30th 2007

2

Wednesday, March 5th 2008, 6:32am

Vielleicht etwas in dieser Richtung:

Source code

1
2
3
4
5
6
7
$excel_script = "http://server/excel.php";
$max_length = 10000000;

$handle = fopen ($excel_script, "r");
$excel_contents = fread ($handle, $max_length);

fclose ($handle);

Wobei $max_length so abgeschätzt werden sollte, dass die Dateien immer kleiner sind.

CrissCross

Erfahrener Schreiberling

  • "CrissCross" is male

Posts: 282

Date of registration: Feb 15th 2005

3

Wednesday, March 5th 2008, 7:44am

Quoted

der würde halt, wenn man das Script normal aufrufen würde, erst die Header einer Excel-File und dann den Inhalt senden, damit der Browser es als solche identifiziert.
und genau da vermute ich das Problem. Ich vermute, dass wenn man die PHP-Datei, die das Exel-Sheet generiert von ner anderen PHP-Datei aus aufruft, der PHP-Parser nicht aktiviert wird und somit halt der Source-Code zurückgegeben wird.

Ich würde das Excel-Sheet als reguläre (temporäre) Datei speichern und die dann als Mail-Attachement benutzen. So, wie das in der introduction von Spreadsheet steht:

Source code

1
2
3
$workbook = new Spreadsheet_Excel_Writer('test.xls');
...
$workbook->close();
"Technology is easy - people are hard."

(John Gage - Sun Microsystems zum Thema warum IT-Projekte scheitern)

Bastian

Dies, das, einfach so verschiedene Dinge

Posts: 988

Date of registration: Sep 30th 2007

4

Wednesday, March 5th 2008, 8:04am

So, wie das in der introduction von Spreadsheet steht:

Ja, das Lesen der Dokumentation ist meist eine gute Idee.

  • "Schokoholic" is male

Posts: 2,518

Date of registration: Oct 4th 2006

Location: Hannover

Occupation: Haarspaltung

5

Wednesday, March 5th 2008, 9:00am

Ansonsten kannst du es wahrscheinlich auch mit einem Umweg weniger machen als Bastian vorschlägt, sofern PHPMailer auch fopen benutzt und allow_url_fopen aktiviert ist.
Dann sollte nämlich auch ->AddAttachment('datei', 'http://deine.domain/excel-script.php'); funktionieren. Wenn man per HTTP darauf zugreifen kann.

Die Lösung von CrissCross ist aber warhscheinlich die bessere.

Coolyo

Junior Schreiberling

  • "Coolyo" is male
  • "Coolyo" started this thread

Posts: 196

Date of registration: Oct 1st 2007

Location: Hannover

6

Wednesday, March 5th 2008, 1:48pm

Ja, das Lesen der Dokumentation ist meist eine gute Idee.
Sehr witzig...
$workbook = new Spreadsheet_Excel_Writer('test.xls'); ... $workbook->close();
Das erzeugt meines Wissens nach nur ein neues Objekt, mit dem mann dann Arbeiten kann um neue Einträge oder Sheets ect. einzufügen... und anschließend wirds eben mit close() ausgegeben... aber es wird definitiv keine Datei dauerhaft erzeugt... und was temporäres ist mir auch noch nicht aufgefallen...
"It just creates a Workbook" heißt hier scheinbar nicht, dass eine entsprechende Datei angelegt wird.



Den Rest werd ich ma ausprobieren..klingt gut. Danke schonmal..

CrissCross

Erfahrener Schreiberling

  • "CrissCross" is male

Posts: 282

Date of registration: Feb 15th 2005

7

Wednesday, March 5th 2008, 3:30pm





$workbook = new Spreadsheet_Excel_Writer('test.xls'); ... $workbook->close();
Das erzeugt meines Wissens nach nur ein neues Objekt, mit dem mann dann Arbeiten kann um neue Einträge oder Sheets ect. einzufügen... und anschließend wirds eben mit close() ausgegeben... aber es wird definitiv keine Datei dauerhaft erzeugt... und was temporäres ist mir auch noch nicht aufgefallen...
"It just creates a Workbook" heißt hier scheinbar nicht, dass eine entsprechende Datei angelegt wird.

Ich habe das Beispiel "Beispiel 41-2. In Datei speichern" schon so verstanden, dass dort eine Datei dauerhaft erzeugt werden soll.

"(...) Aber wie wird das Spreadsheet direkt auf einem Computer gespeichert. Dazu muss nur diese Zeile entfernt werden und ein gültiger Dateiname im Konstruktor des Workbooks angegeben werden."

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
require_once 'Spreadsheet/Excel/Writer.php';

// We give the path to our file here
$workbook = new Spreadsheet_Excel_Writer('test.xls');

$worksheet =& $workbook->addWorksheet('My first worksheet');

$worksheet->write(0, 0, 'Name');
$worksheet->write(0, 1, 'Age');
$worksheet->write(1, 0, 'John Smith');
$worksheet->write(1, 1, 30);
$worksheet->write(2, 0, 'Johann Schmidt');
$worksheet->write(2, 1, 31);
$worksheet->write(3, 0, 'Juan Herrera');
$worksheet->write(3, 1, 32);

// We still need to explicitly close the workbook
$workbook->close();
?>


Hab's aber selber auch noch nicht ausprobiert. Würde mich auf jeden Fall sehr wundern, wenn es nicht möglich sein sollte damit Dateien zu erzeugen, die dann dauerhaft auf dem Webspace liegen...
"Technology is easy - people are hard."

(John Gage - Sun Microsystems zum Thema warum IT-Projekte scheitern)

Coolyo

Junior Schreiberling

  • "Coolyo" is male
  • "Coolyo" started this thread

Posts: 196

Date of registration: Oct 1st 2007

Location: Hannover

8

Thursday, March 6th 2008, 12:38am

hm ok coole sache... hatte scheinbar vergessen die Schreibrechte für das Verzeichnis zu vergeben ... das Script hat dann normal funktioniert, nur dass die Datei nicht angelegt wurde ohne Fehlermeldung... deswegen bin ich davon ausgegangen, dass damit keine Datei erstellt wird...

ok Danke :)

PS: die Datei, die jetzt erstellt wird ist zwar immer noch beschädigt, aber immerhin bekomme ich jetzt ne File :)