2011-03-24 14 views
8

Soy bastante nuevo en php y estoy usando un script que crea una función llamada "mime_mailer" que esencialmente me permite usar PHP para enviar correos electrónicos que se pueden diseñar con CSS en su lugar de ser simplemente texto simple.Error de sintaxis, inesperado T_SL

Sin embargo, en mi secuencia de comandos de registro, trato de escribir un código que envía un correo electrónico de CSS, pero me sale un error que dice que hay un error de sintaxis. ¿Podría alguien por favor informarme sobre esto?

  $subject = "Your Red-line Account"; 
    $css  = "body{ color: #090127; background-color: #f0f0f0; }"; 
    $to  = $usercheck; 

    //Message 
    $message =<<<END 
       <html> 
        <head> 
         <title> 
          Red-line 
         </title> 
        </head> 
        <body> 
         <p> 
          Hi $first_name, 
         </p> 

         <p> 
          Your Red-line account is almost complete. To finish, go to <a href='www.thered-line.com'>The Red-line</a> and enter your eight digit confirmation code. 
         </p> 

         <p> 
          Your confirmation code is: <b>$code</b> 
         </p> 

         <p> 
          Sincerely, 
         </p> <br /> 

         <p> 
          The Red-line Operator 
         </p> 
        </body> 
       </html> 
      END; 

        // To send HTML mail, the Content-type header must be set 
     $headers = 'MIME-Version: 1.0' . "\r\n"; 
     $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 

        // Additional headers 
     $headers .= "From: The Red-line <[email protected]>\r\n"; 
     $headers .= "To: $first_name $last_name <$usercheck>\r\n"; 

        // Mail it 
     require_once("function_mime_mailer.php"); 


     mime_mailer($to, $subject, $message, $headers, NULL, $css); 
} 

Aquí está el código para el archivo "function_mime_mailer.php".

if(basename(__FILE__) == basename($_SERVER['PHP_SELF'])) send_404(); // stop http access   to   this file 

function mime_mailer($to, $subject, $message, $headers = NULL, $attachments = NULL, $css = NULL) 
{ 
     if(!preg_match('/^([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-  z]{2,6})$/', $to)) return FALSE; 
if(preg_match('/<(html|head|body|div|a|h|p|table|br|img|b|hr|ol|ul|span|pre|i|form)[^>]*[^>]*>/i', $message)) $html = TRUE; 

if(stristr($message, '<body')) $message = stristr($message, '<body'); 
    $message = delete_local_links($message); 
if(empty($headers)){ 
    $headers = "MIME-Version: 1.0\n"; 
}else{ 
    $headers.= "\nMIME-Version: 1.0\n"; 
} 
if(empty($html)){ 
    $result = plain_text($message); 
}elseif(isset($html) and $html == TRUE){ 
    if(!isset($css)) $css = NULL; 
    if(preg_match('/<img[^>]+>/i', $message)){ 
     $result = multipart_related($message, $css); 
    }else{ 
     $result = multipart_alternative($message, $css); 
    } 
} 
$result['message'] = delete_non_cid_images($result['message']); 
if(!empty($attachments)){ 
    $parts = attachments($attachments); 
    array_unshift($parts, implode('', $result)); 
    $result = multipart_mixed($parts); 
} 
$headers = $headers.$result['headers']; 
//print '<pre>'.htmlspecialchars($headers.$result['message']).'</pre>';exit; 
if(mail($to, $subject, $result['message'], $headers)) return TRUE; 
return FALSE; 
} 
?> 
+1

Deja la mensaje de error indicando el número de línea y definir ese número de línea en el código publicado –

+0

El error está en el guión registro. Está en la 6ª línea. La línea donde se define la variable $ message. Donde el <<< END es ... – Lance

Respuesta

11

Eche un vistazo a List of Parser tokens.

T_SL referencias a <<.

No debe usar pestañas o espacios antes de usar END;. Eche un vistazo al this huge warning.

+0

Cambié <<< END a << END y me deshice de las pestañas y espacios antes de usar END y el mismo mensaje de error todavía se muestra. – Lance

+0

@Lance: Debería cambiar '<< END' de nuevo a' <<< END'. Solo debe eliminar las pestañas y espacios en la misma línea que 'END;'. –

0

Hay un error en function_mime_mailer.php:

if(empty($headers)){ 
    $headers = "MIME-Version: 1.0\n"; 
}else{ 
    $headers.= "\nMIME-Version: 1.0\n"; 
} 

debería ser

if(empty($headers)){ 
    $headers = "MIME-Version: 1.0\r\n"; 
}else{ 
    $headers.= "\r\nMIME-Version: 1.0\r\n"; 
} 

también, si se incluye la cabecera MIME-Version, entonces la función incluirá una vez más - con eficacia teniendo dos de ellos.

18

Acabo de tener el mismo problema.

resultó ser contenido en la misma línea que mi apertura HERDEOC

mal ejemplo

echo <<<HEREDOC code started on this line 
HEREDOC; 

ejemplo correcto

echo <<<HEREDOC 
code should have started on this line 
HEREDOC; 

Espero que esto ayude a alguien más!

+0

me ayudó!gracias :) –

+0

Vale la pena señalar que incluso un carácter de espacio (que puede estar oculto en su editor) puede causar este problema. _Es un golpe mortal hasta que lo encuentres. – JakeParis

1

¿Qué versión de php estás usando? La sintaxis de nowdoc solo es válida desde PHP 5.3.0. Consulte el manual: http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.nowdoc

+0

Recientemente (en 2017!) Acerté este error, y esta fue la causa. Mi empresa de alojamiento web todavía usa PHP 5.2.9 (no soportado desde 2014, creo) y arroja este error para un nowdoc. Recuerde verificar la versión de PHP de su servidor web. –

1

Una nota al margen, pero bien podría ayudar a alguien: una mala combinación de git puede causar esto. Considere:

function foo 
    <<<<<<< HEAD 
    $bar = 1; 
    <<<<<<< e0f2213bc34d43ef 
    $bar = 2; 

El analizador de PHP produciría el mismo error.

Fuente: apenas poco conseguido por esta;)

Cuestiones relacionadas