我有这样的代码架构:
- 根
- 酒店
- 子域1
- 酒店
- 子域2
- 酒店
- .env
在我的.env中,我有一个名为“DOMAIN=XXX”的env文件。如果没有设置该变量,则使用/root/locales。如果设置为DOMAIN=subdomain1
,则我希望子域的locales文件使用/root/subdomain1/locales
。
知道在我的env中我得到了DOMAIN=subdomain1
,我希望PHP将该路径更改为/root/subdomain1/locales/XXX
。
范例:
// In index.php I got
symlink('/root/locales/XXX', '/root/subdomain1/locales/XXX'); // I get the "subdomain1" from the .env variable
// In other files I've got
require_once('/root/locales/XXX')
字符串
我试过使用PHP的symlink函数,但它什么都不做。我正确地使用了这个函数吗?你们中有谁有其他方法吗?我不能在每个require/include中手动更改路径,因为我有成千上万个。
编辑:在其他文件中,我得到了require_once('/root/locales/XXX'),我无法更改,这就是为什么我想创建一个符号链接,以更新所有require_once
的路径,而不必编辑每一个。
1条答案
按热度按时间llycmphe1#
在同一目录中不能同时有同名的文件和符号链接,因此对
symlink()
的调用无法工作。一个解决方案是将您的层次结构更改为以下内容:
如果没有定义
DOMAIN
,创建一个符号链接(注意symlink()
的参数顺序):字符串
当
DOMAIN
被定义时,创建一个符号链接,如下所示:型
您可以同时处理这两种情况:
型
你可以在这里找到一个简单的在线测试,它表明符号链接实际上是有效的。
当然,PHP用户需要权限才能在/root中创建符号链接,所以它仍然可能失败。
但是你真的需要在运行中创建它吗?.env文件会突然改变吗?如果不会,那么你应该在命令行上手动创建符号链接。
最后,另一个解决方案是修复PHP脚本以包含正确的文件。您说“我不能手动更改路径”,因为您有很多,但没有什么可以阻止您编写自动扫描和修复脚本的实用程序。基本上您只需要替换以下行:
型
用另一个实现,所以这是一个简单的搜索和替换。