Illegal use of $_SERVER.

In diesem Forum gibt es Starthilfe zum neuen Extension-System von phpBB 3.1/3.2. Fragen zur Entwicklung von Extensions und zur Konvertierung von phpBB 3.0.x MODs sind ebenfalls willkommen.
Antworten
Benutzeravatar
TimoMF
Mitglied
Beiträge: 33
Registriert: 16.05.2004 22:01

Illegal use of $_SERVER.

Beitrag von TimoMF »

Hallo,

ich hab Probleme mit $_SERVER.
Für BBClone versuche ich gerade eine Extension zu schreiben. phpBB prüft ja das Script und gibt dabei aus 'Illegal use of $_SERVER. You must use the request class or request_var() to access input data. Found in /.../portal/bbclone/lib/marker.php on line 310. This error message was generated by deactivated_super_global.'

Das wiederum soll soll man ja mit dem Befehl '$this->request->enable_super_globals();' umgehen können. Leider funktioniert anschliessend aber BBClone nicht mehr sauber da er wohl keine Daten mehr in $_SERVER vorfindet.

Was gibt es noch für Möglichkeiten $_SERVER für BBClone zur verfügung zu stellen?

BBClone ist ein Statistic Tool. Hier der Link: http://www.bbclone.de/features.php

Da ich nur eine Extension für phpBB 3.1.x schreiben will um BBClone weiter nutzen zukönnen, möchte ich nach Möglichkeit nicht BBClone umschreiben.

Hier die Funktion wo ich wohl die Änderung machen mus.

Code: Alles auswählen

    public function bbclone_index($event)
    {
        $this->request->enable_super_globals();
        define("_BBC_PAGE_NAME", 'Forums List');
        define("_BBCLONE_DIR", "./bbclone/");
        define("COUNTER", _BBCLONE_DIR."mark_page.php");
        if (is_readable(COUNTER)) include_once(COUNTER);
        $this->request->disable_super_globals();
    }
Hier die angemekerten Zeile in der maker.php von BBClone

Code: Alles auswählen

    foreach ($hdr as $str) {
      $$str = ((_BBC_PHP < 410) ? !empty($HTTP_SERVER_VARS[$str]) : !empty($_SERVER[$str])) ?
               bbc_clean(((_BBC_PHP < 410) ? $HTTP_SERVER_VARS[$str] : $_SERVER[$str]), $BBC_SEP) : false;
    }
die komplette Fehlermeldung
Allgemeiner Fehler
Illegal use of $_SERVER. You must use the request class or request_var() to access input data. Found in /.../portal/bbclone/lib/marker.php on line 310. This error message was generated by deactivated_super_global.

BACKTRACE

FILE: (not given by php)
LINE: (not given by php)
CALL: msg_handler()

FILE: [ROOT]/phpbb/request/deactivated_super_global.php
LINE: 67
CALL: trigger_error()

FILE: [ROOT]/phpbb/request/deactivated_super_global.php
LINE: 87
CALL: phpbb\request\deactivated_super_global->error()

FILE: [ROOT]/bbclone/lib/marker.php
LINE: 310
CALL: phpbb\request\deactivated_super_global->offsetGet()

FILE: [ROOT]/bbclone/lib/io.php
LINE: 39
CALL: bbc_marker->bbc_marker()

FILE: [ROOT]/bbclone/mark_page.php
LINE: 63
CALL: bbc_exec_marker()

FILE: [ROOT]/ext/timomf/bbclone_ext/event/listener.php
LINE: 68
CALL: include_once('[ROOT]/bbclone/mark_page.php')

FILE: (not given by php)
LINE: (not given by php)
CALL: timomf\bbclone_ext\event\listener->bbclone_index()

FILE: [ROOT]/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/EventDispatcher.php
LINE: 164
CALL: call_user_func()

FILE: [ROOT]/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/EventDispatcher.php
LINE: 53
CALL: Symfony\Component\EventDispatcher\EventDispatcher->doDispatch()

FILE: [ROOT]/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/ContainerAwareEventDispatcher.php
LINE: 167
CALL: Symfony\Component\EventDispatcher\EventDispatcher->dispatch()

FILE: [ROOT]/phpbb/event/dispatcher.php
LINE: 40
CALL: Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch()

FILE: [ROOT]/index.php
LINE: 198
CALL: phpbb\event\dispatcher->trigger_event()
Falls Ihr den Fehler wo anders vermutet, könnt Ihr euch das bisherige Script auch gerne komplet anschauen: Download BBClone_ext

Gruß Timo
Benutzeravatar
HabNurNeFrage
Ehemaliges Teammitglied
Beiträge: 1627
Registriert: 17.01.2010 20:22
Wohnort: An der Ostsee
Kontaktdaten:

Re: Illegal use of $_SERVER.

Beitrag von HabNurNeFrage »

Hi,

vielleicht hilft Dir dieser Thread von phpBB.com weiter.

Die sauberste Methode, $_SERVER Globals zu nutzen, erscheint mir das einzelne Aufrufen der genutzten Globals z.B. den Referrer:

Code: Alles auswählen

$request->variable('REMOTE_ADDR', '', false, \phpbb\request\request_interface::SERVER); 
In dem Thread gibts auch einen Hinweis, wie man auf einmal alle aktiviert, wovon aber abgeraten wird.

LG
| HomeStory.org - the friendly Community | Forum für alle Lebenslagen | <"}))}~ | Nicht nachmachen: Meine phpBB Spielereien |
var shoppen = geld.replace (/geld/g, 'bloedsinn'); if (geld < 1) { return home; };
Benutzeravatar
Elsensee
Ehemaliges Teammitglied
Beiträge: 832
Registriert: 19.05.2010 15:14
Wohnort: Hamburg
Kontaktdaten:

Re: Illegal use of $_SERVER.

Beitrag von Elsensee »

Das Ding ist aber, dass das $_SERVER Array nicht in seinem Code benutzt wird. Er hat theoretisch also keinen Einfluss darauf.
TimoMF hat geschrieben:Das wiederum soll soll man ja mit dem Befehl '$this->request->enable_super_globals();' umgehen können. Leider funktioniert anschliessend aber BBClone nicht mehr sauber da er wohl keine Daten mehr in $_SERVER vorfindet.
Das ist seltsam. Das $_SERVER Array wird wie jedes andere superglobale Array (ich weiß nicht, ob man die echt so nennt.. ich nenn sie jetzt einfach mal so :D ) befüllt. Und das so, wie es vorher war.
Woran merkst du denn, dass es nicht mehr sauber funktioniert? Was passiert denn mit BBClone, wenn du $this->request->enable_super_globals(); aufrufst?
Posts mostly powered by GitHub and phpBB.de Cross-Reference

2015-03-20 - Never forget 8)
Benutzeravatar
TimoMF
Mitglied
Beiträge: 33
Registriert: 16.05.2004 22:01

Re: Illegal use of $_SERVER.

Beitrag von TimoMF »

Es fügt keine Daten ein.

Getestet mit Version 0.6.1 und auch Version 0.6.3

Er bekommt leider keine richtigen Daten.
Es wird in der Last.php und in der Access.php gespeichert. in die Last.php speichert er dabei ohne Daten.

Last.php mit dem phpBB

Code: Alles auswählen

<?php
global $last;
$last =
  array(
    "pages" =>
    array(
      ""
    ),
    "traffic" =>
    array(

    )
  );
?>
so wird hier BBClone aufgerufen.

Code: Alles auswählen

    public function bbclone_index($event)
    {
        $this->request->enable_super_globals();
        define("_BBC_PAGE_NAME", 'Forums List');
        define("_BBCLONE_DIR", "./bbclone/");
        define("COUNTER", _BBCLONE_DIR."mark_page.php");
        if (is_readable(COUNTER)) include_once(COUNTER);
        $this->request->disable_super_globals();
    }
und hier wie sie aussehen sollte auch hier nur ein Eintrag

Code: Alles auswählen

<?php
global $last;
$last =
  array(
    "pages" =>
    array(
      "Temperaturverlauf (2 Tage)"
    ),
    "traffic" =>
    array(
      array(
        "time" => 1420146621, "prx_ip" => "unknown", "ip" => "192.168.6.1", "dns" => "192.168.6.1", "agent" => "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0", "referer" => "unknown", "page" => 0, "visits" => 1, "browser" => "firefox", "browser_note" => "34.0", "os" => "windows8", "ext" => "ipv4", "id" => 1, 
        "views" =>
        array(
          "1420146621|0|1"
        ),
        "search" => "-"
      )
    )
  );
?>
hier wird BBClone so aufgerufen:

Code: Alles auswählen

// BBClone MOD
 define("_BBC_PAGE_NAME", "Temperaturverlauf ($interval Tage)");
 define("_BBCLONE_DIR", "../../portal/bbclone/");
 define("COUNTER", _BBCLONE_DIR."mark_page.php");
 if (is_readable(COUNTER)) include_once(COUNTER);
// END BBClone MOD           
Wird _BBC_PAGE_NAME nicht mit übergeben, könnte es daran liegen? Wo ich mir die Dateien so ansehe fehlt ja schon der eintrag 'pages'.

Edit:
Ich habe ein kleines Script gebastelt womit ich _BBC_PAGE_NAME und auch $_SERVER auslesen konnte und es genau so eingebunden wie auch BBClone.
_BBC_PAGE_NAME wird auch sauber übertragen. Auch $_SERVER wird vernünftig ausgegeben.

Also an den $_SERVER liegt es wohl nicht. Woran kann das noch liegen?
Antworten

Zurück zu „Extension Bastelstube“