Skip to content

重定向目录的原理

Mingliang Tan edited this page Feb 20, 2019 · 2 revisions

代码里有很多处对路径的硬编码

  • 对 php 目录的硬编码 /home/xiaoju/webroot/gulfstream/application
  • 对 log 目录的硬编码 /home/xiaoju/webroot/gulfstream/log
  • 对 apollo 开关目录的硬编码 /home/xiaoju/ep/apollo

Mac 机器上都没有 /home/xiaoju 这个目录。如果要修改源代码,则维护成本比较高。而且 php -S 启动之后只能处理一个模块。如果要回放多个模块则需要 php -S 启动多个进程。如果能够重定向目录,则可以

  • 不修改源代码,把硬编码的绝对路径改成要回放的代码的目录
  • 一个 php -S 进程回放任意模块

实现原理是用 libc 钩子修改了所有和路径相关的系统调用(主要是 open,fopen,xstat 和 lstat),把路径做一个replace。

Clone this wiki locally