使用符号链接在 PHP 代码中使用新文件夹

Using symlink to use new folder in PHP code

在我的旧服务器中,我曾经使用 /home/domain 文件夹。

在这个新服务器中我使用/var/www/vhosts/domain

在一个由很多 php 文件组成的非常古老的脚本中,它的用法类似于 /home/domain/public_html/...

我想知道是否有一种方法可以使用符号链接或类似的东西来使用那些 php 文件而不用新文件夹名称替换每一行。

首先,只想说在文件中硬编码路径并不是一个好主意。如果您需要完整路径,最好将文档根目录另存为 constant 并且如果您需要修改它,您只需更改一个地方。然后只需将脚本中的所有路径都设为相对于文档根目录即可。

如果您不想这样做,您还有其他一些选择。不幸的是,符号链接可能不是其中之一,因为您可能 运行 进入目录限制,除非您的 Web 服务器(例如 Apache)配置为也提供符号链接到的目录中的内容。

选项 1:查找和替换

使用sed 查找所有旧目录并将其替换为新目录。参见:Find and replace with sed in directory and sub directories。只需确保先备份所有文件,因为没有 "undo" 和 sed,如果你做错了,你真的会把事情搞砸。

选项 2:使用与之前相同的目录

编辑您站点的配置文件(例如,对于 Debian 上的 Apache,这将类似于 /etc/apache2/sites-enabled/example.com.conf)并将 DocumentRoot<Directory> 更改为旧路径。如果它不存在,然后实际创建它并复制你的文件。

方案三:绑定挂载(可能不推荐)

符号链接可能不起作用,但类似于符号链接的东西是绑定安装。这基本上是将文件系统的一部分安装到它的另一部分。关于这件事的一些东西只是尖叫着你正在尝试做的事情有点矫枉过正,但我​​把它张贴在这里主要是为了让你感兴趣,以防你想玩弄你的服务器。

编辑您服务器的 /etc/fstab 并在末尾添加如下内容:

/var/www/vhosts/domain/ /home/domain  none rw,bind 0 0 

确保 /home/domain 实际上还不存在,然后以 root 身份执行 mount -a,这应该会使用 /var/www/vhosts/domain/ 的内容为您创建 /home/domain