3 # Copyright (C) 2006 Jason Woofenden
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation, either version 3 of the License, or
8 # (at your option) any later version.
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with this program. If not, see <http://www.gnu.org/licenses/>.
18 # returns an array containing just the elements of $pipes that are readable (without blocking)
19 # timeout 0 means don't wait, timeout NULL means wait indefinitely
20 function readable_sockets($pipes, $timeout = 0){
21 $read = array_values($pipes);
22 $ret = stream_select($read, $write = NULL, $exceptions = NULL, $timeout);
40 function exec_pipe($command, $stdin) {
41 $descriptorspec = array(
42 0 => array('pipe', 'r'), // stdin is a pipe that the child will read from
43 1 => array('pipe', 'w'), // stdout is a pipe that the child will write to
44 2 => array('file', '/dev/null', 'w') // stderr is a pipe that the child will write to
47 $process = proc_open($command, $descriptorspec, $pipes);
49 if (is_resource($process)) {
50 fwrite($pipes[0], $stdin);
53 while (!feof($pipes[1])) {
54 $chunk = fread($pipes[1], 1024);
61 // It is important that you close any pipes before calling
62 // proc_close in order to avoid a deadlock
63 $return_value = proc_close($process);
65 return array($return_value, $stdout);
70 function unix_newlines($str) {
71 $str = str_replace("\r\n", "\n", $str);
72 return str_replace("\r", "\n", $str);
76 # return current year (all 4 digits)
77 function this_year() {
78 return strftime('%Y');
81 # return the number of the current month (1..12)
82 function this_month() {
83 return ereg_replace('^0', '', strftime('%m'));
86 # return today's date in yyyy-mm-dd format
87 function today_ymd() {
88 return strftime('%Y-%m-%d');
92 function get_text_between($text, $start_text, $end_text) {
93 $start = strpos($text, $start_text);
94 if($start === false) {
97 $text = substr($text, $start + strlen($start_text));
98 $end = strpos($text, $end_text);
102 return substr($text, 0, $end);
105 # php4 is broken, in that you cannot set a default value for a parameter that
106 # is passed by reference. So, this is set up to use the following screwy
109 # function foo($bar = 0) {
119 class stupid_reference {
121 function stupid_reference(&$ref) {
125 function ref(&$foo) {
126 return new stupid_reference($foo);
129 function &last(&$array) {
130 if(count($array)) return $array[count($array) - 1];