function drush_start_browser

8.0.x exec.inc drush_start_browser($uri = NULL, $sleep = FALSE, $port = FALSE)
6.x exec.inc drush_start_browser($uri = NULL, $sleep = FALSE)
7.x exec.inc drush_start_browser($uri = NULL, $sleep = FALSE, $port = FALSE)
5.x exec.inc drush_start_browser($uri = NULL, $sleep = FALSE)
master exec.inc drush_start_browser($uri = NULL, $sleep = FALSE, $port = FALSE)

Starts a background browser/tab for the current site or a specified URL.

Uses a non-blocking proc_open call, so Drush execution will continue.

Parameters

$uri: Optional URI or site path to open in browser. If omitted, or if a site path is specified, the current site home page uri will be prepended if the sites hostname resolves.

Return value

TRUE if browser was opened, FALSE if browser was disabled by the user or a, default browser could not be found.

Related topics

3 calls to drush_start_browser()
drush_browse in commands/core/browse.drush.inc
Command callback.
drush_core_runserver in commands/runserver/runserver.drush.inc
Callback for runserver command.
drush_user_login in commands/user/user.drush.inc
Displays a one time login link for the given user.

File

includes/exec.inc, line 394
Functions for executing system commands. (e.g. exec(), system(), ...).

Code

function drush_start_browser($uri = NULL, $sleep = FALSE, $port = FALSE) {
  if ($browser = drush_get_option('browser', TRUE)) {
    // We can only open a browser if we have a DISPLAY environment variable on
    // POSIX or are running Windows or OS X.
    if (!drush_get_context('DRUSH_SIMULATE') && !getenv('DISPLAY') && !drush_is_windows() && !drush_is_osx()) {
      drush_log(dt('No graphical display appears to be available, not starting browser.'), LogLevel::NOTICE);
      return FALSE;
    }
    $host = parse_url($uri, PHP_URL_HOST);
    if (!$host) {
      // Build a URI for the current site, if we were passed a path.
      $site = drush_get_context('DRUSH_URI');
      $host = parse_url($site, PHP_URL_HOST);
      $uri = $site . '/' . ltrim($uri, '/');
    }
    // Validate that the host part of the URL resolves, so we don't attempt to
    // open the browser for http://default or similar invalid hosts.
    $hosterror = (gethostbynamel($host) === FALSE);
    $iperror = (ip2long($host) && gethostbyaddr($host) == $host);
    if (!drush_get_context('DRUSH_SIMULATE') && ($hosterror || $iperror)) {
      drush_log(dt('!host does not appear to be a resolvable hostname or IP, not starting browser. You may need to use the --uri option in your command or site alias to indicate the correct URL of this site.', array('!host' => $host)), LogLevel::WARNING);
      return FALSE;
    }
    if ($port) {
      $uri = str_replace($host, "localhost:$port", $uri);
    }
    if ($browser === TRUE) {
      // See if we can find an OS helper to open URLs in default browser.
      if (drush_shell_exec('which xdg-open')) {
        $browser = 'xdg-open';
      }
      else if (drush_shell_exec('which open')) {
        $browser = 'open';
      }
      else if (!drush_has_bash()) {
        $browser = 'start';
      }
      else {
        // Can't find a valid browser.
        $browser = FALSE;
      }
    }
    $prefix = '';
    if ($sleep) {
      $prefix = 'sleep ' . $sleep . ' && ';
    }
    if ($browser) {
      drush_log(dt('Opening browser !browser at !uri', array('!browser' => $browser, '!uri' => $uri)));
      if (!drush_get_context('DRUSH_SIMULATE')) {
        $pipes = array();
        proc_close(proc_open($prefix . $browser . ' ' . drush_escapeshellarg($uri) . ' 2> ' . drush_bit_bucket() . ' &', array(), $pipes));
      }
      return TRUE;
    }
  }
  return FALSE;
}