我们建立了一个CRM网站,人们可以进行预订。
我们即将有更多的客户使用这个系统,这意味着维护是一个有点不同的想法,我们不想为我们创建的每一个(微小的)更新更新15个以上的网站。
我正在寻找一个这样工作的系统:
尝试打开文件/file.txt
(例如:file_get_contents("/file.txt")
):
- 如果文件存在于userA的目录中,则返回此文件
-例如:/home/usera/wwwroot/domainname.ext/file.txt
- 如果没有:从服务器上的常规指定位置返回文件
-例如:现在返回:/home/GENERAL_POOL/file.txt
(类似于虚拟链接/别名/快捷方式)
我们想要这个,因为会有更多的用户,我只想更新一个文件(保留版本)。如果我添加了一个功能,他们都应该拥有它,因为他们都在同一个代码上工作
本地文件主要是模板和样式表,但也可能是一个例外的PHP文件。
小示例:
- 假设
/saveOrder.php
中有一个对saveOrder()
的函数。我希望我们所有的客户都使用它,所以我不会在本地创建那个文件,所以他们都从通用池中获取它
现在我们已经修复了/saveOrder.php
中的一个错误,*boom*所有用户都已经修复了(是的,我也意识到这可能带来的危险) - 我确实想要为这个用户提供一个自定义样式,所以
/style.css
被放置在本地,因此可以代替常规池中的文件使用
可能很方便知道的事情:
- 我们正在使用最新的apache服务器
- 此服务器专用于此类系统/网站
- 我们可以随心所欲
我们怎样才能解决这个问题?这样的系统存在吗?如果存在,它叫什么?如果没有,我们怎么能创造这个。我正在寻找最有效的方法,不喜欢破坏.htaccess
文件
此外,如果有一种创建版本的方法,那将是很棒的
如果需要更多信息来回答这个问题,请告诉我
这是unionfs fuse的一个用例。
假设您的CMS存储在/home/GENERAL_POOL/
中
对于每个客户,您都有一个目录,最初为空,名为/home/usera/files/
您希望他的文件从/home/usera/wwwroot/domainname.ext/
送达。
使用unionfs fuse,您可以为每个客户使用以下命令:
$ unionfs-fuse -o cow
/home/usera/files=RW:/home/GENERAL_POOL=RO
/home/usera/wwwroot/domainname.ext
该命令将/home/usera/files
和/home/GENERAL_POOL
合并为/home/usera/wwwroot/domainname.ext
。
虽然可以提供更多的保险丝选项,但本示例说明了最重要的选项-o cow
启用写时复制,因此当/home/usera/wwwroot/domainname.ext
中的文件被修改时,它会被写入顶级读写目录/home/usera/files
中
由于/home/GENERAL_POOL
是只读的,因此它永远不会被此装载点修改,但您在原始目录中进行的任何更新都将自动反映给所有客户端。
读取文件时,第一个目录优先,此处为/home/usera/files
。如果在该目录中找不到,将在/home/GENERAL_POOL
中进行搜索。
即使现在不考虑这一点,将来也可能需要切换到S3这样的服务。考虑到这一点,使用Flysystem这样的库来抽象文件系统可能是值得的。这也将帮助您进行当前设置。请参阅缓存部分,尤其是适配器缓存。