При добавлении строки:
#!/usr/bin/env drush
в начало PHP-скрипта для автоматического запуска с использованием drush переменные __DIR__
и __FILE__
перестают возвращать имя файла и каталог моего скрипта и вместо этого возвращают пути drush.
Есть ли другая переменная, которую следует использовать в случае drush-скриптов, чтобы получить путь к скрипту и каталог?
Примечание. Когда я удаляю эту строку и вместо нее использую drush scr <myscript>
, __DIR__
и __FILE__
возвращают правильные пути.
[РЕДАКТИРОВАТЬ]
Чтобы проверить приведенные ниже предложения в ответе Хасана Баята:
Я запустил следующий скрипт:
<?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");
Используя командную строку:
drush scr script.php
И результаты следующие
__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.