标签: magic-constants

xDebug奇怪的__DIR__常量

我正在编写一个加载YAML文件的PHP CLI应用程序.尝试在xDebug会话中执行此操作时:

if (file_exists(__DIR__ . '/../../foo/bar')
{
    /* ... */
}
Run Code Online (Sandbox Code Playgroud)

__DIR__永诺是xdebug:这将导致百达至falsefile_exists().

有什么工作吗?

php xdebug magic-constants

19
推荐指数
1
解决办法
2833
查看次数

Python相当于PHP的__DIR__魔术常量?

在PHP中,__DIR__魔术常量计算到包含该常量出现的文件的目录的路径.

Python中是否有相同的功能?

php python magic-constants

16
推荐指数
1
解决办法
4298
查看次数

当前PHP脚本相对于文档根目录的路径

TL; DR:当尝试在PHP include命令包含的页面上使用相对链接时,此页面上的最后一个代码示例有哪些替代方案?


我正在尝试include()链接到.css文档的文件,问题是我需要从多个(不同的)目录中包含此文件.我的目录结构看起来有点像这样:

www
??? (getpath.php)
?
??? css
?   ??? style.css
??? php
?   ??? header.php
??? content
    ??? index.php
    ??? posts
        ??? index.php
Run Code Online (Sandbox Code Playgroud)

(我header.php在两个index.php文件中都包含.header.php是引用的文件style.css(浏览器需要找到的文件).例如:使用时../css/style.css,CSS会显示在我的content/index.php但不会显示在我的文件中content/posts/index.php,因为浏览器正在寻找content/css/index.php.)

放置在文档根目录的子目录中时,网站也应该工作,而不是在文档根目录中.出于这个原因,我不能只使用/css/style.css(相对于服务器根目录)链接到我的CSS样式表.

我想(请纠正我,如果我错了!)告诉浏览器在哪里找到CSS文档的最简单方法可能是指定相对于文档根目录的路径.由于我希望我的网站位于文档根目录的子目录中(并且希望避免使用config文件来存储子目录),我需要找出网站所在子目录的相对路径.我的想法是放置getpath.php在我的网站的根目录(不是文档根目录)中调用的文件.在该文件中,我写了以下内容:

<?php
  define('PROJECT_SUBDIRECTORY', $_SERVER['PHP_SELF']);
?>
Run Code Online (Sandbox Code Playgroud)

但是,我注意到这给了我用户在浏览器中请求的PHP文件的相对目录(例如content/index.php)而不是包含的文件(getpath.php).我也读过这PHP_SELF是基于REQUEST_URI,这是不安全的.我在这里找到了这个解决方案:

define('PROJECT_DIR', …
Run Code Online (Sandbox Code Playgroud)

php directory-structure relative-path document-root magic-constants

9
推荐指数
1
解决办法
8165
查看次数

为什么不应在Symfony中使用绝对路径常量__DIR__和__FILE__

我使用SensioLabs Insight来控制我的代码质量.

对于简单的文件上传,我必须获取上传目录的绝对路径:

protected function getUploadRootDir()
{
    // the absolute directory path where uploaded
    return __DIR__.'/../../../../web/'.$this->getUploadDir();
}
Run Code Online (Sandbox Code Playgroud)

代码直接来自官方文档(如何使用Doctrine处理文件上传)

但SLInsight提出了一个警告,如果分析的代码中包含__DIR____FILE__PHP魔术常量:

__DIR____FILE__常量可能与Symfony资源覆盖系统冲突.

如何使用这些常量会导致与Symfony冲突?

我怎样才能在代码中避免它们?

php symfony magic-constants

9
推荐指数
2
解决办法
3812
查看次数

从include()获取调用文件名

我想从包含的文件中获取包含另一个文件的文件的名称.

我知道还有就是__FILE__魔法恒定的,但这样做没有帮助,因为它返回的名称包含文件,而不是包括一个.

有没有办法做到这一点?或者由于PHP的解释方式是不可能的?

php include include-path magic-constants

8
推荐指数
4
解决办法
1万
查看次数

PHP从记录事件中获取行号

好吧,我有一个问题这里为我的日志类,但我希望能够调用脚本的行号添加到日志文件条目.

我见过__Line __但这给了我这行所在行的行号.

例:

a.php只会

$log = new Logger();
$log->debug('hello'); // Say this is line #20
Run Code Online (Sandbox Code Playgroud)

现在在debug()的Logger.php类中,我使用__Line __ Magic Constant,例如第300行.当我运行脚本时,我希望日志条目读取'在第20行',但它在'第300行'上读取.除了将行号传递给函数之外还有其他方法可以做到这一点吗?

示例调试类函数

public function debug($message) {
        if(DEBUG) {
            $this->calling_script = $this->getScriptBaseName();
            $this->log_file = LOG_FILE_DIRECTORY."/".$this->calling_script.".log";
            $this->fh = fopen($this->log_file, 'a') or die("Can't open log file: ".$this->log_file);

            if($this->first_run) {
                $this->log_entry = "\n[" . date("Y-m-d H:i:s", mktime()) . "][debug][line:".__LINE__."]:\t".$message."\n";
            } else {
                $this->log_entry = "[" . date("Y-m-d H:i:s", mktime()) . "][debug][line:".__LINE__."]:\t".$message."\n";
            }       
            fwrite($this->fh, $this->log_entry);
            fclose($this->fh);

            $this->first_run = false;
        }       
    }
Run Code Online (Sandbox Code Playgroud)

编辑:debug_backtrace()工作得很好!!! …

php logging line-numbers magic-constants

7
推荐指数
1
解决办法
5540
查看次数

使用PHP的Magic Constants的最佳实践

什么是PHP的魔术常量的使用的最佳实践,比如__LINE__,__FILE__,__FUNCTION__,__CLASS____METHOD__

例如,我使用__LINE____CLASS__找到SQL错误,如下所示:

$result = mysql_query($query)
or die("Error SQL line ".__LINE__ ." class ".__CLASS__." : ".mysql_error());
Run Code Online (Sandbox Code Playgroud)

这是可接受的做法吗?

php magic-constants

6
推荐指数
1
解决办法
3312
查看次数

PHP魔术常量不起作用

当我输入这个PHP代码时,魔术常量_LINE_只是按字面输出.

<!DOCTYPE html>
<html>
<body>

<?php

echo "This is line"._LINE_."blah";

?>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

输出:

 This is line_LINE_
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

php magic-constants

0
推荐指数
1
解决办法
391
查看次数