0

我正在编写一个函数来获取 django 应用程序中的文件大小。

我们通过 apache 服务器运行的 Django 应用程序。

文件位于其他位置。我们通过挂载路径获取该文件。

代码如下,

import os
filePath = '/mnt/file.html'
size = flaot(os.stat(filePath))

如果我通过 runserver 命令运行 django 服务器,那么它工作正常。

如果我通过 apache 运行 djnago 服务器,那么它将无法工作。

如果文件位于同一位置,那么它将通过两种方式(使用 apache 和不使用 apache)Ex。filePath = '/home' OR '/root' 或者来自同一台机器的任何位置

通过 django-apache 从挂载路径获取文件大小的另一种方法是什么

请帮忙。提前致谢。

4

2 回答 2

0

Apache 可能在没有访问权限的用户下运行/mnt

例如,在 Ubuntu 上,apache 在www-data. 为了确认这一点,请尝试将/mnt文件夹的读取/执行权限授予运行 apache 的用户或在运行 apache 的同一用户下执行 runserver 并查看是否收到相同的错误。

如果您不知道哪个用户正在运行 apache,请尝试:

ps aux | grep apache

如果 apache 服务器可执行文件未命名为 apache 或 apache2(例如,在某些 linux 发行版中命名为 httpd),则将 apache 替换为上述命令中的可执行文件名称。

假设运行 apache 的用户是 www-data:

su - www-data -c "cat /mnt/file.html"

如果问题与权限有关,您应该会看到一条错误消息,告诉您问题所在。

于 2013-10-17T11:15:18.020 回答
0

这与进程使用的用户的目录/文件权限和/或特权有关。

当您运行 Django 服务器时,它会在您的用户名下运行,并且很可能您的用户可以访问保存文件的位置;但是当它在 Apache 后面运行时,它以 Apache 或 www-data 用户身份运行,这些用户无权访问这些地方。

解决方案:要么更改目录权限,将 Apache 用户添加到允许访问此目录的用户组中,要么让 Apache 用户成为此目录的所有者,选择适合您的!

于 2013-10-17T11:46:31.620 回答