【问题标题】:Unable to write on a read-only SQLite database file无法写入只读 SQLite 数据库文件
【发布时间】:2014-12-06 17:37:32
【问题描述】:

我有一个应用程序负责我在 Windows 环境下开发的其他项目的 URL 路由。

现在我有一个 Linux 环境,在虚拟机中设置,我无法重新生成我的应用程序的路由,因为我用来存储信息的 SQLite 文件显然不能由我的 PHP 应用程序中的例程编写。

我收到带有以下消息的 PDOException:

SQLSTATE[HY000]:一般错误:8 次尝试写入只读数据库

我读过this stack 说SQLite 文件的父文件夹也必须是可写的。嗯……我是 Linux 世界的新手,我一次解决几个小问题,虽然我理解这一点……Linux 有/有限制性政策,但我不知道如何解决这个问题。

存储文件的 Windows 分区,根据我阅读的教程,以便在来宾 (Linux) 中访问它们,告诉我我是所有者:

我已经阅读过使用不同用户或组运行的 PHP 脚本。我该怎么办?

叹息...我对这个 Linux 环境很生气...

【问题讨论】:

  • 可以通过控制台在Windows分区中写入(创建)文件吗?
  • 是的,我想我可以,因为终端显示 bruno@pc。我尝试使用 Sqliteman 之类的 3rd-party 应用程序,它也无法写入文件,说文件已被锁定。
  • 我猜这是挂载分区的权限问题。您使用的是哪种 Linux?
  • Linux Mint 17。根据教程,我应该将此行添加到 /etc/fstab//192.168.0.13/WindosPartitionName /mnt/share/FolderName cifs username=bruno,password=mypassword,rw,uid=1000,gid=1000 0 0。另一个消息来源说,如果我将 1000 都更改为 0(零)而不是我,那么所有者将是 root。
  • 您是否尝试过添加参数file_modedir_mode,如下所示:community.linuxmint.com/tutorial/view/77

标签: php linux sqlite permissions vmware


【解决方案1】:

在 Ubuntu 讨论区阅读 a comment 后,我对我的问题有了部分答案。显然,NFS 挂载文件夹(我认为是 Windows NTFS(文件系统))的文件权限设计不佳。

得到这个答案后,我决定将 SQLite 文件移动到已挂载文件夹之外的其他位置。我收到一个新错误,说数据库文件无法打开,但这次我已经知道here 描述的 PDO SQLite 限制,它指出父文件夹也必须是可写的。

权限已修复,一切正常。 :)

在那之后,我注意到another comment ahead 说这个错误已在 Samba 3.2.5 中修复,这很奇怪,因为在运行 smbstatus 命令后,我收到的版本为 4.1.6 -Ubuntu

无论如何...关键是该注释还指出,如果您在 CIFS 挂载期间使用 nobrl 选项挂载分区,则建议锁不会在网络中传播。

我不知道这意味着什么,我只知道在编辑我的 /etc/fstab(见下文)以包含此选项并重新启动虚拟机后,一切正常。

//WindowsIP/SharedPartitionName /path/to/linux/folder cifs username=myusername,password=mypassword,rw,nobrl,uid=1000,gid=1000,nounix,iocharset=utf8,file_mode=0777,dir_mode=0777    0   0

感谢@AlejandroArbiza 的耐心等待,我希望这对未来的人有所帮助。

【讨论】:

    猜你喜欢
    • 2015-10-27
    • 2020-08-03
    • 2021-09-11
    • 2019-09-26
    • 2017-07-17
    • 2011-03-20
    • 2017-07-17
    • 2021-05-01
    相关资源
    最近更新 更多