2016-05-14 10 views
2

Ich habe kürzlich auf Joomla 3.5.1 aktualisiert und erhalte den folgenden Fehler, wenn ich eine PHP-Datei in mein Wurzelverzeichnis lade/einfüge.Jommla 3.5.1 Sitzungskonflikt - Duplikatsitzungsköpfe wurden bereits gesendet

Ich lade test.php Datei in einem Modul. Die test.php befindet sich im Hauptverzeichnis der Joomla-Installation. Da Joomla selbst die Sitzung jedoch bereits eingerichtet hat, kann ich aufgrund des obigen Sitzungsfehlers nicht auf die Joomla-Datenbank durch test.php zugreifen.

In der test.php habe ich den folgenden Code zu starten;

<?php 
 

 
define('_JEXEC', 1); 
 
define('_VALID_MOS', 1); 
 
define('JPATH_BASE', realpath(dirname(__FILE__))); 
 
define('DS', DIRECTORY_SEPARATOR); 
 
require_once (JPATH_BASE .DS.'includes'.DS.'defines.php'); 
 
require_once (JPATH_BASE .DS.'includes'.DS.'framework.php'); 
 

 

 
$mainframe = JFactory::getApplication('site'); 
 
$mainframe->initialise();

Es funktioniert vor dem Upgrade nur in Ordnung. Wie kann ich den Sitzungskonflikt in Joomla verhindern, wenn ich externe PHP-Datei lade, um auf die Joomla-Datenbank zuzugreifen?

Antwort

2

In der Regel wird dieses Problem durch einen fast unmerklichen Abstand (oder eine neue Zeile) am Anfang der Datei verursacht. Überprüfen Sie Ihre Datei test.php auf Leerzeichen vor der Eröffnung <? Php.

+1

nur um darauf hinzuweisen, dass ein Leerzeichen vor cmario

0

denke ich, den Grund, warum Sie diese Fehlermeldung erhalten, nachdem das 3.5.1 Update ist, dass sie jetzt eine Ausnahme in /libraries/joomla/session/handler/native.php Linie 252, wenn header_sent() Renditen werfen wahr. Um zu vermeiden, dass Sie versuchen, die „session.use_cookies“ Direktive auf false gesetzt mit

ini_set('session.use_cookies', 0); 

Aber das ist wirklich mehr ein Trick als eine Lösung, die Sie sollten das nicht tun. In der Tat kann ich keinen Grund finden, warum Sie die Joomla neu initialisieren wollen! Rahmen so. Der richtige Weg ist eine Datei wie /modules/mod_mymod/helper.php

defined('_JEXEC') or die('Restricted access'); 

class MyModHelper { 
    public static function doSth() { 
     $db = JFactory::getDBO(); 
     //your code here 
    } 
} 

zu erstellen und dann können Sie den Code von fast überall mit

require_once JPATH_ROOT.DIRECTORY_SEPARATOR.'modules'.DIRECTORY_SEPARATOR.'mod_mymod'.DIRECTORY_SEPARATOR.'helper.php'; 
MyModHelper::doSth(); 

Aber ich kam hier ausführen, weil ich das bekam gleicher Fehler beim Ausführen eines Joomla! CLI-Skript Also nur ein paar Worte dazu, weil deine Überschrift irgendwie passt. Auf einigen Rechnern scheint die Methode header_sent() auch für den Standard-Joomla! CLI-Skripte wie "finder_indexer.php". Um dies zu lösen, schrieb ich

ob_start(); 

am Anfang des Skripts um die Ausgabe zu puffern und jede CLI-Ausgabe zu verhindern, bevor die Sitzung tatsächlich beginnt.

1

Bitte folgen Sie den untenstehenden Schritten, dies wird das Problem wahrscheinlich lösen.

  1. Geben Sie Ihre Joomla Website Backend
  2. Wählen Sie aus dem Admin-Menü: Erweiterungen -> Verwalten -> Datenbank
  3. Klicken Sie auf die FIX-Taste. Sie können feststellen, dass einige andere Updates durchgeführt werden müssen, um die Datenbank auf 3.5 zu bringen.
  4. Gehen Sie zur globalen Konfiguration und schalten Sie die Site vor diesem nächsten Schritt aus, um alle Benutzer für eine Weile abzuschrecken.
  5. Dann, wie oben erwähnt, zu phpMyAdmin Kopf und löschen Sie alle Einträge in der Tabelle xxxxx_sessions.
  6. Gehen Sie zum Backend und schalten Sie die Site wieder ein.