[PHP] Script - problem mit Safe_mode on und fread()



  • Hallo ihr lieben,

    mal wieder wende ich mich vertrauensvoll mit einem kleinen PHP - Problem an euch 😉

    Ich habe ein Script geschriebne, was oer mail() dateien verschickt.
    Funktioniert soweit auch ganz gut, allerdings:
    Wenn ich es auf servern laufen lasse, wo safe_mode auf on ist, geht es nicht.
    Denn fread darf mit safe_mode nicht ausgeführt werden... habt ihr andere ideen?
    Es sollte auf jeden fall auch mit safe_mode on funktionieren.

    Für tipps und hilfe wäre ich sehr dankbar 😉

    Und nun noch nen stück code, damit ihr seht, wie ich es anhänge:

    $Dateiname = "pdf/Datei.pdf";
        $DateinameMail = "Dateiname.pdf";
    
        $Trenner = md5(uniqid(time()));
    
        //Header vorher schon modifiziert, dies wird nur noch "angehängt" 
        $Header .= "\n";
        $Header .= "MIME-Version: 1.0";
        $Header .= "\n";
        $Header .= "Content-Type: multipart/mixed; boundary=$Trenner";
        $Header .= "\n\n";
        $Header .= "This is a multi-part message in MIME format";
        $Header .= "\n";
        $Header .= "--$Trenner";
        $Header .= "\n";
        $Header .= "Content-Type: text/plain";
        $Header .= "\n";
        $Header .= "Content-Transfer-Encoding: 8bit";
        $Header .= "\n\n";
        $Header .= "Titel der Email";
        $Header .= "\n";
        $Header .= "--$Trenner";
        $Header .= "\n";
        $Header .= "Content-Type: application/pdf; name=$DateinameMail";
        $Header .= "\n";
        $Header .= "Content-Transfer-Encoding: base64";
        $Header .= "\n";
        $Header .= "Content-Disposition: attachment; filename=$DateinameMail";
        $Header .= "\n\n";
        $Dateiinhalt .= fread(fopen($Dateiname, "r"), filesize($Dateiname)); //Fehler liegt in dieser Zeile !!!!
        $Header .= chunk_split(base64_encode($Dateiinhalt));
        $Header .= "\n";
        $Header .= "--$Trenner--";
    

    P.S.: Ja die Datei existiert...
    Bei bedarf kann ich auch noch die Fehlermeldung nennen 😉

    Liebe grüsse



  • Ich bin mir nicht sicher ( verwende selbst keinen safe_mode):

    Ist es nicht so, daß die Datei dem Benutzer gehören muß, der sie lesen will (richtig per uid) wenn safe_mode aktiviert ist.. Ein Leserecht reicht dann glaube ich nicht. sprich hilft ein

    chown wwwrun dateiname.pdf # gemeint ist der apache-user

    um das Problem zu lösen ?

    Gruß Karsten



  • wegus schrieb:

    Ich bin mir nicht sicher ( verwende selbst keinen safe_mode):

    Ist es nicht so, daß die Datei dem Benutzer gehören muß, der sie lesen will (richtig per uid) wenn safe_mode aktiviert ist.. Ein Leserecht reicht dann glaube ich nicht. sprich hilft ein

    chown wwwrun dateiname.pdf # gemeint ist der apache-user

    um das Problem zu lösen ?

    Gruß Karsten

    Danke, ich denke das würde das problem lösen.

    Nur das problem an der gesamten geschichte ist, dass die dateien per pdf automatisch erstellt werden (php - script) und immer mehr werden und andere namen haben.
    D.H. ich müsste bei jeder neu erstellten PDF - Datei immer wieder chown ausführen, was ich aber nicht kann, da ich per Script keine Rechte dafür habe...

    Trotzdem danke schonmal für die antwort 😉

    Liebe grüsse

    Edit:

    Mittlerweile bin ich soweit dass er zumindest die datei einzulesen scheint. (Mit hilfe der Angabe der Direkten adresse http://www.domain.de/datei.pdf)

    Allerdings nimmt filesize diesen pfad nicht. Fehlermeldung:

    Warning: filesize(): Stat failed for http://domain.net/ordner/pdf/datei.pdf (errno=2 - No such file or directory) in /home/webspace/srv1/ws2/web/ordner/functions.inc.php on line 662
    

    Allerdings: die Datei besteht und die Datei lässt sich auch normal per Browser anzeigen...

    Liebe grüsse



  • Die PHP-Doku zu filesize() schrieb:

    Diese Funktion ist nicht für remote Dateien geeignet, die zu prüfende Datei muss über das Dateisystem des Servers verfügbar sein.

    Aber du könntest mal versuchen, die Datei erst in einen Buffer einzulesen - dann kannst du anschließend nachschauen, wie groß er ist 🕶

    Vielleicht geht es aber auch eleganter 🙄



  • flenders schrieb:

    Die PHP-Doku zu filesize() schrieb:

    Diese Funktion ist nicht für remote Dateien geeignet, die zu prüfende Datei muss über das Dateisystem des Servers verfügbar sein.

    Aber du könntest mal versuchen, die Datei erst in einen Buffer einzulesen - dann kannst du anschließend nachschauen, wie groß er ist 🕶

    Vielleicht geht es aber auch eleganter 🙄

    Das hab ich dann auch gemerkt 😉

    Ich hab eine Funktion geschrieben, die bei Remote - Dateien den Filesize berechnet.

    Auf wunsch kann ich die auch gern hier posten...

    Liebe grüsse


Anmelden zum Antworten