2012-03-25 7 views
1

Ich benutze XAMPP für Mac.Definieren der Datei Verzeichnis; xampp

Als ich mit PHP zuerst anfing zu arbeiten, würde ich mein Verzeichnis mit einer Variablen definieren:

$root = "http://localhost/~aaron/SiteFolder/"; // Dev 
$root = "http://www.sitename.com/";   // Live 

Dies funktioniert, aber es ist ein großer Ärger ein, um einen Kommentar mit, je nachdem, ob ich bearbeite die Dev-Site oder die Live-Site.

Ich gehe langsam zu OOP Gewohnheiten über und möchte die Effizienz maximieren, wenn überhaupt möglich. So bin ich versuche, ROOT mit dem aktuellen Verzeichnis zu definieren, wie hier gezeigt:

define("ROOT", dirname(__FILE__) . DIRECTORY_SEPARATOR); 

Diese Ausgänge:

/Users/aaron/Sites/SiteFolder/ 

Dies ist nicht ganz nützlich für mich, wenn ich auf der Entwickler-Website gerade arbeite, weil ich ROOT als Präfix in der Lage sein wollen, für meine Bilder, Dateien, etc. zu verwenden

Dies wird sich natürlich nicht:

<img src="/Users/aaron/Sites/SiteFolder/images/charizard.png"> 

Was muss ich tun, um dieses Problem zu beheben, um mein Verzeichnis richtig zu definieren?

+0

Alles, was Sie daran hindert, relative Pfade zu verwenden? –

+0

Gibt es eine vordefinierte Funktion zum Abrufen dieser Informationen oder muss ich sie manuell in eine Variable einfügen? – Aaron

+0

Relative Pfade sind genau das: relativ. Stellen Sie sich vor, Sie haben eine HTML-Datei unter '/ path/to/site/index.html' und ein Bild unter'/path/to/site/images/image.png' Sie können das Bild in der HTML-Datei einfach mit '' referenzieren '. Oder mit anderen Worten: Schreiben Sie den Pfad mit dem referenzierenden Dateiordner als Startpunkt. –

Antwort

0

Basierend auf Ihre Kommentare in meiner anderen Antwort, ist es das, was Sie tun können:

Sie könnten eine einfache Installation Seite erstellen und den Benutzer für die URL fragen, wo sie planen Ihre Webanwendung zu hosten.

Dann können Sie diese Variable in einer Datenbank oder etwas setzen.

Viele Web-Anwendungen tun dies: Wordpress, Joomla in den Sinn kommen.

EDIT:

Sie auch die URL mit der PHP $ _SERVER Variable könnten versuchen, zu bauen. Sie können den Host, Port, um die URL zu erstellen.

Leider könnte dies ein Problem sein, wenn jemand entscheidet, Ihre Web-App in etwas anderem als der Wurzel der Domain der Subdomain zu hosten.

So etwas wie 'http: // domain/yourwebapphere /'

Sie würden ohne dass der Benutzer es Angabe nicht in der Lage sein, das zu erkennen. Wenn Sie einen einzelnen Endpunkt verwendet und einen htaccess zum Umleiten von URLs verwendet haben, müssen Sie in der Datei htaccess noch eine Basis-URL angeben, damit der URL richtig weitergeleitet wird.

EDIT2:

Ok, wenn Sie wirklich die URL dynamisch erstellen möchten, hier einige Pseudo-Code auf, wie es geht.

$protocol = parse_server_protocol($_SERVER['server_protocol']); 
$port = $_SERVER['port'] 
$host = $_SERVER['server_name']; 
//For use case where the app is not hosted at root of domain ("http://domain.com/test") for example 
$urlroot = parse_root($_SERVER["REQUEST_URI"]); 

$siteurl = buildRootUrl($protocol, $port, $host, $urlRoot); 

//Now save that root url in the database. 

Wenn Sie htacess verwenden saubere Urls zu erstellen, Ihre Anwendung würde müssen wissen, wie die baseurl in der Instanz zu schreiben, wo es nicht an der Wurzel der Domäne gehostet wird.

+0

Ich habe darüber nachgedacht, aber dann bin ich in Drupal darüber gestolpert: 'define ('DRUPAL_ROOT', getcwd());' Ich denke, meine letzte Frage ist jetzt, sollte ich getcwd(); für die Live-Site, und definieren Sie den http: // localhost für die Dev-Site? – Aaron

+0

Ich weiß nicht viel über Drupal. Aber ich denke, DRUPAL_ROOT wird nicht für URL-Pfade zu Bildern verwendet. getcwd() ruft den Dateisystempfad ab, was Sie im Grunde mit 'dirname (__FILE__) gemacht haben. DIRECTORY_SEPARATOR ' – Gohn67

+0

Also was ist die Verwendung für 'dirname (__FILE __)'? – Aaron

0

Da dies eine URL für das Image-Tag ist, können Sie nicht einfach Ihr Bildstammverzeichnis als define('ROOT', '/images/') definieren?

Im Moment erhalten Sie den Verzeichnispfad.

EDIT:

Leider habe ich die Frage falsch verstanden ein wenig. Angenommen, Sie sprechen über öffentliche Ressourcen wie Bilder auf Ihrem Webserver, auf die Sie verlinken möchten.

Dann können Sie Ihre root als Ihre Basis-URL definieren?

define('ROOT', 'http://localhost/') oder define('ROOT', 'http://dev.sitename/') oder define('ROOT', 'http://localhost/testsite/')

+0

Ich habe ROOT wie oben definiert, und das Ergebnis ist '/ Benutzer/aaron/Sites/SiteFolder/images/charizard.png', die keine gültige Quelle für das Bild ist. – Aaron

+0

Richtig, es ist ungültig, weil das der Pfad ist. Sie möchten die URL zu dem Bild, wenn Sie es anzeigen möchten. Ich hatte die Frage etwas falsch gelesen. Sie sollten also Ihre Root-URL erstellen, die URL, die Sie verwenden. Ich habe es oben nicht aufgelistet, aber Sie können definieren ('ROOT', '/'), um eine relative URL zu machen. – Gohn67

+0

Hmm, ich habe bemerkt, dass du erwähnt hast, dass du das getan hast, was ich gerade erwähnt habe. Ich bin mir nicht sicher, ob ich verstehe, warum du es so machst. Steht der Ordner, auf den Sie verweisen, im öffentlich zugänglichen Verzeichnis Ihres Webservers? – Gohn67

0

als CodeIgniter verwendet, gibt es eine Konfigurationsvariable in config.php:

$config["base_path"] = "/projects/mysite/"; //relative to http://localhost 

und es gibt eine Hilfsfunktion:

function base_url(){ 
    return $config["base_path"]; 
} 

und In deinen URLs verwendest du es wie

wenn Sie Smarty verwenden:

<img src="{base_url()}assets/images/1.jpg"> 

oder direkt php:

<img src="<?php echo base_url();?>assets/images/1.jpg"> 

und wenn Sie Ihre Website auf dem Web laden, nur um Ihre Basis-URL ändern:

$config["base_path"] = "/"; 

und alles wieder funktioniert.

+0

Gibt es eine Möglichkeit, es so zu machen, dass ich base_path nie mit 'getcwd();' oder 'dirname (__file__)' bearbeiten muss? – Aaron

+0

Nun, das Überprüfen der $ _SERVER ["HTTP_HOST"] und Vergleichen mit localhost oder 127.0.0.1 und dann mit $ _SERVER ["DOCUMENT_ROOT"] könnte helfen, aber manuelle Definition ist besser, denke ich. Weil du es nicht oft ändern wirst. –

Verwandte Themen