Parse error: syntax error, unexpected T_STRING in
jordane45 Messages postés 38484 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 juillet 2025 -
Bonjour,
J'héberge SACoche sur mon serveur mais quand j'appelle le dossier, mon navigateur m'affiche cela : Erreur d'analyse : erreur de syntaxe, T_STRING inattendu dans /mnt/115/sda/4/6/acces.eval.sacoche/SACoche/index.php à la ligne 107
Pourriez vous m'aider svp ?
Merci
- Parse error: syntax error, unexpected T_STRING in
- Cmos checksum error ✓ - Forum Carte-mère/mémoire
- Playback error reconnect in 3s (1/5) francais - Forum Box et Streaming vidéo
- A javascript error occurred in the main process - Forum Matériel & Système
- Whea error occt - Forum Processeur
- Error 1962 ✓ - Forum PC fixe
3 réponses
8 mars 2024 à 18:12
bonjour
partage le code du fichier.... sinon aucune aide ne sera possible
8 mars 2024 à 18:14
session::execute();
8 mars 2024 à 18:30
Nan mais.... il faut aussi les lignes précédentes !!
Poste tout le code du fichier concerné .. ça sera plus simple !
8 mars 2024 à 18:36
Bon, je suis allé voir sur le github du projet.
Il n'y a rien d'anormal dessus.
De ton côté, n'as tu rien modifié dans le fichier dans les lignes qui précédent la ligne 107 ?
Peux tu retélécharger le fichier et remplacer celui que tu as actuellement ?
https://git.sesamath.net/sesamath/sacoche/-/blob/main/index.php?ref_type=heads
Modifié le 8 mars 2024 à 18:37
<?php /** * @version $Id$ * @author Thomas Crespin <***@***> * @copyright Thomas Crespin 2009-2022 * * **************************************************************************************************** * SACoche <https://sacoche.sesamath.net> - Suivi d’Acquisitions de Compétences * © Thomas Crespin pour Sésamath <https://www.sesamath.net> - Tous droits réservés. * Logiciel placé sous la licence libre Affero GPL 3 <https://www.gnu.org/licenses/agpl-3.0.html>. * **************************************************************************************************** * * Ce fichier est une partie de SACoche. * * SACoche est un logiciel libre ; vous pouvez le redistribuer ou le modifier suivant les termes * de la “GNU Affero General Public License” telle que publiée par la Free Software Foundation : * soit la version 3 de cette licence, soit (à votre gré) toute version ultérieure. * * SACoche est distribué dans l’espoir qu’il vous sera utile, mais SANS AUCUNE GARANTIE : * sans même la garantie implicite de COMMERCIALISABILITÉ ni d’ADÉQUATION À UN OBJECTIF PARTICULIER. * Consultez la Licence Publique Générale GNU Affero pour plus de détails. * * Vous devriez avoir reçu une copie de la Licence Publique Générale GNU Affero avec SACoche ; * si ce n’est pas le cas, consultez : <http://www.gnu.org/licenses/>. * */ // Fichier appelé pour l’affichage de chaque page. // Passage en GET des paramètres pour savoir quelle page charger. // Constantes / Configuration serveur / Autoload classes / Fonction de sortie require('./_inc/_loader.php'); // En théorie, si l’utilisateur refuse les cookies de SACoche mais accepte ceux de l’ENT, une demande de connexion SSO peut entraîner des boucles de redirections (la session n’étant pas retrouvée). if(empty($_COOKIE[COOKIE_TEST])) { Cookie::definir( COOKIE_TEST , 'ok' ); if(isset($_GET['sso'])) { if(!isset($_GET['cookie'])) { exit_redirection(URL_BASE.$_SERVER['REQUEST_URI'].'&cookie'); } else { exit_error( 'Risque de redirections en boucle' /*titre*/ , 'Pour utiliser <em>SACoche</em> vous devez configurer l’acceptation des cookies par votre navigateur.' /*contenu*/ ); } } } else { if(isset($_GET['cookie'])) { // Maintenant qu’on a vérifié que les cookies sont ok, on recharge sans le GET ajouté dans l’URL, sinon Itop demande une ré-authentification (service considéré différent...). exit_redirection( str_replace( '&cookie' , '' , URL_BASE.$_SERVER['REQUEST_URI'] ) ); } } // Mémorisation de paramètres multiples transmis en GET pour les retrouver par la suite dans le cas où le service d’authentification externe en perd // C’est le cas lors de l’appel d’un IdP de type RSA FIM, application nationale du ministère... if(isset($_GET['memoget'])) { Cookie::save_get_and_exit_reload( urldecode($_GET['memoget']) ); } // Récupération de paramètres multiples transmis en GET et mémorisés temporairement dans un cookie (pour le cas où le service d’authentification externe en perd). if(isset($_COOKIE[COOKIE_MEMOGET])) { Cookie::load_get(); } // Page et section appelées ; normalement transmis en $_GET mais $_POST possibles depuis GEPI if(isset($_GET['page'])) { $PAGE = Clean::get('page', 'id'); } elseif(isset($_POST['page'])) { $PAGE = Clean::post('page', 'id'); } elseif(isset($_GET['code_mdp'])) { $PAGE = 'public_nouveau_mdp'; } elseif(isset($_GET['stop_code'])){ $PAGE = 'public_stop_mail'; } elseif(isset($_GET['sso'])) { $PAGE = 'compte_accueil'; } else { $PAGE = 'public_accueil'; } if(isset($_GET['section'])) { $SECTION = Clean::get('section', 'id'); } elseif(isset($_POST['section'])) { $SECTION = Clean::post('section', 'id'); } else { $SECTION = ''; } // Besoin pour infobulle() if( !isset($_COOKIE[COOKIE_ISTOUCH]) ) { // Définition provisoire en attendant que la valeur soit fixée par javascript $_COOKIE[COOKIE_ISTOUCH] = FALSE; } // Fichier d’informations sur l’hébergement (requis avant la gestion de la session). if(is_file(CHEMIN_FICHIER_CONFIG_INSTALL)) { require(CHEMIN_FICHIER_CONFIG_INSTALL); } elseif($PAGE!='public_installation') { exit_error( 'Informations hébergement manquantes' /*titre*/ , 'Les informations relatives à l’hébergeur n’ont pas été trouvées.<br>C’est probablement votre première installation de SACoche, ou bien le fichier "'.FileSystem::fin_chemin(CHEMIN_FICHIER_CONFIG_INSTALL).'" a été supprimé.<br>Cliquer sur le lien ci-dessous.' /*contenu*/ , 'install' /*lien*/ ); } // Le fait de lister les droits d’accès de chaque page empêche de surcroit l’exploitation d’une vulnérabilité "include PHP" (https://www.cert.ssi.gouv.fr/alerte/CERTA-2003-ALE-003/). if(!Session::recuperer_droit_acces($PAGE)) Session::$tab_message_erreur ( 'Droits de la page "'.$PAGE.'" manquants !<br>Paramètre "page" transmis en GET incorrect, ou droits non attribués dans le fichier "'.FileSystem::fin_chemin(CHEMIN_DOSSIER_INCLUDE.'tableau_droits.php').'".' // La page vers laquelle rediriger sera définie après ouverture de la session // Ouverture de la session et gestion des droits d’accès session::execute(); if(count(Session::$tab_message_erreur)) { $PAGE = ($_SESSION['USER_PROFIL_TYPE'] == 'public') ? 'public_accueil' : 'compte_accueil' ; } // Traductions if($_SESSION['USER_PROFIL_TYPE']!='public') { Lang::setlocale( LC_MESSAGES, Lang::get_locale_used() ); Lang::bindtextdomain( LOCALE_DOMAINE, LOCALE_DIR ); Lang::bind_textdomain_codeset( LOCALE_DOMAINE, LOCALE_CHARSET ); Lang::textdomain( LOCALE_DOMAINE ); } // Alerte si navigateur trop ancien if(!empty($_SESSION['BROWSER']['alerte'])) { Session::$tab_message_erreur[] = $_SESSION['BROWSER']['alerte']; } // Infos DEBUG en console if (DEBUG>3) afficher_infos_debug_console(); // Blocage éventuel par le webmestre ou un administrateur ou l’automate (on ne peut pas le tester avant car il faut avoir récupéré les données de session) LockAcces::stopper_si_blocage( $_SESSION['BASE'] , FALSE /*demande_connexion_profil*/ ); // Autres fonctions à charger require(CHEMIN_DOSSIER_INCLUDE.'fonction_divers.php'); // MAJ fichier de config hébergement si besoin if(is_file(CHEMIN_FICHIER_CONFIG_INSTALL)) { require(CHEMIN_DOSSIER_INCLUDE.'maj_fichier_constantes_hebergement.php'); } // Interface de connexion à la base, chargement et config (test sur CHEMIN_FICHIER_CONFIG_INSTALL car à éviter si procédure d’installation non terminée). if(is_file(CHEMIN_FICHIER_CONFIG_INSTALL)) { // Choix des paramètres de connexion à la base de données adaptée... // ...multi-structures ; base sacoche_structure_*** (si connecté sur un établissement) if( (HEBERGEUR_INSTALLATION=='multi-structures') && ($_SESSION['BASE']>0) ) { $fichier_sql_param = 'serveur_sacoche_structure_'.$_SESSION['BASE']; $fichier_class_config = 'class.DB.config.sacoche_structure'; } // ...multi-structures ; base sacoche_webmestre (si non connecté ou connecté comme webmestre) elseif(HEBERGEUR_INSTALLATION=='multi-structures') { $fichier_sql_param = 'serveur_sacoche_webmestre'; $fichier_class_config = 'class.DB.config.sacoche_webmestre'; } // ...mono-structure ; base sacoche_structure elseif(HEBERGEUR_INSTALLATION=='mono-structure') { $fichier_sql_param = 'serveur_sacoche_structure'; $fichier_class_config = 'class.DB.config.sacoche_structure'; } else { exit_error( 'Configuration anormale' /*titre*/ , 'Une anomalie dans les données d’hébergement empêche l’application de se poursuivre.<br>HEBERGEUR_INSTALLATION vaut '.HEBERGEUR_INSTALLATION /*contenu*/ ); } // Chargement du fichier de connexion à la BDD define('CHEMIN_FICHIER_CONFIG_SQL',CHEMIN_DOSSIER_PRIVATE_SQL.$fichier_sql_param.'.php'); if(is_file(CHEMIN_FICHIER_CONFIG_SQL)) { require(CHEMIN_FICHIER_CONFIG_SQL); require(CHEMIN_DOSSIER_INCLUDE.$fichier_class_config.'.php'); } elseif($PAGE!='public_installation') { exit_error( 'Paramètres BDD manquants' /*titre*/ , 'Les paramètres de connexion à la base de données n’ont pas été trouvés.<br>C’est probablement votre première installation de SACoche, ou bien le fichier "'.FileSystem::fin_chemin(CHEMIN_FICHIER_CONFIG_SQL).'" a été supprimé.<br>Cliquer sur le lien ci-dessous.' /*contenu*/ , 'install' /*lien*/ ); } } // Authentification requise par SSO if(Session::$_sso_redirect) { require(CHEMIN_DOSSIER_PAGES.'public_sso_login.php'); // En cas de redirection pour cause de profil incompatible, il faut vérifier que l’on n’est pas encore identifié avec le mauvais profil. if( !Session::verifier_droit_acces($_SESSION['USER_PROFIL_TYPE']) && !Session::verifier_droit_acces('public') ) { Session::$tab_message_erreur[] = 'Appel incompatible avec votre identification actuelle.'.' Veuillez vous (re)connecter.'; $PAGE = 'public_accueil'; } } // Suppression du cookie provisoire ayant servi à mémoriser des paramètres multiples transmis en GET dans le cas où le service d’authentification externe en perd. // C’est le cas lors de l’appel d’un IdP de type RSA FIM, application nationale du ministère... if(isset($_COOKIE[COOKIE_MEMOGET])) { Cookie::effacer(COOKIE_MEMOGET); } // Authentification pour le compte d’une application tierce if(isset($_GET['url_redirection'])) { $url_redirection = urldecode($_GET['url_redirection']); if($_SESSION['USER_PROFIL_SIGLE'] == 'OUT') { // User non connecté -> Retenir la demande en attendant qu’il se connecte Session::_set('MEMO_GET','url_redirection',$url_redirection); } else { // User connecté -> Redirection vers l’application, avec une clef (ticket) pour attester du login et permettre de récupérer ses infos $clef = FileSystem::fabriquer_fichier_user_infos_for_appli_externe(); Session::_unset('MEMO_GET'); $separateur = (strpos($url_redirection,'?')===FALSE) ? '?' : '&' ; exit_redirection($url_redirection.$separateur.'clef='.$clef); } } // Page CNIL-RGPD si message d’information CNIL-RGPD non validé. if(isset($_SESSION['STOP_CNIL'])) { Session::$tab_message_erreur[] = 'Avant d’utiliser <em>SACoche</em>, vous devez valider le formulaire ci-dessous.'; $PAGE = 'compte_cnil'; } // Fichier de données de la page concernée $filename_php = CHEMIN_DOSSIER_PAGES.$PAGE.'.php'; if(!is_file($filename_php)) { Session::$tab_message_erreur[] = 'Fichier '.FileSystem::fin_chemin($filename_php).' manquant ; redirection vers une page d’accueil.'; $PAGE = ($_SESSION['USER_PROFIL_TYPE']=='public') ? 'public_accueil' : ( (isset($_SESSION['STOP_CNIL'])) ? 'compte_cnil' : 'compte_accueil' ) ; $filename_php = CHEMIN_DOSSIER_PAGES.$PAGE.'.php'; } // Contenu à afficher récupéré dans une variable ob_start(); require($filename_php); $CONTENU_PAGE = ob_get_contents(); ob_end_clean(); // Jeton CSRF ; ne peut pas être généré avant car $PAGE peut être changé par le code inclus ci-dessus. Session::generer_jeton_anti_CSRF($PAGE); // Fermeture de session (mais pas destruction, juste écriture et libération des données pour éviter un verrouillage en écriture) Session::write_close(); // Titre du navigateur $browser_title = ($TITRE) ? $TITRE : Layout::TITLE_DEFAULT ; Layout::add( 'browser_title' , $browser_title ); // Css personnalisé if(!empty($_SESSION['CSS'])) { Layout::add( 'css_inline' , $_SESSION['CSS'] ); } // Fichiers css & js $tab_pages_graphiques = array('officiel_accueil','livret_edition','releve_bilan_chronologique','releve_graphique'); $tab_pages_graphiques_export = array('releve_bilan_chronologique','releve_graphique'); $filename_js_normal = './pages/'.$PAGE.'.js'; Layout::add( 'css_file' , './_css/style.css' , 'mini' ); Layout::add( 'js_file' , './_js/jquery-librairies.js' , 'comm' ); Layout::add( 'js_file' , './_js/script.js' , 'mini' ); if(in_array($PAGE,$tab_pages_graphiques)) { Layout::add( 'js_file' , './_js/highcharts.js' , 'comm' ); } if(in_array($PAGE,$tab_pages_graphiques_export)) { Layout::add( 'js_file' , './_js/highcharts_exporting.js' , 'comm' ); Layout::add( 'js_file' , './_js/highcharts_exporting_offline.js' , 'comm' ); } if(is_file($filename_js_normal)) { Layout::add( 'js_file' , $filename_js_normal , 'mini' ); } // Ultimes constantes javascript Layout::add( 'js_inline_before' , 'var LOG_ID = "'.$_SESSION['BASE'].'_'.$_SESSION['USER_ID'].'";' ); Layout::add( 'js_inline_before' , 'var PAGE = "'.$PAGE.'";' ); Layout::add( 'js_inline_before' , 'var CSRF = "'.Session::$_CSRF_value.'";' ); Layout::add( 'js_inline_before' , 'var PROFIL_TYPE = "'.$_SESSION['USER_PROFIL_TYPE'].'";' ); Layout::add( 'js_inline_before' , 'var CONNEXION_USED = "'.((isset($_COOKIE[COOKIE_AUTHMODE])) ? html($_COOKIE[COOKIE_AUTHMODE]) : 'normal').'";' ); Layout::add( 'js_inline_before' , 'var DUREE_AUTORISEE = '.$_SESSION['USER_DUREE_INACTIVITE'].';' ); Layout::add( 'js_inline_before' , 'var DUREE_AFFICHEE = '.$_SESSION['USER_DUREE_INACTIVITE'].';' ); Layout::add( 'js_inline_before' , 'var DECONNEXION_REDIR = "'.((isset($_SESSION['DECONNEXION_ADRESSE_REDIRECTION'])) ? html($_SESSION['DECONNEXION_ADRESSE_REDIRECTION']) : '').'";' ); Layout::add( 'js_inline_before' , 'var BASE_MAJ_DECALEE = '.((empty($_SESSION['VERSION_BASE_MAJ_COMPLEMENTAIRE'])) ? 'false' : 'true').';' ); // Affichage $body_class = ($_COOKIE[COOKIE_ISTOUCH]) ? 'touch' : 'mouse' ; echo Layout::afficher_page_entete('prog-'.$body_class); if( substr($PAGE,0,7) !== 'public_' ) { $class_page_tactile = ($_COOKIE[COOKIE_ISTOUCH]) ? 'dispositif_tactile' : 'dispositif_pointage' ; $texte_page_tactile = ($_COOKIE[COOKIE_ISTOUCH]) ? 'Dispositif tactile activé.'.BRJS.'Basculer en mode pointage.' : 'Dispositif de pointage activé.'.BRJS.'Basculer en mode tactile.' ; $lien_page_langue = ($_SESSION['USER_ETABLISSEMENT']) ? ' <a href="./index.php?page=compte_langue">['.Lang::get_locale_used().']</a>' : '' ; $lien_page_switch = (!empty($_SESSION['USER_SWITCH_ID'])) ? '<a href="./index.php?page=compte_switch"><span class="top switch">'.$_SESSION['USER_PROFIL_NOM_COURT'].'</span></a>' : $_SESSION['USER_PROFIL_NOM_COURT'] ; $lien_page_assistance = in_array($_SESSION['USER_PROFIL_TYPE'],array('administrateur','directeur','professeur','parent','eleve')) ? ' [<a href="#" class="no_puce"><span class="top assistance" id="lien_assistance">assistance</span></a>]' : '' ; // Espace identifié : cadre_haut (avec le menu) et cadre_bas (avec le contenu). echo'<div id="cadre_haut">'.NL; echo '<a target="_blank" rel="noopener noreferrer" href="'.SERVEUR_PROJET.'" class="no_puce"><img id="logo" alt="SACoche" src="./_img/logo_petit_menu.png" width="154" height="39"></a>'.NL; echo '<div id="top_info">'.NL; echo $_SESSION['MENU']; echo '<div>'.NL; echo '<span class="top home">'.html($_SESSION['ETABLISSEMENT']['DENOMINATION']).' <a href="./index.php?page=compte_accueil">['.html(Lang::_('accueil')).']</a></span>'.$lien_page_assistance.'<br>'.NL; echo '<span class="top profil_'.$_SESSION['USER_PROFIL_TYPE'].'">'.html($_SESSION['USER_PRENOM'].' '.$_SESSION['USER_NOM']).' ['.$lien_page_switch.']'.$lien_page_langue.' [<a href="#" id="touchchange"'.infobulle($texte_page_tactile,FALSE,TRUE).'><span class="top '.$class_page_tactile.'"></span></a>]</span>'.NL; echo '</div>'.NL; echo '<div>'.NL; echo '<span class="top clock_fixe"><span id="clock">'.$_SESSION['USER_DUREE_INACTIVITE'].' min</span></span><br>'.NL; echo '<a href="#"><span class="top deconnexion" id="lien_deconnecter">'.html(Lang::_('Déconnexion')).'</span></a>'.NL; echo '</div>'.NL; echo '</div>'.NL; echo '<audio id="audio_bip" preload="none" class="hide">'.NL; // On pourrait bien sur laisser le navigateur se débrouiller et prendre le format qui lui convient, il me semble que dans ce cas j’avais noté des avertissements en console. if(!in_array( $_SESSION['BROWSER']['modele'] , array('firefox','opera') )) { echo '<source src="./_audio/bip.mp3" type="audio/mpeg">'.NL; } if(!in_array( $_SESSION['BROWSER']['modele'] , array('explorer','safari') )) { echo '<source src="./_audio/bip.ogg" type="audio/ogg">'.NL; } echo '</audio>'.NL; echo'</div>'.NL; echo'<div id="cadre_navig"><a id="go_haut" href="#cadre_haut"'.infobulle('Haut de page').'></a><a id="go_bas" href="#ancre_bas"'.infobulle('Bas de page').'></a></div>'.NL; echo'<div id="cadre_bas">'.NL; if(!empty($SOUS_MENU)) { echo'<div class="sousmenu">'.$SOUS_MENU.'</div>'; } echo '<h1>'.$TITRE.'</h1>'.NL; } else { // Accueil (identification ou procédure d’installation ou génération de nouveaux identifiants) : cadre unique (avec image SACoche & image hébergeur). echo'<div id="cadre_milieu">'.NL; if($PAGE=='public_accueil') { $tab_image_infos = ( (defined('HEBERGEUR_LOGO')) && (is_file(CHEMIN_DOSSIER_LOGO.HEBERGEUR_LOGO)) ) ? getimagesize(CHEMIN_DOSSIER_LOGO.HEBERGEUR_LOGO) : array() ; $hebergeur_img = isset($tab_image_infos[3]) ? '<img alt="Hébergeur" src="'.URL_DIR_LOGO.HEBERGEUR_LOGO.'" '.$tab_image_infos[3].' style="max-width:300px;max-height:200px;">' : '' ; $hebergeur_lien = ( (defined('HEBERGEUR_ADRESSE_SITE')) && HEBERGEUR_ADRESSE_SITE && ($hebergeur_img) ) ? '<a href="'.html(HEBERGEUR_ADRESSE_SITE).'">'.$hebergeur_img.'</a>' : $hebergeur_img ; $SACoche_lien = '<a href="'.SERVEUR_PROJET.'"><img alt="Suivi d’Acquisition de Compétences" src="./_img/logo_grand.gif" width="208" height="71"></a>' ; echo '<div id="titre_logo">'.$SACoche_lien.$hebergeur_lien.'</div>'.NL; } else { echo '<div class="hc"><img src="./_img/logo_grand.gif" alt="SACoche" width="208" height="71"></div>'.NL; echo '<h1>'.$TITRE.'</h1>'.NL; } } // Alerte si pas de javascript activé, et autres messages d’erreurs (ceux relatifs à l’acceptation des cookies et/ou l’usage d’iframe sont ajoutés par script.js) echo '<noscript>Pour utiliser <em>SACoche</em> vous devez activer JavaScript dans votre navigateur.</noscript>'.NL; if(count(Session::$tab_message_erreur)) { echo '<div class="probleme">'.implode('</div><div class="probleme">',Session::$tab_message_erreur).'</div>'.NL; Session::$tab_message_erreur = array(); } echo '<hr>'.NL; echo $CONTENU_PAGE; echo '<div id="ancre_bas"></div>'.NL; // Il faut un div et pas seulement un span pour le navigateur Safari (sinon href="#ancre_bas" ne fonctionne pas). echo'</div>'.NL; echo Layout::afficher_page_pied(); ?>
EDIT MODERATION : AJOUT DES BALISES DE CODE !!
8 mars 2024 à 18:38
Ligne 102 .... tu as oublié un point-virgule visiblement