Kris: mail Command mit $HTTP_SERVER_VARS['REMOTE_USER']

$to  = "test@domain.tld";
$subject = "Test";
$message = "Dies ist ein Test !";
$headers = "From: $HTTP_SERVER_VARS['REMOTE_USER']<$HTTP_SERVER_VARS['REMOTE_USER']@test.tld>";
mail($to, $subject, $message, $headers);

heraus kommt das :

Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /xyz/Dateiname.php on line XYZ

wir krieg ich es hin das er mir das ganze ausliest und dann als Absender nutzt ?

  1. hi,

    wir krieg ich es hin das er mir das ganze ausliest und dann als Absender nutzt ?

    in dem du dieses variablen-im-string-kuddelmuddel sein lässt, und das ganze sauber strukturierst:

    $text = 'fester text '.$variable1.' noch mehr text '.$variable2.' blah';

    es gibt natürlich daneben noch andere möglichkeiten - beispielsweise mit geschweiften klammern. bei interesse nachzulesen unter http://www.php.net/manual/de/language.types.string.php

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. Hi Kris,

    Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /xyz/Dateiname.php on line XYZ

    Sehr intelligent, dass du die Zeilennummer überschreibst und uns nicht sagst, welche Zeile PHP gemeldet hat ;-)

    wir krieg ich es hin das er mir das ganze ausliest und dann als Absender nutzt ?

    Erst mal solltest du $_SERVER statt $HTTP_SERVER_VARS verwenden, ersteres ist superglobal.
    Probiers mal so:

    $headers = "From: " . $_SERVER['REMOTE_USER']  
             . "<" . $_SERVER['REMOTE_USER'] . "@test.tld>";
    

    Siehe auch Zeichenketten-Operatoren.

    Alternativ sollte auch das hier gehen:

    $headers = "From: {$_SERVER['REMOTE_USER']}<{$_SERVER['REMOTE_USER']}@test.tld>";

    Siehe auch Geschweifte Syntax.

    MfG, Dennis.

    --
    Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
    Schon gewusst, dass Bugs und Feature Vorschläge für das CForum ins Entwicklerforum oder in den BugTracker von WWWTech gehören und nicht hier her?
    1. Hi Kris,

      Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /xyz/Dateiname.php on line XYZ

      Sehr intelligent, dass du die Zeilennummer überschreibst und uns nicht sagst, welche Zeile PHP gemeldet hat ;-)

      »»

      dachte das liegt auf der Hand ._.

      es war folgende Zeile :
      $headers = "From: $HTTP_SERVER_VARS['REMOTE_USER']<$HTTP_SERVER_VARS['REMOTE_USER']@test.tld>";

      wir krieg ich es hin das er mir das ganze ausliest und dann als Absender nutzt ?

      Erst mal solltest du $_SERVER statt $HTTP_SERVER_VARS verwenden, ersteres ist superglobal.
      Probiers mal so:

      $headers = "From: " . $_SERVER['REMOTE_USER']

      . "<" . $_SERVER['REMOTE_USER'] . "@test.tld>";

      
      >   
      > Siehe auch [Zeichenketten-Operatoren](http://www.php.net/manual/de/language.operators.string.php).  
        
      hat nicht funktioniert .\_. krieg "" als Absender  
        
      
      >   
      > Alternativ sollte auch das hier gehen:  
      >   
      > `$headers = "From: {$_SERVER['REMOTE_USER']}<{$_SERVER['REMOTE_USER']}@test.tld>";`{:.language-php}  
      >   
      > Siehe auch [Geschweifte Syntax](http://www.php.net/manual/de/language.types.string.php#language.types.string.parsing.complex).  
      
      »»  
        
      auch hier erhalte ich einen leeren Absender  
        
      
      >   
      > MfG, Dennis.  
        
      geklappt hat es prinzipiell wenn ich folgendes gesetzt habe :  
        
      if ($user=="") {$user = $HTTP\_SERVER\_VARS['REMOTE\_USER']}  
        
      bei jeder Form Übergabe halt $user als hidden mitgeben und später dann :  
        
      $headers = "From: $user<$user@test.tld>";  
        
      und so hat es funktioniert, jedoch kam es leider auch hier einmal zu einem Fehler und der Absender war leer!  
        
      Nun will ich lediglich das er die Variable nicht erst per $user übergibt, sondern direkt von der Quelle bezieht.  
      a) weniger Code  
      b) leichtere Fehlerfindung  
        
      also was nun :/ ?
      
      1. Hi Kris,

        $headers = "From: " . $_SERVER['REMOTE_USER']

        . "<" . $_SERVER['REMOTE_USER'] . "@test.tld>";

        
        > >   
        > > Siehe auch [Zeichenketten-Operatoren](http://www.php.net/manual/de/language.operators.string.php).  
        >   
        > hat nicht funktioniert .\_. krieg "" als Absender  
          
        Du hast dir mal `echo $headers;`{:.language-php} ausgeben lassen? Da sollte auf jeden Fall noch der richtige Wert drin stehen.  
          
        Ich vermute, dass der Fehler erst beim Mailserver auftritt, dies könnte z.B. daran liegen, dass der Mailserver dich den Absender nicht überschreiben lässt. Bist du sicher, dass eine Manipulation des Absenders gestattet ist?  
          
        Und was mir gerade noch einfällt - müssen die Header-Zeilen nicht alle mit \r\n abgeschlossen werden?  
          
          
        
        > geklappt hat es prinzipiell wenn ich folgendes gesetzt habe :  
        >   
        > if ($user=="") {$user = $HTTP\_SERVER\_VARS['REMOTE\_USER']}  
          
        Wo soll an dieser Stelle $user herkommen? Ich glaube, du meinst eher $\_GET['user'] bzw. $\_POST['user'] ... Verlasse dich nicht auf ein aktiviertes register\_globals.  
          
          
        
        > Nun will ich lediglich das er die Variable nicht erst per $user übergibt, sondern direkt von der Quelle bezieht.  
        > a) weniger Code  
        > b) leichtere Fehlerfindung  
          
        Der Code und die Fehlerfindung sind keine richtigen[tm] Gründe - der Hauptgrund, weshalb du den Usernamen \_auf keinen Fall\_ per Formular übergeben solltest ist, dass man die Formular-Daten \_beliebig\_ fälschen kann und somit User "dennis" E-Mails verschicken könnte, in denen als Absender der User "kris" stünde.  
          
          
        MfG, Dennis.
        
        -- 
        Mein SelfCode: [ie:{ fl:( br:> va:) ls:\[ fo:) rl:( n4:# ss:) de:\] js:| ch:{ sh:| mo:} zu:|](http://www.peter.in-berlin.de/projekte/selfcode/?code=ie%3A%7B+fl%3A%28+br%3A%3E+va%3A%29+ls%3A%5B+fo%3A%29+rl%3A%28+n4%3A%23+ss%3A%29+de%3A%5D+js%3A%7C+ch%3A%7B+sh%3A%7C+mo%3A%7D+zu%3A%7C)  
          
        „Von rechts ein Trabbi und von links auch frei!” \*g\*
        
      2. Hi!

        [...]
        geklappt hat es prinzipiell wenn ich folgendes gesetzt habe :

        if ($user=="") {$user = $HTTP_SERVER_VARS['REMOTE_USER']}

        bei jeder Form Übergabe halt $user als hidden mitgeben und später dann :

        $headers = "From: $user$user@test.tld";

        und so hat es funktioniert, jedoch kam es leider auch hier einmal zu einem Fehler und der Absender war leer!

        Nun will ich lediglich das er die Variable nicht erst per $user übergibt, sondern direkt von der Quelle bezieht.
        a) weniger Code
        b) leichtere Fehlerfindung

        Hast du denn bereits überprüft, ob in $_SERVER['REMOTE_USER'] überhaupt ein Wert vorhanden ist? Dies ginge z.B. mit der PHP-Funktion var_dump().

        Darüber hinaus ist hierbei auch von Bedeutung, ob PHP als Modul oder CGI-Variante läuft. Bei letzterer ist diese Umgebungsvariable nämlich nicht gesetzt.

        Grüße,
        Fabian St.

        1. Hi Fabian,

          Darüber hinaus ist hierbei auch von Bedeutung, ob PHP als Modul oder CGI-Variante läuft. Bei letzterer ist diese Umgebungsvariable nämlich nicht gesetzt.

          War es nicht so, dass REMOTE_USER immer vorhanden ist/sein sollte, sofern eine HTTP Authentifizierung erfolgt ist? Ich glaube, du meinst die Möglichkeit, mit PHP eine HTTP Auth zu erzwingen, was nur bei PHP als Modul geht und wo man danach PHP_AUTH_USER und PHP_AUTH_PW zur Verfügung hat, s.a. HTTP Authentifizierung.

          MfG, Dennis.

          --
          Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
          Der beste Datenschutz ist das nicht-speichern von Daten. (Christian Kruse)