Ich muss den Pfad für public: // zur Laufzeit abrufen. Gibt es eine Funktion, mit der ich es bekommen kann?
43
Sie können den folgenden Code verwenden, um den tatsächlichen Pfad von public abzurufen: //.
if ($wrapper = file_stream_wrapper_get_instance_by_uri('public://')) {
$realpath = $wrapper->realpath();
// ...
}
Dieser Code ist die vereinfachte Version des von verwendeten Codes file_create_url()
mit den folgenden Unterschieden:
$wrapper->getExternalUrl()
da das OP nach dem Pfad fragt, nicht nach der URLWenn das OP die URL für public: // haben wollte, hätte ich den folgenden Code verwendet, der immer noch eine vereinfachte Version des von der Drupal-Funktion verwendeten Codes ist, der allgemeiner sein muss.
if ($wrapper = file_stream_wrapper_get_instance_by_uri('public://')) {
$url = $wrapper->getExternalUrl();
}
file_create_url()
; Sie werden sehen, dass der ausgeführte Code in diesem Fall genau der ist, den ich in meiner Antwort geschrieben habe.file_create_url()
die Sie gibt./var/www/webroot/etc/more_folders/
Sie können die Funktion file_create_url verwenden.
quelle
global $base_url
, um ihn zu entfernen und diesen Server agnostisch zu machen.global $base_url; $path = file_create_url($file_object->uri); $path = preg_replace('#' . $base_url . '#', '', $path);
Stellen Sie sicher, dass Sie das '#' in der regulären Ausdrucksweise verwenden. Andernfalls schlägt das Ersetzen aufgrund eines nicht maskierten '/' in der $ base_url fehl.Falls Sie nur lokale Dateien verwenden ( nicht remote! ), Können Sie auch versuchen, drupal_realpath ()
Es wird zurückkehren:
quelle
Siehe die folgenden Beispiele:
oder:
Überprüfen Sie die API auf
DrupalPublicStreamWrapper
.Die Verwendung von
file_create_url()
funktioniert nicht in allen Fällen (wie in den anderen Antworten angegeben), da sich die zurückgegebene URL nicht auf demselben Server befinden muss. Und die Verwendung$_SERVER['DOCUMENT_ROOT']
funktioniert nur für bestimmte Serverkonfigurationen.Wenn Sie keine Stream-Wrapper verwenden möchten, können Sie eine einfachere Lösung ausprobieren:
Wenn Sie etwas benötigen, das allgemeiner funktioniert, überprüfen Sie die Lösung von @ hannanxp :
Lesen Sie weiter: Wie kann ich eine Datei uri in einen relativen Pfad konvertieren?
Verbunden:
quelle