array("pipe", "w"), 3 => array("file", $d0_blind_id_d0pk, "r"), 4 => array("pipe", "r"), 5 => array("pipe", "r") ), $pipes, null, null, array("binary_pipes") ); if(!$checker) die("Cannot start process"); $outfh = $pipes[1]; $buffers = array( 4 => $data, 5 => base64_decode($sig) ); $rpipes = array( 4 => $pipes[4], 5 => $pipes[5] ); foreach($rpipes as $p) stream_set_blocking($p, 0); while(!empty($rpipes)) { $readers = null; $writers = $rpipes; $errorers = $rpipes; $n = stream_select($readers, $writers, $errorers, 1, 0); if($n == 0) break; $n = 0; foreach($errorers as $e) { $i = array_search($e, $rpipes); if($i === false) continue; fclose($pipes[$i]); unset($buffers[$i]); unset($rpipes[$i]); ++$n; } foreach($writers as $w) { $i = array_search($w, $rpipes); if($i === false) continue; $written = fwrite($w, $buffers[$i], strlen($buffers[$i])); if($written) $buffers[$i] = substr($buffers[$i], $written); if($buffers[$i] == "") { fclose($pipes[$i]); unset($buffers[$i]); unset($rpipes[$i]); } ++$n; } if(!$n) break; } if($buffers) die("could not write data to process"); $status = stream_get_line($outfh, 8192, "\n"); $idfp = stream_get_line($outfh, 8192, "\n"); $ret = proc_close($checker); if($ret != 0) return array(null, null); return array($idfp, $status); } else return array("", 0); } ?>