【问题标题】:Symbolic link to database not working in /var/www指向数据库的符号链接在 /var/www 中不起作用
【发布时间】:2014-04-22 13:27:02
【问题描述】:


我正在开发一个可以访问实时天气数据的传单地图网站。为了避免必须使用 SUID,因为它的安全问题,我使用从 /var/www 到我的图像数据的符号链接。这些是简单的 png 文件,这是可行的。

然后我想根据鼠标悬停在图像数据上的位置获得实时数据。为此,我使用实际值创建了一个 SQLite3 数据库。起初,作为测试,我手动将此数据库放在站点根目录中,一切正常。不幸的是,我无法在该位置拥有该数据库。然后,我对这个数据库的图像数据(有效)执行了完全相同的程序。

过程是:

在我的站点根目录中:

ln -sf /path/to/db/ db
chmod 777 /path/to/db/data.db

然后由一个简单的 PHP 程序读取该文件以进行查询:

<?php

$lat = floatval($_GET['lat']);
$lon = floatval($_GET['lon']);

$db = new SQLite3('db/sst.db'); # line 6
$results = $db->query("SELECT sst FROM current ORDER BY (($lat-lat)*($lat-lat) + ($lon-lon)*($lon-lon)) ASC LIMIT 1");
while ($row = $results->fetchArray()) {
        echo $row['sst'];
}
?>

不幸的是,现在我在浏览器控制台中收到此错误:

Failed to load resource: the server responded with a status of 500 (Internal Server Error)

检查 /var/log/apache2/error.log 文件我收到以下错误:

PHP Fatal error:  Uncaught exception 'Exception' with message 'Unable to open database:
unable to open database file' in /var/www/Mapea/sst.php:6\nStack trace:\n#0
/var/www/Mapea/sst.php(6): SQLite3->__construct('db/sst.db')\n#1 {main}\n  thrown in
/var/www/Mapea/sst.php on line 6

【问题讨论】:

  • /path/path/to/path/to/db 目录的权限是什么?
  • 很好的评论。 /path 没有完整的权限。改变了它,它正在工作。出于某种原因,我认为只有最后一个路径的权限很重要(以及文件)。两者都有正确的权限。
  • 请写出答案。
  • 您尝试过什么来解决问题?你被困在哪里了?

标签: php sqlite ln


【解决方案1】:

在 CL 询问我对 /path/path/to/path/to/db 拥有哪些权限后,我发现 /path 权限不正确。

使用以下命令后:

chmod 755 /path

我的应用程序现在 100% 运行。

【讨论】:

    【解决方案2】:

    除了文件完整路径的明显权限之外,还有一个问题可能是 SELinux。

    如果在仔细检查文件权限后仍然存在权限问题,这很可能是罪魁祸首。 例如,在 RHEL 8 上,默认安全策略不允许 Apache 访问 NFS 卷上的文件,您需要传递命令

    setsebool -P httpd_use_nfs 1
    

    向(永久使用 -P)授权。

    【讨论】:

      猜你喜欢
      • 2012-07-28
      • 2016-07-02
      • 2017-05-10
      • 2015-11-17
      • 2016-03-17
      • 2018-07-16
      • 1970-01-01
      • 2011-11-07
      • 1970-01-01
      相关资源
      最近更新 更多