Empfehle mal grundlegendes nachzulesen:
PHP: Variablen - Manual
DEFINE funktioniert nicht
Einklappen
X
-
Ein Gast antwortete
-
@fireweasel
Wie immer ein kompetente, hilfreiche und gut erklärte Antwort!
Sowas hilft mir sehr gut weiter, jetzt habe ich die sache tatsächlich erklärt.
Ein dickes Dankeschön an dich!
Aber da wäre noch was:
Kann ich define praktisch wie eine $_SESSION einsetzen, nur das DEFINE nur einmal definiert werden kann, nicht geändert und nicht gelöscht werden kann.
DEFINE ist ja auf jeder seite verfügbar wenn es einmal definiert wurde...eine $_SESSION könnte man ja uU verlieren falls der user in der zwischenzeit an seinen cookies rumspielt....der inhalt/wert von DEFINE wird doch auf dem server gespeichert oder etwa auch in cookies beim client?
ich würde define nehmen um den pfad + dateiname festzulegen, damit ich von überall auf die datei zugreifen kann.
Einen Kommentar schreiben:
-
Der Film war doch völlig unrealistisch!Zitat von RamonaS Beitrag anzeigenErinnert mich an den Film mit Michel Duglas und demie Moore, da bekamm der Michel immer eMail mit:
...löße das problem! :-)
In diesem Forum gibt es auch keinen Professor Arthur C. Friend, der mal kurz auf Auslandsreise ist, und dessen E-Mail-Account man so einfach missbrauchen könnte ...
Hier "navigierst" du im Dateisystem des Webservers umher.Ich möchte z.B. auf den unterordnerr domainname.de/icons zugreifen, aus jedem php-script.
Falls du aber im vom Script ausgegebenen HTML (bleistiftsweise) eine Grafikdatei "referenzieren" willst, befindest du dich im HTTP-Umfeld. Die "HTML-Seite" "sieht" den Server praktisch nur von außen.
Ich mach mal ein Beispiel, ein Beispiel.
Absolute Pfade:
"example.org" ist der Domain-Name deines Servers. Alles, was danach kommt schimpft sich "request uri", lässt sich durch Anzapfen von $_SERVER['REQUEST_URI'] in Erfahrung bringen und kann (muss aber nicht) einen Pfad zu einem PHP-Script darstellen.Code:HTTP/HTML: http://example.org/script.php http://example.org/anderes_script.php http://example.org/icons/grafik.gif
Unter Windoze denken wir uns noch ein "C:" oder einen anderen Laufwerksbuchstaben vor den absoluten Dateisystempfad.Code:Dateisystem: /document_root/www/script.php /document_root/www/anderes_script.php /document_root/www/icons/grafik.gif
Um jetzt in der "script.php" ein anderes Script per include(), require() usw. einzubinden, musst du den Dateisystempfad benutzen:
Gleiches gilt, wenn du die Grafik-Datei im PHP-Script benutzen möchtest (zum Beispiel mit den image-Funktionen):Code:absolut: /www/anderes_script.php relativ (Kurzform): anderes_script.php relativ: ./anderes_script.php
Anders sieht es aus, wenn der Browser der das vom Script erzeugte HTML darstellt, darin per <img src="" ...> oder <a href="" ...> eingebundene Grafiken vom Server holen soll[1]:Code:absolut: /www/icons/grafik.gif relativ (Kurzform): icons/grafik.gif relativ: ./icons/grafik.gif
[1] ... oder auch Frames, CSS-, JavaScript-Dateien, Favicons, und weiß-der-Geier-was sonst noch alles. Guckst du auch hier:Code:absolut: http://example.org/icons/grafik.gif relativ: icons/grafik.gif "server-relativ": /icons/grafik.gif
http://de.selfhtml.org/html/allgemein/referenzieren.htm
In deinem oben angegebenen Script dürfte es genügen, $_SERVER['DOCUMENT_ROOT'] aus dem Pfad zu entfernen, weil du ihn fürs Referenzieren in HTML verwenden möchtest. Also statt:
nur:PHP-Code:// den case-insensitive-Murks lassen wir auch weg
if (!defined("pfad")) {
define('pfad', $_SERVER["DOCUMENT_ROOT"] . "/shop/");
}
oder im "guten Stil":PHP-Code:if (!defined("pfad")) {
define('pfad', '/shop/');
}

Wobei ich diese Konstante aber nur einmal definieren würde -- in dem Script, das alle anderen Scripts aufruft. Dann könnte das "if (defined())" wegfallen.PHP-Code:if (!defined('HTML_REF_PATH')) {
define('HTML_REF_PATH', '/shop/');
}
Das kommt daher, weil der Feuerfuchs in der HTML-Datei einen absoluten URL-Pfad nach "c:/dumm/di/dumm/shop/irgendwas.endung" findet. "c:" interpretiert er als Protokoll-Schema, so wie er "http:" oder "mailto:" interpretieren würde. Nur leider kennt er kein "C"-Protokoll. Mit einem relativen Pfad wäre das nicht passiert.# aber Firefox meldet:
Firefox weiß nicht, wie diese Adresse geöffnet werden soll,
da das Protokoll (c) mit keinem Programm verknüpft istZuletzt geändert von fireweasel; 15.07.2009, 16:37.
Einen Kommentar schreiben:
-
Und die wiederum gibt es aber an zwei Stellen:Zitat von RamonaS Beitrag anzeigenIch erinnere mich das es 2 sachen gibt:
1. Absoluter Pfad
2. Relativer Pfad
Einmal im Dateisystem des Servers, auf dem du dich bewegst - und einmal im Umfeld von HTTP. Mach dir klar, warum das zwei verschiedene Dinge sind.
Einen Kommentar schreiben:
-
Der Fall ist nicht einfach zu entscheiden!Ihr schreibt da wirklich alle FALSE, TRUE und NULL? Kann ich mir irgendwie nicht vorstellen.
Ich schreibe sie groß.
Die PHP Doku empfiehlt diese klein zu schreiben. Weil das Parsen des Quellcodes dann einen Hauch schneller geht.
Einen Kommentar schreiben:
-
Stilfragen liegen im Auge des Betrachters. Mir kommt es darauf an, welchen Nutzen ich daraus ziehe. Der kann bei Großbuchstaben genauso vorhanden sein, wie bei Kleinbuchstaben (oder irgendwelchen anderen Zeichen, mit denen der C-Präprozessor nicht klarkommt).Zitat von h3ll Beitrag anzeigenNein, das ist einfach guter Programmierstil.
Ich weiß ja nicht, in welcher Sprache man fit sein muss, um bei dir in der Firma mitarbeiten zu dürfen, aber gehen wir einfach davon aus, dass es sich auch um PHP handelt. Ihr schreibt da wirklich alle FALSE, TRUE und NULL? Kann ich mir nicht vorstellen.Wenn du das bei uns in der Firma machen würdest, würdest du schnell eine auf den Deckel bekommen. Und ich denke viele andere Firmen werden das genauso handhaben.
Falls nicht: Warum wird in den drei Fällen eine Ausnahme von der eisernen Regel gemacht? Ist doch irgendwie unlogisch ...
Und der Satz "... in PHP schreibe ich Konstanten-Namen mit den Zeichen, die mir passend erscheinen." kann viel bedeuten, unter Anderem auch, dass ich in der Lage bin, mich nach Vorgaben "von oben" zu richten.
Zuletzt geändert von fireweasel; 15.07.2009, 12:57.
Einen Kommentar schreiben:
-
Nein, das ist einfach guter Programmierstil.Zitat von fireweasel Beitrag anzeigenDas ist eine Konvention in armseligen Sprachen wie C[1]
Wenn du das bei uns in der Firma machen würdest, würdest du schnell eine auf den Deckel bekommen. Und ich denke viele andere Firmen werden das genauso handhaben.Zitat von fireweasel Beitrag anzeigenin PHP schreibe ich Konstanten-Namen mit den Zeichen, die mir passend erscheinen.
Einen Kommentar schreiben:
-
Erinnert mich an den Film mit Michel Duglas und demie Moore, da bekamm der Michel immer eMail mit:Zitat von combie Beitrag anzeigenDa hast du deine 2 paar Schuhe!
Trenne sie!
...löße das problem! :-)
Och mann-o, ich dachte das forum sei dafür geschaffen :-)Nix da!
Einen Kommentar schreiben:
-
Du suchst höchstwahrscheinlich nach dem WWW-Root-Verzeichnis. Das kann auch unterhalb des Document-Root-Pfades liegen. Um diesen Pfad zu "berechnen", kann man die beiden $_SERVER-Variablen SCRIPT_NAME und SCRIPT_FILENAME missbrauchen. Irgendwo hatte ich da noch ein passendes Script in der Restekiste:Zitat von RamonaSIch möchte den absoluten pfad zum root ermitteln, egal auf welcher domain das script läuft und auch ob es über localhost läuft.
Ich möchte z.B. auf den unterordnerr domainname.de/icons zugreifen, aus jedem php-script.
Welche möglichkeit würdet ihr mir empfehlen?
Nicht von dem preg_match()-Konstrukt verwirren lassen: Das schnippelt einfach SCRIPT_NAME hinten von SCRIPT_FILENAME ab, und übrig bleibt der absolute Pfad. Geht sicher auch anders zu lösen.PHP-Code:// returns the www root dir
function www_root() {
static $www_root = NULL;
if (NULL !== $www_root) {
return $www_root;
}
// extracting the www_root
preg_match(
'/.+(?='. preg_quote($_SERVER['SCRIPT_NAME'], '/'). '\z)/i',
$_SERVER['SCRIPT_FILENAME'],
$hits
);
$www_root = isset($hits[0][0]) ? $hits[0] : FALSE;
return $www_root;
}
Der Teil mit dem "static" dient auch nur dazu, den einmal errechneten Pfad zwischenzuspeichern, damit das nicht bei jedem Funktionsaufruf wieder neu gemacht werden muss.
Das ist eine Konvention in armseligen Sprachen wie C[1] -- in PHP schreibe ich Konstanten-Namen mit den Zeichen, die mir passend erscheinen. Wenn man nur mit define() und defined() arbeitet (warum auch immer), kann man sogar die Beschränkung auf Buchstaben, Unterstrich und Ziffern ignorieren.Zitat von combie Beitrag anzeigenPS:
Konstanten schreibt man IMMER groß!
Das Verwenden von Kleinbuchstaben hat den Vorteil, dass eigene Konstanten-Namen nicht mit anderen kollidieren (so lange nicht alle PHP-Scripts Namespaces oder Klassenkonstanten verwenden).
----
[1] Wenn ich mich nicht irre, war das nichtmal C sondern wurde (wird) vom Präprozessor interpretiert.Zuletzt geändert von fireweasel; 15.07.2009, 12:10.
Einen Kommentar schreiben:
-
Da hast du deine 2 paar Schuhe!inludes, und icon-bilder immer von ihrem festen pfad aufrufen,
Trenne sie!
Nix da!Da mußt du jetzt mit mir einen kurzen Lehrgang machen
Einen Kommentar schreiben:
-
@combie
Da mußt du jetzt mit mir einen kurzen Lehrgang machen :-)
Ich erinnere mich das es 2 sachen gibt:
1. Absoluter Pfad
2. Relativer Pfad
Also ich möchte:
1.
inludes, und icon-bilder immer von ihrem festen pfad aufrufen, die scripte die das aufrufen sind in verschiedenen pfadebenen.
2.
Bilder (zb aus ner gallerie) an den Clientbrowser schicken
Da brauche ich also 2 verschiedene server_variablen.
Welche soll ich da nehmen.
Danke für deine Hilfe
Einen Kommentar schreiben:
-
Den: DOCUMENT_ROOTaus jedem php-script.....
Welche möglichkeit würdet ihr mir empfehlen?
Aber diesen darfst du nicht zum Browser senden.
Du vermischt hier also 2 völlig verschiedenen Probleme.
PS:
Konstanten schreibt man IMMER groß!
Das true ist da also überflüssig.Zuletzt geändert von combie; 15.07.2009, 09:50.
Einen Kommentar schreiben:
-
Aja gut zu wissen...ich habe bisher immer mit $_SERVER["DOCUMENT_ROOT"] auf den root zugegriffen.
Ich habe jetzt folgende 4 möglichkeiten gefunden:
Ich möchte den absoluten pfad zum root ermitteln, egal auf welcher domain das script läuft und auch ob es über localhost läuft.PHP-Code:echo "<br />".$_SERVER['HTTP_HOST']; # Online: domainname.de Über Localhost: localhost
echo "<br />".$_SERVER['SERVER_NAME']; # Online: domainname.de Über Localhost: localhost
echo "<br />".$_SERVER['SERVER_ADDR']; # Online: IP-Adresse Über Localhost: 127.0.0.1
echo "<br />".$_SERVER['DOCUMENT_ROOT']; # Online: /var/www/web420/html Über Localhost: C:/xampplite/htdocs
Ich möchte z.B. auf den unterordnerr domainname.de/icons zugreifen, aus jedem php-script.
Welche möglichkeit würdet ihr mir empfehlen?
Einen Kommentar schreiben:
-
Der DOCUMENT_ROOT enthält keinen Pfad für deine Seite sondern einen Dateipfad, hat im HTML also nix verloren. Unter Windows ist das irgendwas in der Form C:\x\y\z und das Protokoll C kennt der Firefox dann natürlich nicht. Lass dir das $_SERVER-Array mal ausgeben und such dir einen anderen, passenden Wert raus.
Einen Kommentar schreiben:
-
DEFINE funktioniert nicht
Hallo,
Im Kopfbereich jeder Seite habe ich folgende konstante definiert:
Was mache ich da falsch?PHP-Code:if(!defined("pfad")){define('pfad',$_SERVER["DOCUMENT_ROOT"]."/shop/",true);}
# weiter unten im script möchte ich diese konstante nutzen
$navl[]=array(pfad."kleider/index.php","Hosen","");
# aber Firefox meldet:
Firefox weiß nicht, wie diese Adresse geöffnet werden soll,
da das Protokoll (c) mit keinem Programm verknüpft ist
Ich möchte per define den pfad für alle scripte festlegen, da sich dieser auch nicht mehr ändern tut.Stichworte: -
Einen Kommentar schreiben: