[3.2] PHP Includes

Fragen rund um die Installation, Administration und Benutzung von phpBB 3.1.x und höher und die Konvertierung zu phpBB 3.2.x.
Forumsregeln
Bitte im Thementitel den Präfix deiner phpBB-Version [3.1.x] oder [3.2.x] angeben.
ralfE
Mitglied
Beiträge: 9
Registriert: 31.12.2018 19:22

[3.2] PHP Includes

Beitragvon ralfE » 01.01.2019 20:15

Frohes Neues! :grin:

Habe beim neuen Board V3.2.5 versucht ein triviales PHP-Script in die overall_header.html einzubinden. Das Script funktioniert ausserhalb des Boards einwandfrei.
PHP Version 7.2.13.

Erlauben von PHP habe ich im Board aktiviert.

Das Script verwendet die Variable $_SERVER["PHP_SELF"]. Ich habe in der phpBB3\config\default\parameters.yml "

Code: Alles auswählen

core.disable_super_globals: false
" eingestellt.

Nach allen Änderungen immer brav den Cache geleert!

Die Einstellung in der parameters.yml scheint dennoch nicht zu greifen. Fehlermeldung: Illegal use of $_SERVER. You must use the request class or request_var() to access input data...

Das PHP-Script baut die Navigation zentral zusammen und simuliert die CSS-Einstellung

Code: Alles auswählen

a:active
.

Auszug:

Code: Alles auswählen

echo "<ul class='topnavi1'>";                
while(list($key, $val) = each($navigation1)){
      if ($_SERVER["PHP_SELF"] == $val){
           echo "<li><span>$key</span></li>";
      } else {
           echo "<li><a href=\"$val\">$key</a></li>";
      }
}
echo "</ul>";


Was mache ich falsch? Was bedeutet "You must use the request class"? Das Script befindet sich nicht im phpbb-root-Verzeichnis. Kann ich es trotzdem so ändern, dass es wieder funktioniert?

VG
Ralf

Benutzeravatar
BNa
Valued Contributor
Beiträge: 2479
Registriert: 12.04.2010 23:51
Kontaktdaten:

Re: [3.2] PHP Includes

Beitragvon BNa » 02.01.2019 11:39

Hallo und auch ein frohes Neues,

benutzt doch ruhig request_var() und stelle wieder von false auf true um :wink:

Code: Alles auswählen

Example #2 set default and type cast to integer

Use request var and define a default variable (use the correct type)

$start = request_var('start', 0);

// because we only determine if the variable isset, and only a $_POST variable, this is permitted
$submit = (isset($_POST['submit'])) ? true : false;


https://wiki.phpbb.com/Function.request_var

Alternative zu PHP_SELF :

https://www.phpbb.com/community/viewtop ... #p14152801

ralfE
Mitglied
Beiträge: 9
Registriert: 31.12.2018 19:22

Re: [3.2] PHP Includes

Beitragvon ralfE » 02.01.2019 18:21

Danke erst mal!

Ich bin jetzt nicht der große Programmierer und stehe irgendwie auf der Leitung. :-?

Folgendes habe ich in das PHP-Script eingetragen:

Code: Alles auswählen

$self = $request->server('PHP_SELF');

Fehlermeldungen:
Undefined variable...
Fatal error: Uncaught Error: Call to a member function server() on null.

Die Funktion request_var() ist eine phpBB Funktion, wenn ich es richtig verstehe. PHP kennt das offenbar nicht.

Ich möchte aber dieses PHP-Script einbinden. Es geht ja um die Integration des Boards in meine Webseite, die nicht nur aus dem Forum besteht. Da ein Zugriff auf PHP-Superglobals aus dem Board heraus offenbar nicht mehr möglich ist, muss ich jetzt WAS und WO tun?

Ich bin den Links in deinem Beitrag gefolgt, aber werde leider nicht recht schlau daraus. Zumindest sehe ich gerade nicht wie ich das in meinem Fall sinnvoll nutzen kann.

Vielleicht brauche ich nur einen kleinen Kick und dann macht es mei mir "Klick"? :wink:

VG
Ralf

Benutzeravatar
Mahony
Ehemaliger
Beiträge: 11764
Registriert: 17.11.2005 22:33
Wohnort: Esslingen (Neckar)
Kontaktdaten:

Re: [3.2] PHP Includes

Beitragvon Mahony » 02.01.2019 18:35

Hallo
Ich habe in der phpBB3\config\default\parameters.yml "

Code: Alles auswählen

core.disable_super_globals: false

" eingestellt.

Hm... unter phpBB3.2.x sollte die Einstellung in der
/config/default/container/parameters.yml vorgenommenen werden.

Grüße: Mahony
Taekwondo in Berlin
Wer fragt, ist ein Narr für fünf Minuten, wer nicht fragt, ist ein Narr für immer.

ralfE
Mitglied
Beiträge: 9
Registriert: 31.12.2018 19:22

Re: [3.2] PHP Includes

Beitragvon ralfE » 03.01.2019 00:03

Sorry, mein Fehler!

Die Datei parameters.yml befindet sich natürlich unter phpBB3\config\default\container. Dort habe ich auch die Änderung vorgenommen.
Sie wirkt aber offenkundig nicht.

Sollte jemand gegenteilige Erfahrungen gemacht haben, werde ich die einzelnen Schritte noch mal gewissenhaft durchführen.

Meine Vermutung ist aber, dass das Abschalten der PHP-Superglobals in phpBB 3.2.5 (oder schon früher?) irgendwo aus Sicherheitsgründen hartcodiert ist und das Drehen an dem Parameter keine Wirkung mehr hat. :cry:

Natürlich führen viele Wege nach Rom.
1. Man kann die Navigation in der overall_header.html nachbauen
2. Man kann den Weg über ein IFrame gehen
3. Man kann sich eine andere Foren-Software suchen
4. ...

Die Goldrandlösung ist aber für mich ein universelles Navi-Script, welches überall funktioniert!

Grundsätzlich bin ich der Meinung, wenn man essenzielle Dinge in einer Software abschaltet, sollte man praktikable Alternativen anbieten und diese auch an prominenter Stelle dokumentieren!

Ich kann mir kaum vorstellen, dass ich mit dem Problem alleine dastehe...

:roll:

Benutzeravatar
vfrblue
Junior Supporter
Beiträge: 1436
Registriert: 22.11.2016 18:46
Wohnort: Niedersachsen-West
Kontaktdaten:

Re: [3.2] PHP Includes

Beitragvon vfrblue » 03.01.2019 00:12

Gruß Hermann

Forum VFR-OC

Benutzeravatar
canonknipser
Supporter
Supporter
Beiträge: 1820
Registriert: 10.09.2011 11:14
Kontaktdaten:

Re: [3.2] PHP Includes

Beitragvon canonknipser » 03.01.2019 00:50

Das Problem wird sein, du befindest dich im Template (html-Teil).
Aber wenn du nur den Script-Namen des gerade ausgeführten php-Scriptes brauchst, dann kannst du evtl. auf eine template-Variable SCRIPT_NAME zurückgreifen und musst nicht $server['PHP_SELF] nehmen.
Grüße, canonknipser
"there are only 10 types of people: those, who understand binary and those, who don't"
just arrived ;) - Bilder
Kein Support via PN, nur im Board und (manchmal) im IRC

ralfE
Mitglied
Beiträge: 9
Registriert: 31.12.2018 19:22

Re: [3.2] PHP Includes

Beitragvon ralfE » 03.01.2019 20:24

Danke an die beiden Vorredner!

Zunächst mal möchte ich mich für meinen vielleicht etwas rüden Unterton in meinem letzten Beitrag entschuldigen!
Leider war ich etwas genervt, weil ich immer gerne schnell zum Ziel kommen möchte.

Eure beiden Vorschläge klingen gut. Sie haben aber aus meiner Sicht den Haken, dass sie nur innerhalb des Boards funktionieren können.

Vielleicht habe ich den Aufbau meiner Webseite nicht hinreichend erklärt:

Das Board selbst ist in einem Unterverzeichnis meiner Site installiert. Deshalb kann ich z.B. Template-Variable ausserhalb des Boards nicht nutzen.

Ich verwende diverse PHP-Scripts die nicht anderes machen als die Navigation zentral zusammenzubauen. PHP_SELF benötige ich um dem User in der Navi anzuzeigen, wo er sich gerade befindet. Dieser Navigationspunkt ist dann a) farblich erkennbar und b) kein Link mehr. Diese Scripts sind in sämtliche Seiten eingebunden. Wenn ich die Navigation ändern möchte, muss ich es nur einmal an entsprechender Stelle tun. So soll es sein weil es den Pflegeaufwand drastisch reduziert. Soweit wird das wohl jeder nachvollziehen können? :)

Nun möchte ich gerne zwecks Integration des Boards in die gesamte Site diese Scripts in dem/den Templates ebenfalls nutzen. Das hat in der Vergangenheit auch problemlos funktioniert.

Ich bin nun auf der Suche nach einem Workaround.

Im Beitrag http://area51.phpbb.com/phpBB/viewtopic.php?p=296361#p296361 schreibt ein 3Di
Forget to hack the core code, it is a no-no.


:D

Was nun?

Benutzeravatar
canonknipser
Supporter
Supporter
Beiträge: 1820
Registriert: 10.09.2011 11:14
Kontaktdaten:

Re: [3.2] PHP Includes

Beitragvon canonknipser » 03.01.2019 21:23

Du könntest evtl. dein Script so modifizieren, dass unterschieden wird, ob du dich innerhalb oder außerhalb von phpBB befindest. phpBB stellt dazu die Konstante IN_PPHBB bereit; auf true bist du im phpBB-Kontext, bei false oder undefined im "Website"-Kontext
Also (ungetestet, nur als Idee) an den Anfang deines Scriptes:

Code: Alles auswählen


if 
(defined('IN_PHPBB')) then
{
    $self = $request->server('PHP_SELF');
}
 
else
{
    $self = $_SERVER["PHP_SELF"];
}
 

weiter unten ersetzt du dann die Superglobale durch $self
Grüße, canonknipser
"there are only 10 types of people: those, who understand binary and those, who don't"
just arrived ;) - Bilder
Kein Support via PN, nur im Board und (manchmal) im IRC

ralfE
Mitglied
Beiträge: 9
Registriert: 31.12.2018 19:22

Re: [3.2] PHP Includes

Beitragvon ralfE » 04.01.2019 17:48

Hallo zusammen,

ich muss irgendeinen blöden Fehler gemacht haben. Die Einstellung core.disable_super_globals: false in der parameters.yml zieht jetzt doch!

Damit ist das Problem für mich gelöst! :grin:

Sorry für den vielen Wind um Nichts! :o


Zurück zu „Support-Forum“