SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

TYPO3 Kochbuch

TYPO3 Kochbuch zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 27.01.2015, 15:35:30
Auf der Mauer Auf der Mauer ist offline
Anfänger
 
Registriert seit: Jun 2009
Alter: 42
Beiträge: 119
Geltungsbereich von Variablen

Hallo,

PHP-Code:
    //--- include framework.php
        
require_once('./core/framework.php');

    
//--- load requested page
        
function loadPage ($pagename) {
            include(
'./pages/'.$pagename.'.php');
        }
        
        if (isset(
$_GET['go']) AND !empty($_GET['go'])) {
            
loadPage(basename($_GET['go']));
        } 
Die Funktion enthält natürlich alle Sicherheitsfunktionen
zum einbinden von Dateien. (Validierung, whitelist usw)
So wie es jetzt hier steht wäre es ja auch sehr unsicher.
Wurde aber alles weggelassen, denn darum geht es nicht.

Wenn jetzt in der "framework.php" Datei z.B. folgendes steht.

PHP-Code:
    //--- something stupid
        
$var 1
Dann kann ich in der inkludierten Seite nicht auf diesen Wert
zugreifen. Weil die inkludierte Seite über eine Funktion eingebunden wird.

PHP-Code:
    echo $var// $var existiert nicht 
Ich könnte jetzt:

A: Anstelle der Variable eine Konstante benutzen, diese wäre innerhalb
der Funktion aufrufbar.

B: Die benötigten Variablen der Funktion als Parameter übergeben.

C: Die benötigten Variablen mittels global verfügbar machen.

D: Die framework.php zusammen mit der Seite inkludieren.

Letzteres empfinde ich nicht als sehr sauber, da immer derselbe Code eingefügt
werden muss.

Der Auffbau bei mir läuft ausschließlich über die "index.php" Datei, wobei
die einzelnen Seiten über den Parameter "go" aufgerufen werden.

www.seite.de?go=about

Das Verzeishnis ist zugriffsgeschützt, ein direktes Aufrufen der Dateien ist nicht möglich.

In der "index.php" Datei befindet sich jetzt quasi nur der include von "framework.php"
sowie die funktion zum einbinden von Dateien. Natürlich wollte ich dass die Inhalte
der "framework.php" in den inludierten Dateien zur Verfügung stehen.

In der framework.php kommen folgende Sachen vor.

ini_set
session_start
define
header
error_reporting
set_locale
date_default_timezone_set
spl_autoload_register
einige Variablen

Meine Fragen sind:
1. Welcher der obigen Wege (A - D) ist besser geeignet um das Problem zu beheben?
2. Welche Werte außer Variablen stehen in der Funktion ebenfalls nicht zur Verfügung?
3. Wird die Funktion "loadPage" erst eingelesen wenn sie aufgerufen wird?

Gruß
Auf Der Mauer

Geändert von Auf der Mauer (27.01.2015 um 15:50:14 Uhr)
Mit Zitat antworten
  #2  
Alt 27.01.2015, 16:20:42
sysop sysop ist offline
Member
 
Registriert seit: Mar 2004
Ort: wien
Beiträge: 512
AW: Geltungsbereich von Variablen

Sessions-Variablen bieten sich hier geradezu an, zumal sie bereits als Superglobale definiert sind.
http://us1.php.net/manual/de/reserve...es.session.php
__________________
Gruss sys ;-)
Ich möchte wie mein Grossvater sterben, lächelnd und schlafend, nicht schreiend und weinend, wie sein Beifahrer.
Mit Zitat antworten
  #3  
Alt 27.01.2015, 16:51:17
Auf der Mauer Auf der Mauer ist offline
Anfänger
 
Registriert seit: Jun 2009
Alter: 42
Beiträge: 119
AW: Geltungsbereich von Variablen

Hallo Sysop,

danke für deine Antwort. Daran habe ich auch schon gedacht,
kommt mir aber ein bisschen so vor wie mit Kanonen auf Spatzen
zu schießen. Es könnte sich dabei auch um eine außerordentliche
Zweckentfremdung handeln.

Ich denke mein ganzer Aufbau ist mies und einfach schlecht durchdacht.

Ist das System richtig aufgebaut, dann gibt es solche Ärgernisse
wie ich sie jetzt habe erst garnicht. Die Dateien innerhalb einer
Funktion zu inkludieren ist wahrscheinlich schon totaler Käse.

Wenn ich aus der "loadPage" eine "checkPage" Funktion mache,
die lediglich true oder false zurückgibt, dann kann eine entsprechende
Datei außerhalb der Funktion eingebunden werden. Dann stehen auch
automatisch alle Werte aus anderen Dateien zur Verfügung.

So in etwa:

PHP-Code:
    //--- include framework.php
        
require_once('./core/framework.php');

    
//--- check requested page
        
function checkPage ($pagename) {
            
//--- if page ok
                 
return true;
            
//--- if page not ok
                 
return false;
        }
        
        if (isset(
$_GET['go'])) {
            if (
checkPage($_GET['go'])) {
            
//--- include requested page
                
include('./pages/'.$_GET['go'].'.php');
            } else {
            
//--- include main page
                
include('./pages/home.php');
            }
        } 
Gruß
Auf der Mauer

Geändert von Auf der Mauer (27.01.2015 um 17:20:07 Uhr)
Mit Zitat antworten
  #4  
Alt 27.01.2015, 19:20:17
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
AW: Geltungsbereich von Variablen

$_SESSION halte ich auch für unangemessen!
Denn schließlich ist die Variable Request bezogen.
Einen unmittelbaren Bezug zur Sitzung sehe ich nicht.

Ansonsten stimme ich dir erstmal zu!
Wege A bis D sind unglücklich.

Irgendwie musst du die Variable in die View bekommen....
Also beim Aufruf übergeben!
(würde ich mal so sagen)
Mit Zitat antworten
  #5  
Alt 28.01.2015, 11:21:10
sysop sysop ist offline
Member
 
Registriert seit: Mar 2004
Ort: wien
Beiträge: 512
AW: Geltungsbereich von Variablen

So ganz verstehe ich die Notwendigkeit der Funktion sowieso nicht, es sei denn, du willst da noch etwas prüfen und einiges an Code einpflegen.
Die Funktion kannst du dir (genau so wie sie oben steht) eigentlich ersparen.

PHP-Code:

        
if (isset($_GET['go']) AND !empty($_GET['go'])) {
            include(
'./pages/'.basename($_GET['go']).'.php');
        } 
Prüfungen auf Vorhandensein der Seite kannst du da auch machen.

PHP-Code:

if (isset($_GET['go']) AND !empty($_GET['go'])) 
{
  if(
file_exists('./pages/'.basename($_GET['go']).'.php'))
  { 
     include(
'./pages/'.basename($_GET['go']).'.php');
  }
  
// elseif(......


__________________
Gruss sys ;-)
Ich möchte wie mein Grossvater sterben, lächelnd und schlafend, nicht schreiend und weinend, wie sein Beifahrer.
Mit Zitat antworten
  #6  
Alt 28.01.2015, 19:32:19
Auf der Mauer Auf der Mauer ist offline
Anfänger
 
Registriert seit: Jun 2009
Alter: 42
Beiträge: 119
AW: Geltungsbereich von Variablen

Hallo,

natürlich enthält die Funktion code zur Validierung.
Ich habe ja geschrieben, dass ich es hier weglasse, weil
es nicht darum geht.

Dass es auch ohne Funktion geht ist auch klar, würde auch mein
Problem beheben. Es geht mir aber darum, dass ich den Code
des Projektes gerne strukturiere.

Eine Funktion im Unterordner functions, deren Aufgabe es ist
Seitenanfragen zu überprüfen und Seiten je nach Bedarf zu laden
erscheint mir sauber und übersichtlich.

Naja ich hatte oben schon einen möglichen Lösungsweg vorgeschlagen.
Es reicht wenn die Funktion nach Übeprüfung true oder false zurückgibt,
dann kann die zu inkludierende Seite außerhalb der Funktion eingebunden
werden und kann so auch auf Variablen zugreifen, die woanders deklariert
wurden.

PHP-Code:
if (checkPage($_GET['go']) === true) {
//--- requested page ok
    
include('./pages/'.$_GET['go'].'.php');
} else {
//--- requested page not ok
   
include('./pages/home.php');

Was mir nicht gefällt ist, dass in Zeile 3 wieder mit dem Get Parameter
gearbeitet wird. Sicher wird dieser Teil nur dann ausgeführt wenn der
Parameter in Ordnung ist. Die Funktion filtert den Eingang, vergleicht
mit einer Whitelist und überprüft auch die Existens der Datei.

Erst wenn die Datei inkludiert werden darf und auch existiert wird sie eingebunden.

Dennoch innerhalb der Funktion würde der Include mit dem gesäuberten
Wert arbeiten und nicht mit dem GET Parameter.

Wenn GET Wert und Whitelist Wert übereinstimmen, dann nimmt meine Funktion
den Whitelist Wert!

Gruß
Auf der Mauer
Mit Zitat antworten
  #7  
Alt 29.01.2015, 11:18:53
sysop sysop ist offline
Member
 
Registriert seit: Mar 2004
Ort: wien
Beiträge: 512
AW: Geltungsbereich von Variablen

Hallo

Wenn es um Struktur geht, könntest du statt der Funktion auch eine eigene Datei (z.B. verify_includes.php) includen, die die Aufgaben übernimmt, dort stünden dir dann alle Variablen zur Verfügung.
So mache ich das übrigens für gewöhnlich. Verifikationen in einer Funktion halte ich persönlich für problematisch, weil man nie weiss, was noch im Laufe des codens alles dazu kommt und eine Funktion umzuarbeiten ist je nach Grösse der Funktion, wie ich finde, immer etwas heikles.

Nur mal so am Rande, ich bewerte deinen Aufbau nicht, ich versuche nur dir dabei zu helfen, eine Lösung für dein Problem zu finden. Dein Vorhaben schränkt die Auswahl aber leider ein. Offenbar haben einige Coder aber ihre eigenen festen Ansichten, wie etwas zu erledigen ist. Ich bin da wesentlich offener.

Was SESSIONS angeht, und wenn ich nur eine einzige Sessions-Variable verwende, ist das für mich kein Schuss mit einer Kanone auf Spatzen. Sessions sind schön und einfach zu handhaben, leicht zu löschen und nehmen mir viel Aufwand im Code ab. Man muss sich nur bewusst sein, was man da macht. PHP ist es doch vollkommen egal, ob du nun Sessions-Variablen verwendest oder nicht.

Für mich klingt das ein bisschen so, als würde man sein Auto nie in den fünften Gang schalten um ihn zu schonen.

Vielleicht sehe ich das ja auch falsch, dann würde ich bitten, mir das zu erklären, so ein Profi bin ich dann auch wieder nicht.

PS
Übergabe Variablen sollte man doch sowieso immer verifizieren, das ist doch eine Basis-Grundlage für alle Scripte. Belege eine neue Variable mit deinem $_GET, prüfe dann diese Variable und verarbeite sie weiter und vergiss das $_GET im Rest des Scripts.
Wieder etwas, wozu man Sessions wunderbar gebrauchen kann, zumal man leicht dafür sorgen kann, dass sie beim Schliessen des Browsers entfernt werden.
__________________
Gruss sys ;-)
Ich möchte wie mein Grossvater sterben, lächelnd und schlafend, nicht schreiend und weinend, wie sein Beifahrer.
Mit Zitat antworten
  #8  
Alt 29.01.2015, 12:00:37
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
AW: Geltungsbereich von Variablen

Zitat:
Vielleicht sehe ich das ja auch falsch, dann würde ich bitten, mir das zu erklären, so ein Profi bin ich dann auch wieder nicht.
Ein wirklicher Profi bin ich auch nicht.
Habe mir aber im laufe der Zeit ein Häufchen fundiertes Halbwissen zugelegt.

Auf diesen konkreten Fall bezogen:
"Auf der Mauer" hat ein Code Strickmuster entwickelt.
Und jetzt bekommt er Probleme mit einer Variablen.
So wie ich das sehe, möchte er diese Variable von Funktion zu Funktion übergeben.
Und das innerhalb eines Request Zyklus.
Sessions sind dafür zuständig, Daten Request übergreifend zu halten.
Das ist hier weder erwünscht, noch nötig.

Zitat:
Für mich klingt das ein bisschen so, als würde man sein Auto nie in den fünften Gang schalten um ihn zu schonen.
Für mich klingt das so, als hätte man einen Code Design Fehler begangen.
Vergleichbar: Einen Hammer als Stehlampe missbraucht.
Und jetzt muss ein Nagel in die Wand....
Dann baut man eben einen Kolben aus dem Auto und trommelt damit den Nagel rein.
Also nix gegen den 5ten Gang! Auf der Dosenbahn alle male sinnvoll.
In 30er Zone, auf der Spielstraße, eher nicht.
Also klar, man sollte man im 5ten Gang fahren, wenn denn die Drehzahlen plausibel sind.


Ich weiß, nicht alles was hinkt, ist ein Vergleich ....
Aber: Eine Session hat höchst spezifische Aufgaben.
Und diese sollte man ihr gönnen (und sich darauf beschränken).
Alles andere verstößt gegen das Prinzip der geringsten Verwunderung.


Meiner bescheidenen Ansicht nach ist das Vorhaben, Variablen per Session zwischen Programmteilen eines Requestes zu transportieren, ein dirty Hack, welcher auf Grund eines unzureichenden Code Designs notwendig erscheint.
Dirty Hacks rächen sich (irgendwann).
Man lernt das falsche.
(wer einmal begriffen hat, wie ein Hammer funktioniert, für den sieht alles plötzlich wie ein Nagel aus)


Was keinen Deut besser ist: (also ein falscher Tipp)
Wenn Variablen globalisiert werden müssen, dann sollte man das tun!
Und nicht Sessions dafür missbrauchen, nur um das global Schlüsselwort einzusparen. Weil irgend einer gesagt hat "global ist böse". (und das stimmt, global ist böse)

Ich halte es für viel sinnvoller die Programmstruktur nochmal zu überdenken.

MVC Design Pattern:
In der Regel bekommt die View vom Controller alle nötigen Daten.

Template Engines: (dutzende gibts davon)
Viele bekommen ihre Daten per Array übergeben.

Dann gibts noch das Dependency Injection Design Pattern. Auch dieses mag hier Sinn machen.


Zukunftsaussicht:
Es werden demnächst noch mehr Variablen diesen Weg gehen. Und schon wird ein dirty Hack zum Prinzip verklärt/erhoben.


Vielleicht bin ich auch zu pingelig.....
Aber ich bin selber schon in solche Fallen getappt.....
Und sie haben sich gerächt.
Mit Zitat antworten
  #9  
Alt 29.01.2015, 13:19:05
Auf der Mauer Auf der Mauer ist offline
Anfänger
 
Registriert seit: Jun 2009
Alter: 42
Beiträge: 119
AW: Geltungsbereich von Variablen

Hallo,

kann ich gut nachvollziehen, macht Sinn.
Von einem Designfehler bin ich ja auch schon ausgegangen.
Zum jetzigen Zeitpunkt aber kein Problem, da noch gut korrigierbar.

Es handelt sich ja nicht um eine fehlende Variable, sondern um mehrere.

PHP-Code:

//--- framework.php enthält.
$var1 "irgendwas";
$var2 2;
$var3 true
Alle Variablen stehen in einer Seite die über eine Funktion inkludiert wurde nicht zur Verfügung.
Diese mittels global reinzuholen gefällt mir aufgrund der Menge nicht.
Wird der "framework.php" später noch ein Eintrag hinzugefügt, dann
müßte er auch ind er Funktion mittels global zur Verfügung gestellt werden.
Zumal eine weitere Frage oben ja auch war wie es sich mit anderen Dingen
verhält die ebenfalls in der "framework.php" stehen.

ini_set
session_start
define
header
error_reporting
set_locale
date_default_timezone_set
spl_autoload_register

Wäre es nicht eine saubere Angelegenheit, wenn ich eine Klasse schreibe?
Eine Methode säubert den input, eine überprüft den Wert und gibt true oder false zurück.
Die zu inkludierende Seite wird ausßerhalb der Funktion aufgerufen und alle Variablen
aus der "framework.php" stehen zur Verfügung.

PHP-Code:

class page {

    public static function 
sanitize ($pagename) {
        
//--- sanitize parameter
    
}
    public static function 
validate ($pagename) {
            
//--- validate page
    
}
}

if (isset(
$_GET['go'])) {
    
$pagename page::sanitize($_GET['go']);

    if (
page::validate($pagename) === true) {
        include(
'./pages/'.$pagename.'.php');

        
/**
         *   Wird ausgefüfhrt wenn:
         *   + url Parameter ok.
         *   + Seite in whitelist steht
         *   + Seite im Dateisystem existiert 
        **/

    
} else {
        include(
'./pages/home.php');

        
/**
         *  Wird ausgeführt wenn:
         *  + Parameter nicht ok oder fehlt
         *  + Seite nicht in whitelist steht
         *  + Seite im Dateisystem nicht (mehr) existiert
        **/

    
}

Gruß
Auf der Mauer
Mit Zitat antworten
  #10  
Alt 29.01.2015, 15:47:04
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
AW: Geltungsbereich von Variablen

Zitat:
Zum jetzigen Zeitpunkt aber kein Problem, da noch gut korrigierbar.
Das ist gut!


Zitat:
Es handelt sich ja nicht um eine fehlende Variable, sondern um mehrere.
Darum verwenden viele Templateengines Arrays...

Zitat:
Wird der "framework.php" später noch ein Eintrag hinzugefügt, dann
müßte er auch ind er Funktion mittels global zur Verfügung gestellt werden.
Ein, oder mehrere zusätzliche, Arrayeinträge.

Zitat:
Zumal eine weitere Frage oben ja auch war wie es sich mit anderen Dingen
verhält die ebenfalls in der "framework.php" stehen.
Die würden sich bei mir in der index.php befinden.
Außer: define und header

Auf Konstanten verzichte ich.
Der Header kann erst gesendet werden, wenn klar ist, welche Ausgabe stattfindet.


Zitat:
Wäre es nicht eine saubere Angelegenheit, wenn ich eine Klasse schreibe?
Ja, aber nicht so...
Pro Klasse eine klar definierte Aufgabe!
Versuche nach Möglichkeit auf statische Dinge zu verzichten, die sind ähnlich böse wie globale Dinge.
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
variablen werden nicht übergeben clueless PHP Grundlagen 10 12.02.2007 11:12:12
Session Variablen / Session lifetime morsche PHP Grundlagen 4 14.10.2005 16:45:38
Session, NEED HELP Variablen wech^^ Thunder PHP Grundlagen 1 14.11.2003 09:38:31
Variablen an Formular, von Formular plus neue Variablen an Dokument Alf PHP für Fortgeschrittene und Experten 2 01.12.2002 18:10:09
Variablen aus Session auslesen septicus PHP für Fortgeschrittene und Experten 7 01.03.2002 00:42:32


Alle Zeitangaben in WEZ +2. Es ist jetzt 09:53:33 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt