2010-08-25 83 views
3

我有一個drupal模塊,需要網絡上的其他文件。模塊是否可以在激活時下載這些文件?模塊可以下載文件嗎?

+1

模塊可以下載文件,但它不具有對其安裝目錄的寫入權限。 – kiamlaluno 2010-08-26 00:52:08

回答

3

Drupal的方式是使用File Interface和安裝掛鉤:

如果該文件只需要下載一次,它可能會更好使用hook_install()和使用hook_requirements()提供有關它是否工作反饋。如果每次模塊啓用時都需要新數據,請選擇hook_enable()

在下載文件方面,使用任何你想要的PHP方法。如果您需要使用外部庫,請將其放入模塊目錄中並使用include和/或require,或考慮使用Libraries API,該目標旨在爲第三方腳本和庫提供中央存儲庫。

一旦你有文件數據,你會使用文件接口。模塊可以訪問文件站點的目錄(在站點配置文件系統中定義)。您首先使用file_create_path()在其下創建自己的目錄,然後使用file_save_data()將數據保存到它。查看其他文件界面API documentation以瞭解您可以執行的其他操作。

然後,保存後,只需使用file_check_location()檢查數據是否可用於文件系統,並使用file_get_contents()include/require訪問它。

+0

不,正如我所說的,您只能對文件夾具有寫入權限。如果你想確保圖書館的依賴性,Drupal的方式是要求用戶下載庫並在hook_requirements中檢查它。但是,即使在你的用例中,我上面描述的仍然可以工作:如果你可以下載和訪問這個庫,它保存在哪裏有什麼關係? – 2010-08-26 04:36:47

+0

我建議使用Libraries API作爲在模塊文件夾中粘貼下載庫(如果需要獲取想要下載的文件)的替代方案,因爲它通常不贊成在Drupal模塊中封裝外部庫(並且如果您想要發佈到drupal.org)。 – 2010-08-26 04:37:37

+0

如果您計劃將其發佈到drupal.org,請不要執行任何操作(除了實現hook_requirements之外)。要求用戶在自述文件中下載所需的庫:遵循約定比在未經用戶同意的情況下嘗試下載文件更重要。如果這是一個內部模塊,您只需要下載到文件並將其包含在內以供使用。爲了能夠將它們包含在模塊中使用,並不是要求庫位於'sites/all/libraries'或模塊的文件夾中,而且它還具有將模塊文件夾保持原始狀態的額外好處。 – 2010-08-26 05:05:20

2

假設PHP配置爲允許遠程文件訪問(請參閱allow_url_fopen)並且模塊目錄具有寫權限,那麼可以下載hook_enable或者可能更好的hook_install所需的任何文件。當啓用一個模塊火災:

相關問題