【问题标题】:Having trouble getting paths难以获得路径
【发布时间】:2018-12-20 19:56:00
【问题描述】:

我正在尝试获取包含 PHP 脚本的目录的路径。我们将其命名为 script.php。它还包含包含的 log.php

script.php:

include_once __DIR__.'/../lib/log.php';
func();

log.php:

function func() {
   file_put_contents(__DIR__.'/log', 'Log file successfully created');
}

我执行 script.php 期望 log 文件与 script.php 一起出现,但它没有发生。相反,会在 lib 目录中创建 log 文件以及 log.php 文件。
我在这里看到的唯一解决方法是通过函数将 dir 路径作为参数传递给 log.php,如下所示:

script.php:

include_once __DIR__.'/../lib/log.php';
func(__DIR__);

log.php:

function func($arg) {
   file_put_contents($arg.'/log', 'Log file successfully created');
}

是否真的可以通过 log.php 获取到 script.php 的路径而不传递任何参数?
我只想包含脚本,调用一个函数并创建新文件以及包含包含的脚本。

【问题讨论】:

    标签: php


    【解决方案1】:

    没有。除了与当前正在执行的文件相关的元数据之外,PHP 不会提供任何元数据。

    可以让你的文件路径更容易处理的方法是在你的配置或头文件中定义一个常量,它定义了应用程序根目录的绝对路径。例如:

    define('APPROOT', __DIR__);
    

    或者:

    define('APPROOT', __DIR__ . '/../myapp');
    

    然后,您可以在应用中定义路径,而无需尝试依赖脚本恰好存在的位置,例如:

    $log_file = APPROOT . '/log/foo.log';
    

    【讨论】:

    • 感谢您的回答。我还有一个问题:有没有办法制作一个 PHP 方式的全局变量或常量?配置文件中的某个位置,例如 php.ini 左右。
    • 我不知道。你为什么要那样做?
    • 我需要声明一个常量,它可以在任何地方都可用,不包括任何东西。
    猜你喜欢
    • 2015-12-17
    • 1970-01-01
    • 2010-09-29
    • 2011-12-19
    • 2015-05-13
    • 2016-02-24
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    相关资源
    最近更新 更多