diff --git a/src/console/ConsoleReaderThread.php b/src/console/ConsoleReaderThread.php index 148149f46..08caec796 100644 --- a/src/console/ConsoleReaderThread.php +++ b/src/console/ConsoleReaderThread.php @@ -33,6 +33,7 @@ use function fopen; use function preg_replace; use function proc_open; use function proc_terminate; +use function sprintf; use function stream_select; use function stream_socket_accept; use function stream_socket_get_name; @@ -87,18 +88,14 @@ final class ConsoleReaderThread extends Thread{ $address = stream_socket_get_name($server, false); if($address === false) throw new AssumptionFailedError("stream_socket_get_name() shouldn't return false here"); - $subEnv = $_ENV; //Windows sucks, and likes to corrupt UTF-8 file paths when they travel to the subprocess, so we base64 encode //the path to avoid the problem. This is an abysmally shitty hack, but here we are :( - $subEnv["PMConsoleReaderChildProcessFile"] = base64_encode(Path::join(__DIR__, 'ConsoleReaderChildProcess.php')); $sub = proc_open( - [PHP_BINARY, '-r', 'require base64_decode($_ENV["PMConsoleReaderChildProcessFile"], true);', $address], + [PHP_BINARY, '-r', sprintf('require base64_decode("%s", true);', base64_encode(Path::join(__DIR__, 'ConsoleReaderChildProcess.php'))), $address], [ 2 => fopen("php://stderr", "w"), ], - $pipes, - null, - $subEnv + $pipes ); if($sub === false){ throw new AssumptionFailedError("Something has gone horribly wrong");