2016-12-23 1 views
0

Ich versuche, eine alte Intranet-Site, die auf Apache 2.2 ausgeführt wird, in ein WAMP-Setup (neueste Version) auf meinem lokalen Rechner zu verschieben.Unterstützung bei der Diagnose von PHP include, konnte den Stream nicht öffnen

Eines der Probleme, die ich derzeit habe, ist ein require_once Pfad nicht öffnen, und ich kann nicht feststellen, was die Ursache ist.

Ich habe WAMP installiert in:

C:\Wamp 

Ich habe http.conf und vhosts.conf geändert von

C:\Wamp\www 

zu

C:\Wamp\www\Intranet 

Dieser Ordner das Dokument root zu ändern enthält eine index.php, die ich sehe, wenn ich beim surfen zu localhost richtig geladen werde.

Index.php hat einen iFrame, die Lasten welcome.php von

/site/welcome.php 

Dies funktioniert, da die iFrame Lasten, sondern wirft einen 500 Fehler.

Aktivieren PHP-Fehler, die welcome.php Seite im iFrame gibt mir einen Fehler auf require_once. Die require_once ist:

/site/login/config.php. 

Wie Sie sehen können, habe ich hier absolute Pfade verwenden, so dass index.php der Lage ist, /site/welcome.php zu laden, mir sagt es die richtige Datei aus wird geladen:

C:\Wamp\www\Intranet\site\welcome.php 

ich dann erwarten würde, mein require_once mit einem absoluten Pfad Laden sein:

C:\Wamp\www\Intranet\site\login\config.php 

, die einen gültigen Dateipfad ist.

Was mich verwirrt, ist, dass der erste absolute Pfad, den ich benutze, von der Dokumentwurzel zu starten scheint, nicht das physische Verzeichnis root.

Der zweite absolute Pfad, den ich verwende, scheint nicht mit dem Dokumentstamm zu beginnen.

Noch mehr interessant ist, wenn ich die require_once ändern von:

/site/login/config.php 

zu

/login/config.php 

Es funktioniert ?! Ich würde es nicht erwarten, denn das würde den absoluten Weg nahelegen, den ich vorschlage, ist es in Wirklichkeit ein relativer Weg?

+0

http://stackoverflow.com/questions/19256735/iframe-relative-paths-challenge – JustOnUnderMillions

Antwort

1

ich dieser Weg sinnvoll auf einem Windows-Rechner nicht denken (/site/login/config.php) macht.

Besser als den vollständigen Dateipfad fest codieren, bestimmen Sie es zur Laufzeit.

ZB:

define('ROOT_DIR', realpath(dirname(__FILE__))); 
// because *nix and Windows path separators aren't the same (/ vs \) 
define('DS', DIRECTORY_SEPARATOR); 
// just for convenience sake, you could use DIRECTORY_SEPARATOR on its own. 

dann Ihre Konfigurationsdatei einschließlich von welcome.php wäre:

require_once(ROOT_DIR . DS . 'login' . DS . 'config.php'); 

Ich denke, dass neben den Pfad ist verwirrend, die Sie im iframe Deklaration (was ein URL-Pfad ist) mit dem Pfad, den Sie in der Anforderung verwenden (was ein Dateisystempfad ist).

+0

Auf der alten Maschine funktionierte das, wenn der gesamte Site-Inhalt und der Dokumentenstamm auf dem Stamm eines sekundären Volumes gespeichert waren, z. E: \. Ich vermute, dass der Include-Pfad in dieser Instanz funktioniert, da er von der Wurzel von E: \ beginnt und von dort die richtige Ordnerstruktur findet? Ja, ich denke, dass ich die beiden Wegtypen verwirrt bekomme. – Eds

+0

Was hat früher funktioniert? Der Code, den du in deiner Frage gepostet hast? Das Problem mit Hardcoding-Pfaden ist genau das: Die Bereitstellung auf einer anderen Maschine oder einer anderen Architektur wird Sie beißen, so dass eine Lösung wie diese sauberer und portabler ist. – yivi

+0

Haben Sie diesen Code ausprobiert? – yivi

1

Wie neige ich die meisten meiner include/Fehler benötigen, ist zu lösen, indem eine variable Pfadeinstellung:

$path = dirname(__FILE__); 
include($path.'/file.php'); 

Diese Sie Probleme verhindern wird in diesem Fall mit verschiedenen Umgebungen aus mit Windows und Linux zu sein.

Oder noch besser:

define('ROOTPATH', realpath(dirname(__FILE__) . '/')); 
require ROOTPATH.'login/config.php'; 

Eine andere Sache, die wahrscheinlich Ihre Probleme nicht verursacht, aber eine gute Praxis zu sein, ist die DIRECTORY_SEPaRATOR einzustellen.

define('DS', DIRECTORY_SEPARATOR); 

include(DS.'home'.DS.'www'.DS); 

Dadurch wird PHP den richtigen Schrägstrich (entweder / oder \)

+0

Danke, habe ein paar Leute auf SO gesehen, die diese Methode vorschlagen. Ich hatte gehofft, einen einfachen Lift und Shift zu machen, da diese Site eine alte ist und durch eine SharePoint-Site ersetzt wird. Ich hatte gehofft, keine größeren Umschreibungen vornehmen zu müssen, wenn möglich. – Eds

Verwandte Themen