/vendor/phpunit/phpunit/src/Util/PHP/Windows.php
https://gitlab.com/judielsm/Handora · PHP · 104 lines · 56 code · 15 blank · 33 comment · 3 complexity · 9b7716f980215ed5ec73e92f1ed65ee6 MD5 · raw file
- <?php
- /*
- * This file is part of PHPUnit.
- *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- use SebastianBergmann\Environment\Runtime;
- /**
- * Windows utility for PHP sub-processes.
- *
- * @since Class available since Release 3.5.12
- */
- class PHPUnit_Util_PHP_Windows extends PHPUnit_Util_PHP_Default
- {
- /**
- * @var string
- */
- private $tempFile;
- /**
- * {@inheritdoc}
- *
- * Reading from STDOUT or STDERR hangs forever on Windows if the output is
- * too large.
- *
- * @see https://bugs.php.net/bug.php?id=51800
- */
- public function runJob($job, array $settings = array())
- {
- $runtime = new Runtime;
- if (false === $stdout_handle = tmpfile()) {
- throw new PHPUnit_Framework_Exception(
- 'A temporary file could not be created; verify that your TEMP environment variable is writable'
- );
- }
- $process = proc_open(
- $runtime->getBinary() . $this->settingsToParameters($settings),
- array(
- 0 => array('pipe', 'r'),
- 1 => $stdout_handle,
- 2 => array('pipe', 'w')
- ),
- $pipes
- );
- if (!is_resource($process)) {
- throw new PHPUnit_Framework_Exception(
- 'Unable to spawn worker process'
- );
- }
- $this->process($pipes[0], $job);
- fclose($pipes[0]);
- $stderr = stream_get_contents($pipes[2]);
- fclose($pipes[2]);
- proc_close($process);
- rewind($stdout_handle);
- $stdout = stream_get_contents($stdout_handle);
- fclose($stdout_handle);
- $this->cleanup();
- return array('stdout' => $stdout, 'stderr' => $stderr);
- }
- /**
- * @param resource $pipe
- * @param string $job
- * @throws PHPUnit_Framework_Exception
- * @since Method available since Release 3.5.12
- */
- protected function process($pipe, $job)
- {
- if (!($this->tempFile = tempnam(sys_get_temp_dir(), 'PHPUnit')) ||
- file_put_contents($this->tempFile, $job) === false) {
- throw new PHPUnit_Framework_Exception(
- 'Unable to write temporary file'
- );
- }
- fwrite(
- $pipe,
- '<?php require_once ' . var_export($this->tempFile, true) . '; ?>'
- );
- }
- /**
- * @since Method available since Release 3.5.12
- */
- protected function cleanup()
- {
- unlink($this->tempFile);
- }
- }