我正在尝试获取正在运行的脚本的文件名(但不是它正在调用的包含)。
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']);
?>
谢谢!
答案 0 :(得分:2)
您必须使用 $ _ SERVER ['SCRIPT_NAME'] ,如reserved_variables手册页
中所述 '的 SCRIPT_NAME 强>'
包含当前脚本的路径。这对需要指向自己的页面很有用。 __FILE__
常量包含当前(即包含)文件的完整路径和文件名。
答案 1 :(得分:1)
答案 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 是另一个要查看的预定义变量,但这并不总是包含执行文件的绝对路径。