我正在开发一个可以访问实时天气数据的传单地图网站。为了避免必须使用 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