【问题标题】:Reducing Disk Space Usage of PHP Wiki Site running on Azure Web App减少在 Azure Web App 上运行的 PHP Wiki 站点的磁盘空间使用
【发布时间】:2017-02-25 11:07:57
【问题描述】:

最近我刚刚开始在 Azure Web App 上管理一个 wiki (pukiwiki) 站点,该站点还运行另一个 MVC 应用程序。下面是概念结构。

--site/
  --wwwroot/
    --<main app>
    --wiki/
      --attach/   //attached files
      --lib/      //php codes
      --image/    //images
      --<other folders>
      --index.php
      --pukiwiki.ini
      --.htaccess
      --<other files>

它运行良好,但是,我的 wiki 设计为包含许多图像和文章,因此 wiki 的存储会影响我的网络应用程序的总磁盘空间,这将是一个问题。

然后我认为这将是一种将上面列出的文件夹移动到 Azure Blob 存储的方法。
index.php 和 wiki.ini 对位于 lib、attach 和其他文件夹中的 php 代码有一些要求,并且还有确定文件夹位置的定义。

//index.php
define('DATA_HOME', '');
define('LIB_DIR',   'lib/');

require(LIB_DIR . 'pukiwiki.php');

//pukiwiki.ini
define('DATA_DIR',      DATA_HOME . 'wiki/'     );
define('UPLOAD_DIR',    DATA_HOME . 'attach/'   );
...

我将文件夹移动到 blob 并编辑了这些引用以引用那里的位置。

//index.php
define('DATA_HOME', 'https://<account>.blob.core.windows.net/wiki/<container>/');
define('LIB_DIR',   'lib/');

require(LIB_DIR . 'pukiwiki.php');

//pukiwiki.ini
define('DATA_DIR',      DATA_HOME . 'wiki/'     );
define('UPLOAD_DIR',    DATA_HOME . 'attach/'   );
...

但是,由于引用另一个域的限制,它不起作用。允许通过编辑 .user.ini 访问域是一种解决方案,但正如我所见,从安全角度来看,它看起来并不推荐。

有什么好办法可以减少 wiki 内容的磁盘空间吗?

【问题讨论】:

    标签: php azure azure-storage wiki


    【解决方案1】:

    关于“减少磁盘空间有什么好主意” - 这是主观和广泛的。但是,从客观的角度来看,你的做法是不正确的。

    您正在尝试将 blob 容器视为文件目录,但它不起作用。 Blob 可通过 REST API(或特定语言的 SDK 之一)访问。

    如果您需要为 Web 应用程序提供一个单独的、更大的存储区域(无需修改代码以专门用于 blob 存储),您必须执行以下操作之一:

    • 创建 Azure 文件存储卷(位于 blob 存储之上,但实现 SMB 并允许您像访问任何其他 UNC 路径一样访问该卷)
    • 升级到更大的 Web 应用计划(具有更多磁盘空间)
    • 设置带有附加存储磁盘的 VM,作为 Web 应用程序的文件服务器(您还需要处理 VM 可能脱机并使文件服务器对 Web 应用程序不可用的情况)

    始终可以选择将内容存储在 Web 应用之外(例如数据库、直接 blob 访问等)。但这将取决于您的 wiki 软件的设置方式。

    【讨论】:

    • 我设置了一个 Azure 文件存储并让代码在那里读取文件,但仍然无法读取。最后我决定建立一个新的虚拟机,它有一个附加的磁盘来运行 php 代码。谢谢。
    【解决方案2】:

    为了简单的接近你的需求,你可以尝试直接修改pukiwiki的源代码。修改/lib/file.php脚本中get_source()函数的sentence为:

    $path = 'https://&lt;torage_account&gt;.blob.core.windows.net/'.get_filename($page);

    它将获取您存储帐户中的文件内容。

    此外,您可以创建一个网络作业以自动将网络应用文件夹中的文件更新到 Azure 存储。

    【讨论】:

    • 它不起作用(无法读取路径处的文件,因此没有出现正文)。为此,我决定使用 VM 为 wiki 运行服务器。谢谢。
    猜你喜欢
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    • 2022-01-09
    • 2021-11-17
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    相关资源
    最近更新 更多