返回相对于站点根目录而不是服务器根目录的路径

时间:2019-07-23 00:26:02

标签: php laravel lumen

为什么?

我需要检测给定路径是否包含目录app,但仅在站点的根目录之后(即忽略完整的服务器路径,仅搜索实际站点内的路径)。

请考虑以下路径:

  • /root/var/www/app/app/Http
  • /root/var/www/app/public 错误
  • C:\Users\john\Sites\example_com\www\app\Http

我尝试过的...

我已使用以下代码解决了上述问题:

// Normalise the directory separators in the document
// root
$document_root = str_replace('/', DIRECTORY_SEPARATOR, $_SERVER['DOCUMENT_ROOT']);

// Remove the '/public' path from the end, this should 
// give us the path to the site root...
$site_root = str_replace(DIRECTORY_SEPARATOR . 'public', '', $document_root);

// Normalise the directory separators in the supplied
// path
$normalised_path = str_replace('/', DIRECTORY_SEPARATOR, $path['path']);

// Remove the site root from the beginning of the path
$stripped_path = str_replace($site_root, '', $normalised_path);

// Now we can run our tests...

我的问题

仅仅是我还是上面的代码对于这样一个简单的任务似乎很荒谬?谁能建议一种更好或更干净的方法来实现这一目标?本质上,我正在尝试从给定路径中剥离服务器根目录,以便为我提供相对于站点根目录的路径...

如果有一种方法可以使用Laravel / Lumen中的内置类/方法来实现,那么请随时提出这些建议。

1 个答案:

答案 0 :(得分:2)

您应该能够执行以下操作:

app_path助手将返回app的路径(即您的应用程序代码)

Str::contains('/root/var/www/app/app/Http', app_path()); // true
Str::contains('/root/var/www/app/public', app_path()); // false
Str::contains('C:\Users\john\Sites\example_com\www\app\Http', app_path()); // true

Helper Docs:https://laravel.com/docs/5.8/helpers#method-app-path