2010-08-25 84 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所需的任何文件。当启用一个模块火灾:

相关问题