Ottieni il vero percorso di un file


11

Sto creando un modulo di lettura di Excel in Drupal 8. Voglio ottenere il vero percorso di un file per leggerlo da un percorso come public: //2016-03/Places.xls.

Quale funzione devo chiamare per ottenere il percorso reale di un file?



4
Per leggere con cosa? Quel percorso funziona con quasi tutto, ad esempio file_get_contents ('public: // ...') funziona bene.
Berdir,

1
Ho ottenuto la risposta in termini di drupal 8: è `\ Drupal :: service ('file_system') -> realpath ('public: //2016-03/Places_2.xlsx')`
Nisam

1
Pubblicalo come risposta e accettalo come soluzione. Ciò aiuterà gli altri con la stessa domanda.
Aram Boyajyan

1
Ho avuto una situazione simile, ma ho finito per andare con file_create_url perché può gestire managed files (These are files that have either been uploaded by users or were generated automatically (for example through CSS aggregation))eshipped files (those outside of the files directory, which ship as part of Drupal core or contributed modules or themes)
usernameabc

Risposte:


16

Alla fine ho ottenuto la soluzione scavando il codice Drupal.
Possiamo ottenere il percorso reale o il percorso assoluto utilizzando il servizio file_system .

$absolute_path = \Drupal::service('file_system')->realpath('public://2016-03/Places_2.xlsx');

4
sono questi per il caricamento di file tramite Drupal? Cosa succede se sono ospitati esternamente? The use of this method is discouraged, because it does not work for remote URIs. Except in rare cases, URIs should not be manually resolved.viene menzionata la documentazione per FileSystem :: realpath
usernameabc il

13

La risposta di @Nisam era corretta ma ora è obsoleta: funzione drupal_realpath

Obsoleto

in Drupal 8.0.x-dev, verrà rimosso prima di Drupal 9.0.0. Usa \ Drupal \ Core \ File \ FileSystem :: realpath ().

Quindi dovresti usare FileSystem :: realpath .

Esempio:

$file = File::load($file_id);
$uri = $file->getFileUri();
$stream_wrapper_manager = \Drupal::service('stream_wrapper_manager')->getViaUri($uri);
$file_path = $stream_wrapper_manager->realpath();
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.