php 使用env变量调用某个文件夹时链接到另一个文件夹

a5g8bdjr  于 5个月前  发布在  PHP
关注(0)|答案(1)|浏览(39)

我有这样的代码架构:

  • 酒店
  • 子域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的路径,而不必编辑每一个。

llycmphe

llycmphe1#

在同一目录中不能同时有同名的文件和符号链接,因此对symlink()的调用无法工作。
一个解决方案是将您的层次结构更改为以下内容:

  • 主要
  • 酒店
  • 子域1
  • 酒店
  • 子域2
  • 酒店
  • .env

如果没有定义DOMAIN,创建一个符号链接(注意symlink()的参数顺序):

symlink('/root/main/locales', '/root/locales');

字符串
DOMAIN被定义时,创建一个符号链接,如下所示:

symlink('/root/'.$_ENV['DOMAIN'].'/locales', '/root/locales');


您可以同时处理这两种情况:

$domain = $_ENV['DOMAIN'] ?? 'main';
@unlink('/root/locales');
symlink("/root/$domain/locales", '/root/locales');


你可以在这里找到一个简单的在线测试,它表明符号链接实际上是有效的。
当然,PHP用户需要权限才能在/root中创建符号链接,所以它仍然可能失败。
但是你真的需要在运行中创建它吗?.env文件会突然改变吗?如果不会,那么你应该在命令行上手动创建符号链接。
最后,另一个解决方案是修复PHP脚本以包含正确的文件。您说“我不能手动更改路径”,因为您有很多,但没有什么可以阻止您编写自动扫描和修复脚本的实用程序。基本上您只需要替换以下行:

require_once('/root/locales/XXX');


用另一个实现,所以这是一个简单的搜索和替换。

相关问题