Nginx php Symlink获取文档根目录

时间:2013-10-27 18:55:41

标签: php nginx symlink silex

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

/home/user/project/build-19434/

然后是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/获取所有图像并构建一个数组。稍后我会像这样转换这些路径,这样我就可以将它们放在<img>标签中:

/home/user/project/build-19434/web/images/gallery/img1.jpg
/images/gallery/img1.jpg

这似乎不适用于符号链接,因为我正在执行以下操作:

public function pathToUrl($path)
{
    $root = $this->request->server->get('DOCUMENT_ROOT'); // essentially $_SERVER['DOCUMENT_ROOT']
    return str_ireplace($root, '', str_replace("\\", '/', $path));
}

我的图片来自此目录(这是从与网页不同的目录设置)

$path = __DIR__.'/../../web/images/gallery';

但我的$ _SERVER变量使用/usr/share/nginx路径,我的脚本获取图片与__DIR__相关,后者使用/home/user路径。请参阅下面的服务器阵列部分(请求图库/照片页面时):

  array(35) {
    ["USER"]=> string(5) "nginx"
    ["HOME"]=> string(14) "/var/lib/nginx"
    ["SCRIPT_NAME"]=> string(26) "/index.php//gallery/photos"
    ["REQUEST_URI"]=> string(15) "/gallery/photos"
    ["DOCUMENT_URI"]=> string(26) "/index.php//gallery/photos"
    ["DOCUMENT_ROOT"]=> string(39) "/usr/share/nginx/my.site/site/web"
    ["SCRIPT_FILENAME"]=> string(49) "/usr/share/nginx/my.site/site/web/index.php"
    ["ORIG_SCRIPT_FILENAME"]=> string(65) "/usr/share/nginx/my.site/site/web/index.php//gallery/photos"
    ["PATH_TRANSLATED"]=> string(39) "/usr/share/nginx/my.site/site/web"
    ["PHP_SELF"]=> string(26) "/index.php//gallery/photos"
  }

如何将我的图像路径(可以按照描述符号链接)转换为网址?我只需要将__DIR__存储在index.php中并将其用作我的根目录吗?

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

1 个答案:

答案 0 :(得分:0)

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

public function pathToUrl($path)
{
    $root = realpath($this->request->server->get('DOCUMENT_ROOT')); // essentially $_SERVER['DOCUMENT_ROOT']
    return str_ireplace($root, '', str_replace("\\", '/', $path));
}

这个解决方案有问题吗?

我还在考虑根据__DIR__存储网络目录,然后对其进行规范化以删除../