2016-12-29 2 views
0

Sagen wir domainname.com/somelibrary/library.phpWie können wir eine Datei in PhP aus verschiedenen Ordner einbeziehen?

liegt in domainname.com/helloworld/someplace/someplace/somephp.php

I enthalten sein sollen, dass /somelibrary/library.php einen Ordner

Ein Weg, dies zu tun ist, den relativen Pfad zu finden. Ich kann tun

Aber dann muss die include_once-Anweisung die ganze Zeit ändern, je nachdem, wo meine Datei ist.

Ich kann versuchen, include_once ('/somelibrary/library.php');

Es scheint nicht zu funktionieren.

Warning: include_once(/blablabla/hello.php): failed to open stream: No such file or directory in /home1/romancegua/public_html/russia/test.php on line 2 

Ich bin mir sehr sicher /blablabla/hello.php existieren.

ist es befindet sich an /home1/romancegua/public_html/blablabla/hello.php

Also, was ist meine Lösung?

+2

Ich meine das ist warum Namespace und Autolade sind entwickelt. –

+0

Ich schlage vor, Sie bekommen einen Blick auf, wie Composer und seine Autoloading funktioniert, ermöglicht es Ihnen, diese Art von relativen Pfad Fiedeln zu vermeiden. – SolarBear

Antwort

1

Wie gesagt die Jungs in den Kommentaren, sollten Sie das automatische Laden werden:

PHP hat diese Funktion nativ:

spl_autoload_register(function ($class_name) { 
    include $class_name . EXTENSION; 
}); 

$obj = new MyClass1(); 
$obj2 = new MyClass2(); 

$obj->sayHello(); 

Noch einfacher, Sie von dem Komponisten angeboten Namespaces und das automatische Laden Funktion verwenden können, mit psr-4.

Beispiel:

Fügen Sie folgendes zu Ihrem composer.json:

"autoload":{ 
    "psr-4" : { 
    "App\\": "src/" 
    } 
} 

App Name Ihres Projekts sein würde, und src ist der Ordner für Ihre Klassen.

verwenden Dann namespace

namespace App\folder; 

http://php.net/manual/en/function.spl-autoload-register.php

https://getcomposer.org/doc/01-basic-usage.md#autoloading

+0

verwendet Wordpress? –

+0

ja, wie Sie es hier sehen können https://github.com/WordPress/WordPress/search?utf8=%E2%9C%93&q=spl_autoload_register – meda

+0

Include ist in Ordnung für kleine Skripte, aber dann ist es nicht für Projekte – meda

2

Sie haben den absoluten Pfad "somelibrary/library.php" verwenden

include_once('/home1/romancegua/somelibrary/library.php'); 

Wenn Sie nicht sicher sind, wie Sie ein

echo __FILE__; die(); 

in library.php und nennen es setzen kann zu bekommen. dann zeigt es Ihnen den aktuellen Dateipfad.

+0

hmmm wartbar Gibt es eine Möglichkeit, den absoluten Pfad des Verzeichnisses/in der Domäne herauszufinden? Es wird sehr nützlich –

+0

Wenn Sie nicht ssh-Zugang haben, können Sie auch mit einigen neuen PHP-Datei. Machen Sie eine neue test.php Datei und legen Sie drinnen und rufen Sie es mit Ihrem Browser –

1

Eine Möglichkeit ist es, Wege Konstanten zu definieren, eine mit dem Pfad Ihrer Website

define('SITE', '/home1/romancegua/public_html/'); 

und die mit Ihrer Bibliothek Ordner

define('LIBRARY', SITE . 'somelibrary/'); 

hier habe ich zwei für Wiederverwertbarkeit gemacht.
ein, dann können Sie Ihre Bibliothek nennen:

include_once(LIBRARY . 'library.php'); 
0
include_once ($_SERVER['DOCUMENT_ROOT']..'/blablabla/hello.php'); 

, die den Trick für mich.

Verwandte Themen