запустить скрипт из CLI, но запретить запуск при включении - PullRequest
2 голосов
/ 01 января 2012

У меня есть php-скрипт, который я часто запускаю с помощью CLI (обычный терминал ssh).

<?php

    class foo {
        public function __construct() {
            echo("Hello world");
        } 
    }

    // script starts here...
    $bar = new foo();

?>

Когда я запускаю код с помощью php filename.php, я получаю Hello world застоя, как и ожидалось. Проблема в том, что когда я включаю файл из другого php-файла, я получаю то же самое (чего я не хочу).

Как я могу предотвратить запуск кода, когда файл включает, но все еще использует его как скрипт CLI?

Ответы [ 3 ]

5 голосов
/ 01 января 2012

Вы можете проверить, если $argv[0] == __FILE__, чтобы увидеть, совпадает ли файл, вызываемый из командной строки, с включенным файлом.

class foo {
    public function __construct() {

      // Output Hello World if this file was called directly from the command line
      // Edit: Probably need to use realpath() here as well..
      if (isset($argv) && realpath($argv[0]) == __FILE__) {  
        echo("Hello world");
      }
    } 
}
1 голос
/ 01 января 2012

вы можете использовать php функцию get_included_files и проверить, находится ли ваш файл в массиве (используя in_array)

http://php.net/manual/en/function.get-included-files.php

Надеюсь, это поможет вам.

0 голосов
/ 05 декабря 2014

Вы должны проверить, что ОБА работаете в среде CLI, а НЕ «включены».Смотрите мой переписать ваш образец ниже:

<?php

    class foo {
        public function __construct() {
            echo("Hello world");
        } 
    }

    // script starts here...
    if (substr(php_sapi_name(), 0, 3) == 'cli'
        && basename($argv[0]) == basename(__FILE__) ) {

        // this code will execute ONLY if the run from the CLI
        // AND this file was not "included"
        $bar = new foo();

    }

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...