__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