@@ -31,9 +31,9 @@ class ProcWrapper
3131 private  $ command
3232
3333 /** 
34-  * @var string 
34+  * @var string|null  
3535 */ 
36-  private  $ workDir =  '' ;
36+  private  $ workDir
3737
3838 /** 
3939 * @var array 
@@ -100,13 +100,18 @@ public static function new(string $command = '', array $descriptors = []): self
100100 */ 
101101 public  static  function  runCmd (string  $ commandstring  $ workDir'' ): array 
102102 {
103+  $ isWindowsOS'\\'  === DIRECTORY_SEPARATOR ;
103104 $ descriptors
104105 0  => ['pipe ' , 'r ' ], // stdin - read channel 
105106 1  => ['pipe ' , 'w ' ], // stdout - write channel 
106107 2  => ['pipe ' , 'w ' ], // stdout - error channel 
107108 3  => ['pipe ' , 'r ' ], // stdin - This is the pipe we can feed the password into 
108109 ];
109110
111+  if  ($ isWindowsOS
112+  unset($ descriptors3 ]);
113+  }
114+ 
110115 $ procnew  ProcWrapper ($ command$ descriptors
111116 $ procrun ($ workDir
112117
@@ -121,12 +126,13 @@ public static function runCmd(string $command, string $workDir = ''): array
121126 $ errorstream_get_contents ($ pipes2 ]);
122127 fclose ($ pipes2 ]);
123128
124-  // TODO: Write passphrase in pipes[3]. 
125-  fclose ($ pipes3 ]);
129+  if  (!$ isWindowsOS
130+  // TODO: Write passphrase in pipes[3]. 
131+  fclose ($ pipes3 ]);
132+  }
126133
127134 // Close all pipes before proc_close! $code === 0 is success. 
128135 $ code$ procclose ();
129- 
130136 return  [$ code$ output$ error
131137 }
132138
@@ -220,14 +226,22 @@ public function open(): self
220226 throw  new  InvalidArgumentException ('The want execute command is cannot be empty ' );
221227 }
222228
223-  $ workDir$ this workDir ;
229+  $ workDir$ this workDir  ?:  null ;
224230 $ options$ this options ;
225231
226232 $ options'suppress_errors ' ] = true ;
227233 if  ('\\'  === DIRECTORY_SEPARATOR ) { // windows 
228234 $ options'bypass_shell ' ] = true ;
229235 }
230236
237+  // ERROR on windows 
238+  // proc_open(): CreateProcess failed, error code - 123 
239+  // 
240+  // https://docs.microsoft.com/zh-cn/windows/win32/debug/system-error-codes--0-499- 
241+  // The filename, directory name, or volume label syntax is incorrect. 
242+  // FIX: 
243+  // 1. runCmd() not set $descriptors[3] on windows 
244+  // 2. $workDir set as null when is empty. 
231245 $ processproc_open ($ command$ this descriptors , $ this pipes , $ workDir$ this runENV , $ options
232246
233247 if  (!is_resource ($ process
@@ -357,9 +371,9 @@ public function getPipes(): array
357371 }
358372
359373 /** 
360-  * @return string 
374+  * @return string|null  
361375 */ 
362-  public  function  getWorkDir (): string 
376+  public  function  getWorkDir (): ? string 
363377 {
364378 return  $ this workDir ;
365379 }
0 commit comments