簡體   English   中英

返回相對於站點根目錄的路徑,而不是服務器根目錄

[英]Return a path relative to the site root, not server root

為什么?

我需要檢測給定的路徑是否包含目錄app但僅在站點的根目錄之后(即忽略完整的服務器路徑,只搜索實際站點內的路徑)。

考慮以下路徑:

  • /root/var/www/app/app/Http true
  • /root/var/www/app/public false
  • C:\\Users\\john\\Sites\\example_com\\www\\app\\Http true

我嘗試過的...

我已經使用以下代碼解決了上述問題:

// 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 中的內置類/方法來實現這一點,那么也請隨時提出這些建議。

你應該能夠做這樣的事情:

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

幫助文檔: https : //laravel.com/docs/5.8/helpers#method-app-path

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM