รับเส้นทางที่แท้จริงของไฟล์


11

ฉันกำลังสร้างโมดูลการอ่าน Excel ใน Drupal 8 ฉันต้องการได้รับเส้นทางที่แท้จริงของไฟล์สำหรับการอ่านจากเส้นทางเหมือนสาธารณะ: //2016-03/Paces.xls

ฉันควรใช้ฟังก์ชั่นใดเพื่อให้ได้พา ธ ที่แท้จริงของไฟล์



4
สำหรับการอ่านด้วยอะไร เส้นทางนั้นใช้ได้กับเกือบทุกอย่างเช่น file_get_contents ('public: // ... ') ใช้ได้ดี
Berdir

1
ฉันได้รับคำตอบในแง่ของ drupal 8 มันคือ `\ Drupal :: service ('file_system') -> realpath ('สาธารณะ: //2016-03/Paces_2.xlsx')`
Nisam

1
โพสต์เป็นคำตอบและยอมรับว่าเป็นวิธีแก้ปัญหา ที่จะช่วยผู้อื่นด้วยคำถามเดียวกัน
Aram Boyajyan

1
ฉันมีสถานการณ์ที่คล้ายกัน แต่ลงเอยด้วยfile_create_urlเพราะมันสามารถจัดการmanaged files (These are files that have either been uploaded by users or were generated automatically (for example through CSS aggregation))และshipped files (those outside of the files directory, which ship as part of Drupal core or contributed modules or themes)
usernameabc

คำตอบ:


16

ในที่สุดฉันก็ได้ทางออกโดยการขุดรหัส Drupal
เราสามารถรับพา ธ จริงหรือพา ธ สัมบูรณ์โดยใช้บริการfile_system

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

4
เหล่านี้สำหรับการอัปโหลดไฟล์ผ่าน Drupal จะเกิดอะไรขึ้นถ้าพวกเขาโฮสต์ภายนอก? 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.มีการกล่าวถึงเอกสารสำหรับFileSystem :: realpath
usernameabc

13

@Namam คำตอบถูกต้อง แต่ตอนนี้มันเลิกใช้แล้ว: function drupal_realpath

เลิก

ใน Drupal 8.0.x-dev จะถูกลบออกก่อน Drupal 9.0.0 ใช้ \ Drupal \ Core \ File \ FileSystem :: realpath ()

ดังนั้นคุณควรใช้FileSystem :: realpath

ตัวอย่าง:

$file = File::load($file_id);
$uri = $file->getFileUri();
$stream_wrapper_manager = \Drupal::service('stream_wrapper_manager')->getViaUri($uri);
$file_path = $stream_wrapper_manager->realpath();
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.