簡體   English   中英

PHP __DIR__文件並通過一個目錄備份

[英]PHP __DIR__ of file and backup by one directory

我正在使用PHP 7運行laravel服務器。我正在嘗試使用以下文件來請求文件:

require __DIR__.'/../bootstrap/autoload.php';

我正在運行此腳本的文件位於一個名為public的文件夾中。 因此, __DIR__應該等於:

www.mydomain.com/myserver/public/index.php

腳本應創建的路徑應為:

www.mydomain.com/myserver/bootstrap/autoload.php

但是,不是動態創建正確的路徑,而是將“ /../”視為文字目錄,而不是告訴它返回原目錄。 所以我返回的路徑是:

www.mydomain.com/myserver/public/../bootstrap/autoload.php

任何想法為什么會發生這種情況? 提前謝謝了。

realpath手冊中:

realpath()擴展所有符號鏈接,並解析對輸入路徑中/./、/../和extra /字符的引用,並返回規范化的絕對​​路徑名

因此,以下應該工作

require realpath(__DIR__."../bootstrap/autoload.php")

但是,這不是必需的,因為require可以自行解決相對路徑。

由於您使用的是laravel,因此推薦的方法是:

require base_path("boostrap/autoload.php")

然而實際的建議方法是坐下來,不知道你為什么要做這個開始與因為如果你啟動laravel正常應該做所有這些事情對你,你永遠不應該需要做require的任何東西。

根據我的評論;

__DIR__是當前目錄,如果要返回上一步,可以使用dirname

如:

dirname(__DIR__);

因此,如果您當前的目錄是(並且您現在在哪里):

C:/服務器/htdocs/system/main/index.php

__DIR__將給您C:/server/htdocs/system/maindirname(__DIR__)將給您C:/server/htdocs/system/

因此,使用以下內容將滿足您的需求;

require(dirname(__DIR__) . "/bootstrap/autoload.php");

首先, __DIR__是指磁盤上的目錄 ,而不是URL,而不是文件。 所以這個說法是錯誤的:

我正在運行此腳本的文件位於一個名為public的文件夾中。 因此, __DIR__應該等於:www.mydomain.com/myserver/public/index.php

__DIR__在Linux系統上將類似於'/var/www/mydomain-com/public' ,在Windows系統上將類似於'C:\\wamp\\mydomain-com\\public'

因此,您擁有的代碼將生成一個字符串,例如'/var/www/mydomain-com/public/../bootstrap/autoload.php' 至少在Linux和類似系統上,此路徑等效於/var/www/mydomain-com/public/autoload.php因此您的代碼應該可以正常工作,並且是編寫此代碼的正常方法

如果您實際上想生成字符串'/var/www/mydomain-com/public/autoload.php' ,則可以使用dirname(__DIR__)如其他答案所示。 這樣就從路徑中刪除了最后一部分,因此(使用上面的虛構路徑)為您提供了'/var/www/mydomain-com'

暫無
暫無

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

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