PHP Magic Constants

时间:2009-09-29 09:03:54

标签: constants php

我正在尝试获取正在运行的脚本的文件名(但不是它正在调用的包含)。

echo basename(__FILE__); # will always output include.php

echo basename($_SERVER['SCRIPT_FILENAME']);
# This will do what I want (echo myscript.php), but I was wondering if there was
# a better way to grab it, as I have had problems with $_SERVER['SCRIPT_FILENAME']
# when running certain scripts from a cron.

有什么建议吗?

<?
#myscript.php
require('include.php');
echo "Hello all";
?>

<?
#include.php
echo basename(__FILE__);
echo basename($_SERVER['SCRIPT_FILENAME']);
?>

谢谢!

5 个答案:

答案 0 :(得分:2)

您必须使用 $ _ SERVER ['SCRIPT_NAME'] ,如reserved_variables手册页

中所述

'的 SCRIPT_NAME '     包含当前脚本的路径。这对需要指向自己的页面很有用。 __FILE__常量包含当前(即包含)文件的完整路径和文件名。

答案 1 :(得分:1)

如果您在crontab中使用了`php -f /home/me/foo.php(即php-cli),您可能也会对$argv数组感兴趣。 $ argv [0]包含最初传递给php的脚本的路径/名称。

答案 2 :(得分:1)

我对你所拥有的东西进行了一些测试,并且没有它,这是一种对我来说很好的溶剂;) 代码名为Debug.php和bellow的文件是响应日志文件名的方法。

在浏览器和cron中,我的结果是: test.log

public static function filename($value = null) {
        static $_filename;
        if (isset($value)) $_filename = $value;
        if ($_filename === null) {
            $_filename = '';
            if (strlen($_SERVER["SCRIPT_FILENAME"])) {
                $filename = $_SERVER["SCRIPT_FILENAME"];
            } else if (count($_SERVER["argv"])) { // for cron calls
                $filename = $_SERVER["argv"][0];
            }
            if (!strlen($filename)) {
                $filename = __FILE__;
            }
            $arr = explode('.', basename($filename));
            $_filename = array_shift($arr) . '.' . Debug::extension();
        }
        return $_filename;
    }

答案 3 :(得分:0)

我记得使用'$_SERVER["SCRIPT_NAME"]',但不知道玉米是否有问题。

答案 4 :(得分:0)

从命令行执行PHP时(可能是你如何设置cron) SCRIPT_FILENAME 将包含用户指定的路径。如果您的脚本以../myscript.php执行,那么这就是您将获得的价值。无论如何,当你通过basename()传递价值时,它应该仍然适合你的需求。你究竟遇到了什么问题?

SCRIPT_NAME 是另一个要查看的预定义变量,但这并不总是包含执行文件的绝对路径。