11
votes

Erreur de syntaxe, t_sl inattendue

Je suis assez nouveau à PHP et j'utilise un script qui crée une fonction appelée "mime_mailer" qui me permet essentiellement d'utiliser php pour envoyer des courriels pouvant être conçus avec CSS au lieu d'être simplement un texte simple. .

Pourtant, dans mon script d'enregistrement, j'essaie d'écrire du code qui envoie un courrier électronique CSS, mais je reçois une erreur en disant qu'il y a une erreur de syntaxe. Si quelqu'un pourrait-on s'il vous plaît remplir à ce sujet? P>

  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;
}
?> 


2 commentaires

Publiez le message d'erreur indiquant le numéro de ligne et définissez ce numéro de ligne dans le code posté


L'erreur est dans le script d'enregistrement. C'est dans la 6ème ligne. La ligne où la variable de messages $ est définie. Où le <<< fin est ...


6 Réponses :


13
votes

Jetez un coup d'œil au Liste des jetons d'analyseurs .

t_sl références à <<< / code>.

Vous ne devez pas utiliser les onglets ou les espaces avant d'utiliser fin; . Regardez Cet énorme avertissement .


2 commentaires

J'ai commuté <<< Terminer à << Terminer et se débarrasser des onglets et des espaces avant que j'ai utilisé la fin et que le même message d'erreur s'affiche toujours.


@Lance: Vous devriez changer << fin retour à <<< Fin . Vous ne devez supprimer que les onglets et les espaces sur la même ligne que fin; .



0
votes

Il y a un bogue dans fonction_mime_mailer.php: xxx

doit être xxx

aussi, si vous incluez l'en-tête de la version MIME , alors la fonction comprendra une fois de plus - en avoir effectivement deux d'entre elles.


0 commentaires

24
votes

a juste eu le même problème.

s'est avéré être contenu sur la même ligne que mon herdeoc d'ouverture

faux exemple xxx

correct Exemple xxx

espère que cela aide quelqu'un d'autre!


1 commentaires

Il convient de souligner que même un caractère d'espace (qui peut être caché dans votre éditeur) peut causer ce problème. C'est un bain de cerveau jusqu'à ce que vous le trouviez.



1
votes

Quelle version de php utilisez-vous? La syntaxe Nowdoc n'est valide que depuis PHP 5.3.0. Voir le manuel: http: //www.php .NET / Manual / fr / language.types.string.php # langue.types.string.syntax.nowdoc


1 commentaires

J'ai récemment (en 2017!) Appuyez sur cette erreur et c'était la cause. Ma société d'hébergement Web utilise toujours PHP 5.2.9 (non pris en charge depuis 2014, je pense) et cela jette cette erreur pour un Nowdoc. N'oubliez pas de vérifier la version PHP de votre webhost.



4
votes

Une note latérale, mais pourrait bien aider quelqu'un: une mauvaise fusion git peut causer cela. Considérez:

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


2 commentaires

Merci, c'est le cas avec moi, mais comment le résoudre? Je ne sais pas quel fichier contient l'erreur


Je suis désolé Shireef que je n'ai pas revu sur ceci ... Career Hop au début de 2020 et un temps chargé de foudre depuis que je m'éloigna de la part de la pile pour la plupart. Si vous avez un système de type UNIX, je suggérerais d'utiliser grep ou de trouver de la canalisée à grep ....



4
votes

Il avait le même problème au même problème, mais le mien était parce que j'avais l'espace à la fin de mon hérécoc sur la ligne supérieure: xxx

html;

Source: http://realtechTalk.com/_syntax_error_unexpued_t_sl_in_php_solution-2109-Articles


0 commentaires