__PHP Drush脚本中的DIR_u;没有返回脚本路径

__PHP Drush脚本中的DIR_u;没有返回脚本路径,php,drush,Php,Drush,添加行时: #!/usr/bin/env drush 在要使用drush自动运行的PHP脚本的顶部,变量\uuuuu DIR\uuuuu和\uuuuu FILE\uuuu停止返回我的脚本文件名和目录,而是返回drush路径 对于drush脚本,是否应该使用另一个变量来获取脚本路径和目录 注意:当我删除该行并使用drush scr时,\uuuuuu DIR\uuuuu和\uuu FILE\uuuu返回正确的路径 [编辑] 测试Hasan Bayat回答中的以下建议: 我运行了以下脚本: <

添加行时:

#!/usr/bin/env drush
在要使用drush自动运行的PHP脚本的顶部,变量
\uuuuu DIR\uuuuu
\uuuuu FILE\uuuu
停止返回我的脚本文件名和目录,而是返回drush路径

对于drush脚本,是否应该使用另一个变量来获取脚本路径和目录

注意:当我删除该行并使用
drush scr
时,
\uuuuuu DIR\uuuuu
\uuu FILE\uuuu
返回正确的路径

[编辑]

测试Hasan Bayat回答中的以下建议:

我运行了以下脚本:

<?php
print('__DIR__ value is: '.__DIR__."\n");
print('__FILE__ value is: '.__FILE__."\n");
print('SCRIPT_FILENAME is: '.$_SERVER['SCRIPT_FILENAME']."\n");
print('PATH_TRANSLATED is: '.$_SERVER['PATH_TRANSLATED']."\n");
print('from backtrace: '.debug_backtrace()[count(debug_backtrace()) - 1]['file']."\n");
print('included_files: '.get_included_files()[0]."\n");
结果如下

__DIR__ value is: /path/to/my/script
__FILE__ value is: /path/to/my/script/script.php
SCRIPT_FILENAME is: /path/to/current/dir/index.php
PATH_TRANSLATED is: /usr/local/bin/drush
from backtrace: /usr/local/bin/drush
included_files: /usr/local/bin/drush
然后我更改了脚本,添加了一行
#/usr/bin/env drush
位于顶部。并使用以下命令重新运行脚本:

./script.php
现在的结果如下:

__DIR__ value is: phar:///usr/local/bin/drush/commands/core
__FILE__ value is: phar:///usr/local/bin/drush/commands/core/core.drush.inc(1194) : eval()'d code
SCRIPT_FILENAME is: /path/to/current/dir/index.php
PATH_TRANSLATED is: /usr/local/bin/drush
from backtrace: /usr/local/bin/drush
included_files: /usr/local/bin/drush

因此,如果drush第一行被添加到脚本中,显然所有建议的解决方案都不起作用。

有几种方法,但这里有两种:

  • 使用
    $\u-SERVER
    全局变量:检查
    $\u-SERVER[“SCRIPT\u-FILENAME”]
    是否存在并指向当前文件,如果不起作用,请使用
    $\u-SERVER[“PATH\u-TRANSLATED”]
    它可能起作用
  • 如果
    $\u服务器
    变量不起作用,请使用以下代码:
  • $stack=debug_backtrace();
    $firstFrame=$stack[count($stack)-1];
    $initialFile=$firstFrame['file'];
    
    如果它们都不起作用,请使用
    getcwd()
    以获取当前工作目录并按文件名显示

    编辑:第三种方法是使用
    获取包含的文件()

    $included_files=get_included_files();
    echo$包含的_文件[0];//输出当前脚本路径
    
    __DIR__ value is: phar:///usr/local/bin/drush/commands/core
    __FILE__ value is: phar:///usr/local/bin/drush/commands/core/core.drush.inc(1194) : eval()'d code
    SCRIPT_FILENAME is: /path/to/current/dir/index.php
    PATH_TRANSLATED is: /usr/local/bin/drush
    from backtrace: /usr/local/bin/drush
    included_files: /usr/local/bin/drush