Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中获取确切的项目文件夹_Php_Laravel_Directory_Wamp - Fatal编程技术网

如何在PHP中获取确切的项目文件夹

如何在PHP中获取确切的项目文件夹,php,laravel,directory,wamp,Php,Laravel,Directory,Wamp,我确实对此做了很多研究,但似乎这与其他研究不同。所以我现在有一个项目文件夹todooop,我只想得到这个项目的确切位置/url,所以我想得到http://localhost/todo-oop/ 代码: <?php $project_folder = explode('\\', dirname(__FILE__)); $root_directory = $_SERVER['SERVER_NAME'] . '/' . end($project_folder); ?> 试试这个

我确实对此做了很多研究,但似乎这与其他研究不同。所以我现在有一个项目文件夹
todooop
,我只想得到这个项目的确切位置/url,所以我想得到
http://localhost/todo-oop/

代码:

<?php
  $project_folder = explode('\\', dirname(__FILE__));
  $root_directory = $_SERVER['SERVER_NAME'] . '/' . end($project_folder);
?>
试试这个

<?php echo "http://" . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'].'/'; ?>


根据这一点,希望它能起作用。

PHP的一大优点是您可以阅读源代码。如果您想知道
asset()
函数是如何工作的,只需阅读代码即可

// Illuminate/Foundation/helpers.php
function asset($path, $secure = null)
{
    return app('url')->asset($path, $secure);
}
因此,您为
资产
函数提供了一条要包含的内容的路径。
asset
函数依次将其提供给容器实例进行解析(app()
),然后Laravel开始使用一船魔法。简而言之,它只是试图将正确的URL解析为您给定的路径

Laravel的缺点是使用了大量的魔法代码来防止样板文件。这通常很有用,但会使您很难看到内部发生了什么。框架通常在样板和魔术之间进行权衡,Laravel倾向于在任何时候都放弃样板

现在回答

Laravel所能做的非常聪明的事情是,每当有人连接到你的应用程序时,设置一个属性/全局/变量

// bootstrap/app.php
$app = new Illuminate\Foundation\Application(
    realpath(__DIR__.'/../')
);

// Illuminate/Foundation/Application
public function __construct($basePath = null) 
{
    if ($basePath) {
        $this->setBasePath($basePath);
    }
}
现在,您可以通过调用助手,从应用程序中的任何位置访问此路径(即项目根)。这实际上返回了我们刚才设置的确切路径:

function base_path($path = '')
{
    return app()->basePath().($path ? DIRECTORY_SEPARATOR.$path : $path);
}

希望这个答案对你有所帮助

正如所建议的,一个简单的解决方案是创建一个配置文件(json、xml或php-我将使用最后一个),其中包含在域根目录中找到的重要信息,在本例中是域名:

/config.php

<?php
define('DS',DIRECTORY_SEPARATOR);
define('ROOT_DIR',__DIR__);
define('INCLUDES',ROOT_DIR.DS.'includes');
define('FUNCTIONS',INCLUDES.DS.'functions');
# Define base domain
define('SITE_URL','//localhost');
function asset($path=false)
{
    # Check if a project folder is set
    $proj     = (defined('PROJECT_NAME'))?  PROJECT_NAME : '';
    # See if the current mode uses SSL
    $protocol = (isset($_SERVER['HTTPS']))? 's' : '';
    # Create a path (if no project, it will leave "//" so you need to replace that)
    $final    = str_replace('//','/','/'.trim($proj,'/').'/'.ltrim($path,'/'));
    # Send back full url
    return "http{$protocol}:".SITE_URL.$final;
}
<?php
# Include config
require_once(__DIR__.DIRECTORY_SEPARATOR.'config.php');
# Include the asset function
include_once(FUNCTIONS.DS.'asset.php');
# Define the current project. If you are always accessing this,
# then you may want to have it in the config, but if you are doing multiple projects
# you can leave the define in the root of each project file
define('PROJECT_NAME','todo-oop');
# Use asset to write the asset path
echo asset('/partials/css/todo.css');
这基本上就是你要做的

/index.php

<?php
define('DS',DIRECTORY_SEPARATOR);
define('ROOT_DIR',__DIR__);
define('INCLUDES',ROOT_DIR.DS.'includes');
define('FUNCTIONS',INCLUDES.DS.'functions');
# Define base domain
define('SITE_URL','//localhost');
function asset($path=false)
{
    # Check if a project folder is set
    $proj     = (defined('PROJECT_NAME'))?  PROJECT_NAME : '';
    # See if the current mode uses SSL
    $protocol = (isset($_SERVER['HTTPS']))? 's' : '';
    # Create a path (if no project, it will leave "//" so you need to replace that)
    $final    = str_replace('//','/','/'.trim($proj,'/').'/'.ltrim($path,'/'));
    # Send back full url
    return "http{$protocol}:".SITE_URL.$final;
}
<?php
# Include config
require_once(__DIR__.DIRECTORY_SEPARATOR.'config.php');
# Include the asset function
include_once(FUNCTIONS.DS.'asset.php');
# Define the current project. If you are always accessing this,
# then you may want to have it in the config, but if you are doing multiple projects
# you can leave the define in the root of each project file
define('PROJECT_NAME','todo-oop');
# Use asset to write the asset path
echo asset('/partials/css/todo.css');

正如@Loek所演示的,您可以使用一个框架来创建这些类型的路径,或者您可以创建类(如果您有足够的信心这样做的话)来完成我所演示的基本工作。使用类/框架的好处是,它们将具有更大的灵活性和动态交互,但对于一个非常直接的过程,您可以使用上述方法执行这些类型的路径。

$\u SERVER['DOCUMENT\u ROOT']@DevinGray Hi。它将返回
C:/wamp/www
,这不是我想要的。$\u服务器['PHP\u SELF']将返回准确的路径,但它不是超级安全的。您可以将
C:\wamp\www
替换为您想要获取的服务器名
http://localhost/todo-oop/
具体依据是什么?@smith抱歉,我不明白你到底想问什么。嗨,Loek。对不起,我不明白你的答案。