X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=misc.php;h=bbe7013b4368931baf7b181ce7954af880b6e8c0;hb=3746445139a650d2ffdc9fc8099af9645fcb2308;hp=ff0d2272931dcd5f2c3188dedc097a1889df7a00;hpb=22d5fb7ab7d4ee86bd59e194387dca268bd577a1;p=wfpl.git diff --git a/misc.php b/misc.php index ff0d227..bbe7013 100644 --- a/misc.php +++ b/misc.php @@ -18,16 +18,62 @@ # along with wfpl; if not, write to the Free Software Foundation, Inc., 51 # Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -function read_whole_file($name) { - $fd = fopen($name, 'r'); - if($fd === false) { - die("Failed to read file: '$name'"); +# returns an array containing just the elements of $pipes that are readable (without blocking) +# timeout 0 means don't wait, timeout NULL means wait indefinitely +function readable_sockets($pipes, $timeout = 0){ + $read = array_values($pipes); + $ret = stream_select($read, $write = NULL, $exceptions = NULL, $timeout); + if($ret === false) { + return false; + } + if($ret) { + return $read; + } else { + return array(); } - $file_data = fread($fd, filesize($name)); - fclose($fd); - return $file_data; } + +# Parameters: +# command +# stdin +# Returns: (as array) +# exit code +# stdout +function exec_pipe($command, $stdin) { + $descriptorspec = array( + 0 => array('pipe', 'r'), // stdin is a pipe that the child will read from + 1 => array('pipe', 'w'), // stdout is a pipe that the child will write to + 2 => array('file', '/dev/null', 'w') // stderr is a pipe that the child will write to + ); + + $process = proc_open($command, $descriptorspec, $pipes); + + if (is_resource($process)) { + fwrite($pipes[0], $stdin); + fclose($pipes[0]); + + while (!feof($pipes[1])) { + $chunk = fread($pipes[1], 1024); + $stdout .= $chunk; + sleep(0.5); + } + + fclose($pipes[1]); + + // It is important that you close any pipes before calling + // proc_close in order to avoid a deadlock + $return_value = proc_close($process); + + return array($return_value, $stdout); + } +} + + + + + + function unix_newlines($str) { $str = str_replace("\r\n", "\n", $str); return str_replace("\r", "\n", $str); @@ -43,6 +89,10 @@ function this_month() { return ereg_replace('^0', '', strftime('%m')); } +# return today's date in yyyy-mm-dd format +function today_ymd() { + return strftime('%Y-%m-%d'); +} # php4 is broken, in that you cannot set a default value for a parameter that # is passed by reference. So, this is set up to use the following screwy