从PHP访问SQLITE数据库时出错(但它从命令行运行...)

从PHP访问SQLITE数据库时出错(但它从命令行运行...)

问题描述:

I've this simple PHP code in which I connect a SQLITE data base ...

<?php
   ini_set('display_errors', 1);

   echo 'Current script owner: ' . get_current_user();

   # Set access to data base...
   $db = new SQLite3('/var/www/html/OpenProntoSoccorso/Test/OpenProntoSoccorso.sqlite');

   echo ".... Connessione db OK! ...";
?>

when I try to execute from browser I've this error ...

Fatal error: Uncaught exception 'Exception' with message 'Unable to open database: unable to open database file' in /var/www/html/OpenProntoSoccorso/Test/testSpatialite.php:6 Stack trace: #0 /var/www/html/OpenProntoSoccorso/Test/testSpatialite.php(6): SQLite3->__construct('/var/www/html/O...') #1 {main} thrown in /var/www/html/OpenProntoSoccorso/Test/testSpatialite.php on line 6

but when I try to execute form command line all work fine

root@osboxes:/var/www/html/OpenProntoSoccorso/Test# ls -l
total 336536
-rwxr-x--- 1 root    root    330037248 Aug 17 14:20 OpenProntoSoccorso.sqlite
-rw-rw-r-- 1 osboxes osboxes       133 Aug 17 13:51 testSpatialite.php
root@osboxes:/var/www/html/OpenProntoSoccorso/Test# php testSpatialite.php 
.... Connessione db OK! ...root@osboxes:/var/www/html/OpenProntoSoccorso/Test#

I've tried to change owner and/or group but nothing change ...

Suggestions?

Thank you in advance!

我有这个简单的PHP代码,我连接了一个SQLITE数据库...... p>

 &lt;?php 
 ini_set('display_errors',1); 
 
 echo'当前脚本所有者:'。  get_current_user(); 
 
#设置对数据库的访问... 
 $ db = new SQLite3('/ var / www / html / OpenProntoSoccorso / Test / OpenProntoSoccorso.sqlite'); 
 
 echo“。  ... Connessione db OK!... ...; 
?&gt; 
  code>  pre> 
 
 

当我尝试从浏览器执行时我发现此错误...

 致命错误:在/var/www/html/OpenProntoSoccorso/Test/testSpatialite.php中显示消息“无法打开数据库:无法打开数据库文件”的未捕获异常“异常”  :6堆栈跟踪:#0 /var/www/html/OpenProntoSoccorso/Test/testSpatialite.php(6):SQLite3-&gt; __ construct('/ var / www / html / O ...')#1 {main} 在第6行上的/var/www/html/OpenProntoSoccorso/Test/testSpatialite.php中抛出
  code>  pre> 
 
 

但是当我尝试执行表单命令行时,一切正常 p>

  root @ osboxes:/ var / www / html / OpenProntoSoccorso / Test#ls -l 
total 336536 
-rwxr-x --- 1 root root 330037248 Aug 17 14:  20 OpenProntoSoccorso.sqlite 
-rw-rw-r-- 1 osboxes osboxes 133 Aug 17 13:51 testSpatialite.php 
root @ o  sboxes:/ var / www / html / OpenProntoSoccorso / Test #php testSpatialite.php 
 .... Connessione db OK!  ... root @ osboxes:/ var / www / html / OpenProntoSoccorso / Test#
  code>  pre> 
 
 

我试图更改所有者和/或组,但没有任何变化。 .. p>

建议? p>

提前谢谢! p> div>

Your permissions are wrong. Right now only root can access that database. You PHP does not (and should not) run as root on your web server. But when you are running it from the command line, you are logged on as root so when you execute the PHP code, it have root privileges.

To fix it, you will need to change the file permissions. for that, you can use chown. To know to which user you must transfer the ownership to, you can use this quick and dirty snippet

$processUser = posix_getpwuid(posix_geteuid());
echo $processUser['name'];