Nginx php符号链接获取文档根

Nginx php符号链接获取文档根,php,nginx,symlink,silex,Php,Nginx,Symlink,Silex,我在如下文件夹中有一个Silex PHP站点: /home/user/project/build-19434/ public function pathToUrl($path) { $root = $this->request->server->get('DOCUMENT_ROOT'); // essentially $_SERVER['DOCUMENT_ROOT'] return str_ireplace($root, '', str_replace("\\

我在如下文件夹中有一个Silex PHP站点:

/home/user/project/build-19434/
public function pathToUrl($path)
{
    $root = $this->request->server->get('DOCUMENT_ROOT'); // essentially $_SERVER['DOCUMENT_ROOT']
    return str_ireplace($root, '', str_replace("\\", '/', $path));
}
然后是nginx的符号链接

/usr/share/nginx/my.site/site -> /home/user/project/build-19434
我的网络根是

/usr/share/nginx/my.site/site/web
现在我有一个php类,它从
/home/user/project/build-19434/web/images/gallery/
获取所有图像并构建一个数组。稍后,我会像这样变换这些路径,以便将它们放入
标记中:

/home/user/project/build-19434/web/images/gallery/img1.jpg
/images/gallery/img1.jpg
这似乎不适用于符号链接,因为我正在执行以下操作:

/home/user/project/build-19434/
public function pathToUrl($path)
{
    $root = $this->request->server->get('DOCUMENT_ROOT'); // essentially $_SERVER['DOCUMENT_ROOT']
    return str_ireplace($root, '', str_replace("\\", '/', $path));
}
我的图像来自此目录(此设置来自与web不同的目录)

但是我的$\u服务器变量使用
/usr/share/nginx
路径,我获取图像的脚本是相对于
\uuuuu DIR\uuuu
的,它使用
/home/user
路径。请参见下面的服务器阵列部分(请求“多媒体资料/照片”页面时):

我如何将我的图像路径(可以如上所述进行符号链接)转换为web URL?我是否只需要将
\uuu DIR\uu
存储在
index.php
中,并将其用作我的根目录


我更喜欢在我的Windows开发机器上(没有符号链接,只是直接从git repo中运行)和在我的生产Linux机器上(使用符号链接将项目更新到最新版本)工作的解决方案。

我意识到我可能可以依赖
realpath
,因为我(应该)知道文档根存在。一个快速测试表明,这在我的Linux服务器上是可行的

public function pathToUrl($path)
{
    $root = realpath($this->request->server->get('DOCUMENT_ROOT')); // essentially $_SERVER['DOCUMENT_ROOT']
    return str_ireplace($root, '', str_replace("\\", '/', $path));
}
这个解决方案有什么问题吗


我还考虑基于
\uu DIR\uuu
存储web目录,然后对其进行规范化以删除
。/

我认为最好重写nginx配置以指向
/home
目录,而不是
/usr
,应该可以解决您的问题并消除对symlink的需求,但我希望有一些固定的nginx配置(
/usr/share/nginx…
)和多个应用程序版本(build-294a9、build-40ee等),这样我就可以轻松回滚或更新应用程序,而无需更改nginx配置。