diff --git a/scripts/__init_script__.php b/scripts/__init_script__.php
--- a/scripts/__init_script__.php
+++ b/scripts/__init_script__.php
@@ -52,6 +52,38 @@
     ini_set($config_key, $config_value);
   }
 
+  // Populate $_ENV. Normally, it is not populated for scripts running from
+  // the CLI. However, we need it in order to launch subprocesses with modified
+  // environments: we must pass the entire subprocess environment to functions
+  // like `proc_open()`.
+
+  // To do this, we must parse the list of variables out of phpinfo(). This
+  // is super gross. It would be nice to come up with a better way to do this.
+
+  ob_start();
+    phpinfo(INFO_ENVIRONMENT);
+  $env = ob_get_clean();
+
+  $env = preg_split('/[\n\r]/', $env);
+  $env = array_filter($env);
+
+  $env_map = array();
+  $seen_header = false;
+  foreach ($env as $key => $line) {
+    $line = explode(' => ', $line);
+    if ($seen_header) {
+      $val = getenv($line[0]);
+      if ($val !== false) {
+        $env_map[$line[0]] = $val;
+      }
+    } else if ($line[0] == 'Variable') {
+      $seen_header = true;
+    }
+  }
+
+  $_ENV = $env_map;
+
+
   if (!ini_get('date.timezone')) {
     // If the timezone isn't set, PHP issues a warning whenever you try to parse
     // a date (like those from Git or Mercurial logs), even if the date contains