php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 1,00 durchschnittlich.
  #1 (permalink)  
Alt 15-07-2009, 09:00
RamonaS
 Registrierter Benutzer
Links : Onlinestatus : RamonaS ist offline
Registriert seit: Mar 2009
Beiträge: 177
RamonaS zeigte ein beschämendes Verhalten in der Vergangenheit
Standard DEFINE funktioniert nicht

Hallo,

Im Kopfbereich jeder Seite habe ich folgende konstante definiert:
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ß nichtwie diese Adresse geöffnet werden soll,
da das Protokoll (cmit keinem Programm verknüpft ist 
Was mache ich da falsch?

Ich möchte per define den pfad für alle scripte festlegen, da sich dieser auch nicht mehr ändern tut.
Mit Zitat antworten
  #2 (permalink)  
Alt 15-07-2009, 09:08
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

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.
Mit Zitat antworten
  #3 (permalink)  
Alt 15-07-2009, 10:42
RamonaS
 Registrierter Benutzer
Links : Onlinestatus : RamonaS ist offline
Registriert seit: Mar 2009
Beiträge: 177
RamonaS zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Aja gut zu wissen...ich habe bisher immer mit $_SERVER["DOCUMENT_ROOT"] auf den root zugegriffen.

Ich habe jetzt folgende 4 möglichkeiten gefunden:
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 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?
Mit Zitat antworten
  #4 (permalink)  
Alt 15-07-2009, 10:48
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
aus jedem php-script.....
Welche möglichkeit würdet ihr mir empfehlen?
Den: DOCUMENT_ROOT
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.
__________________
Wir werden alle sterben

Geändert von combie (15-07-2009 um 10:50 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 15-07-2009, 10:54
RamonaS
 Registrierter Benutzer
Links : Onlinestatus : RamonaS ist offline
Registriert seit: Mar 2009
Beiträge: 177
RamonaS zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

@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
Mit Zitat antworten
  #6 (permalink)  
Alt 15-07-2009, 11:15
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
inludes, und icon-bilder immer von ihrem festen pfad aufrufen,
Da hast du deine 2 paar Schuhe!
Trenne sie!


Zitat:
Da mußt du jetzt mit mir einen kurzen Lehrgang machen
Nix da!
__________________
Wir werden alle sterben
Mit Zitat antworten
  #7 (permalink)  
Alt 15-07-2009, 12:51
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 851
fireweasel wird schon bald berühmt werdenfireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard

Zitat:
Zitat von RamonaS
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.
Ich möchte z.B. auf den unterordnerr domainname.de/icons zugreifen, aus jedem php-script.

Welche möglichkeit würdet ihr mir empfehlen?
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:

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;

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.

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.

Zitat:
Zitat von combie Beitrag anzeigen
PS:
Konstanten schreibt man IMMER groß!
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.
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.

Geändert von fireweasel (15-07-2009 um 13:10 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 15-07-2009, 12:51
RamonaS
 Registrierter Benutzer
Links : Onlinestatus : RamonaS ist offline
Registriert seit: Mar 2009
Beiträge: 177
RamonaS zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Zitat:
Zitat von combie Beitrag anzeigen
Da hast du deine 2 paar Schuhe!
Trenne sie!
Erinnert mich an den Film mit Michel Duglas und demie Moore, da bekamm der Michel immer eMail mit:
...löße das problem! :-)


Zitat:
Nix da!
Och mann-o, ich dachte das forum sei dafür geschaffen :-)
Mit Zitat antworten
  #9 (permalink)  
Alt 15-07-2009, 12:55
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.576
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von fireweasel Beitrag anzeigen
Das ist eine Konvention in armseligen Sprachen wie C[1]
Nein, das ist einfach guter Programmierstil.

Zitat:
Zitat von fireweasel Beitrag anzeigen
in PHP schreibe ich Konstanten-Namen mit den Zeichen, die mir passend erscheinen.
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.
Mit Zitat antworten
  #10 (permalink)  
Alt 15-07-2009, 13:48
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 851
fireweasel wird schon bald berühmt werdenfireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard

Zitat:
Zitat von h3ll Beitrag anzeigen
Nein, das ist einfach guter Programmierstil.
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:
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.
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.

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.

Geändert von fireweasel (15-07-2009 um 13:57 Uhr)
Mit Zitat antworten
  #11 (permalink)  
Alt 15-07-2009, 13:54
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
Ihr schreibt da wirklich alle FALSE, TRUE und NULL? Kann ich mir irgendwie nicht vorstellen.
Der Fall ist nicht einfach zu entscheiden!
Ich schreibe sie groß.


Die PHP Doku empfiehlt diese klein zu schreiben. Weil das Parsen des Quellcodes dann einen Hauch schneller geht.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #12 (permalink)  
Alt 15-07-2009, 14:20
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von RamonaS Beitrag anzeigen
Ich erinnere mich das es 2 sachen gibt:
1. Absoluter Pfad
2. Relativer Pfad
Und die wiederum gibt es aber an zwei Stellen:

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.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #13 (permalink)  
Alt 15-07-2009, 17:19
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 851
fireweasel wird schon bald berühmt werdenfireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard

Zitat:
Zitat von RamonaS Beitrag anzeigen
Erinnert mich an den Film mit Michel Duglas und demie Moore, da bekamm der Michel immer eMail mit:
...löße das problem! :-)
Der Film war doch völlig unrealistisch!

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 ...

Zitat:
Ich möchte z.B. auf den unterordnerr domainname.de/icons zugreifen, aus jedem php-script.
Hier "navigierst" du im Dateisystem des Webservers umher.

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:
Code:
HTTP/HTML: 
  http://example.org/script.php   
  http://example.org/anderes_script.php   
  http://example.org/icons/grafik.gif
"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:
Dateisystem: 
  /document_root/www/script.php
  /document_root/www/anderes_script.php   
  /document_root/www/icons/grafik.gif
Unter Windoze denken wir uns noch ein "C:" oder einen anderen Laufwerksbuchstaben vor den absoluten Dateisystempfad.

Um jetzt in der "script.php" ein anderes Script per include(), require() usw. einzubinden, musst du den Dateisystempfad benutzen:

Code:
absolut: 
  /www/anderes_script.php
relativ (Kurzform):
  anderes_script.php
relativ:
  ./anderes_script.php
Gleiches gilt, wenn du die Grafik-Datei im PHP-Script benutzen möchtest (zum Beispiel mit den image-Funktionen):

Code:
absolut: 
  /www/icons/grafik.gif
relativ (Kurzform):
  icons/grafik.gif
relativ:
  ./icons/grafik.gif
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:
  http://example.org/icons/grafik.gif
relativ:
  icons/grafik.gif
"server-relativ":
  /icons/grafik.gif
[1] ... oder auch Frames, CSS-, JavaScript-Dateien, Favicons, und weiß-der-Geier-was sonst noch alles. Guckst du auch hier:
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:
PHP-Code:
// den case-insensitive-Murks lassen wir auch weg
if (!defined("pfad")) {
  
define('pfad'$_SERVER["DOCUMENT_ROOT"] . "/shop/");

nur:
PHP-Code:
if (!defined("pfad")) {
    
define('pfad''/shop/');

oder im "guten Stil":
PHP-Code:
if (!defined('HTML_REF_PATH')) {
    
define('HTML_REF_PATH''/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.

Zitat:
# aber Firefox meldet:
Firefox weiß nicht, wie diese Adresse geöffnet werden soll,
da das Protokoll (c) mit keinem Programm verknüpft ist
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.

Geändert von fireweasel (15-07-2009 um 17:37 Uhr)
Mit Zitat antworten
  #14 (permalink)  
Alt 16-07-2009, 14:08
RamonaS
 Registrierter Benutzer
Links : Onlinestatus : RamonaS ist offline
Registriert seit: Mar 2009
Beiträge: 177
RamonaS zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

@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.
Mit Zitat antworten
  #15 (permalink)  
Alt 16-07-2009, 14:25
piratos
 Guest
piratos
Beiträge: n/a
Standard

Empfehle mal grundlegendes nachzulesen:

PHP: Variablen - Manual
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
define + request dani_o PHP Developer Forum 21 10-01-2009 20:56
define ist leer! der_meier_hans PHP Developer Forum 1 24-05-2008 15:15
datenbank und define xJonx PHP Developer Forum 8 09-11-2006 15:16
array mit define tredert PHP Developer Forum 2 07-02-2004 19:40
funktion define TheCure13 PHP Developer Forum 8 04-06-2003 13:26

Themen-Optionen
Thema bewerten
Thema bewerten:

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 an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 06:55 Uhr.