title;' * Loads node with nid 1 and then prints its title. * @usage drush php:eval "file_unmanaged_copy(\'$HOME/Pictures/image.jpg\', \'public://image.jpg\');" * Copies a file whose path is determined by an environment\'s variable. Note the use of double quotes so the variable $HOME gets replaced by its value. * @usage drush php:eval "node_access_rebuild();" * Rebuild node access permissions. * @aliases eval,ev,php-eval * @bootstrap max */ public function evaluate($code, $options = ['format' => 'var_export']) { return eval($code . ';'); } /** * Run php a script after a full Drupal bootstrap. * * A useful alternative to eval command when your php is lengthy or you * can't be bothered to figure out bash quoting. If you plan to share a * script with others, consider making a full Drush command instead, since * that's more self-documenting. Drush provides commandline options to the * script via a variable called $extra. * * @command php:script * @option script-path Additional paths to search for scripts, separated by * : (Unix-based systems) or ; (Windows). * @usage drush php:script example --script-path=/path/to/scripts:/another/path * Run a script named example.php from specified paths * @usage drush php:script * List all available scripts. * @usage drush php:script foo -- apple --cider * Run foo.php script with argument 'apple' and option 'cider'. Note the * -- separator. * @aliases scr,php-script * @bootstrap max * @throws \Exception */ public function script(array $extra, $options = ['format' => 'var_export', 'script-path' => self::REQ]) { $found = false; $script = array_shift($extra); if ($script == '-') { return eval(stream_get_contents(STDIN)); } elseif (file_exists($script)) { $found = $script; } else { // Array of paths to search for scripts $searchpath['cwd'] = $this->getConfig()->cwd(); // Additional script paths, specified by 'script-path' option if ($script_path = $options['script-path']) { foreach (explode(PATH_SEPARATOR, $script_path) as $path) { $searchpath[] = $path; } } $this->logger()->debug(dt('Searching for scripts in ') . implode(',', $searchpath)); if (empty($script)) { $all = []; // List all available scripts. $files = Finder::create() ->files() ->name('*.php') ->depth(0) ->in($searchpath); foreach ($files as $file) { $all[] = $file->getRelativePathname(); } return implode("\n", $all); } else { // Execute the specified script. foreach ($searchpath as $path) { $script_filename = $path . '/' . $script; if (file_exists($script_filename . '.php')) { $script_filename .= '.php'; } if (file_exists($script_filename)) { $found = $script_filename; break; } $all[] = $script_filename; } if (!$found) { throw new \Exception(dt('Unable to find any of the following: @files', ['@files' => implode(', ', $all)])); } } } if ($found) { $return = include($found); // 1 just means success so don't return it. // http://us3.php.net/manual/en/function.include.php#example-120 if ($return !== 1) { return $return; } } } }