# Copyright (C) 2006 Jason Woofenden
#
-# This file is part of wfpl.
-#
-# wfpl is free software; you can redistribute it and/or modify it under the
-# terms of the GNU Lesser General Public License as published by the Free
-# Software Foundation; either version 2.1 of the License, or (at your option)
-# any later version.
-#
-# wfpl is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
-# more details.
-#
-# You should have received a copy of the GNU Lesser General Public License
-# along with wfpl; if not, write to the Free Software Foundation, Inc., 51
-# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
# 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
# Returns: (as array)
# exit code
# stdout
-# stderr
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('pipe', 'w') // stderr 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);
fwrite($pipes[0], $stdin);
fclose($pipes[0]);
- $stdout_open = true;
- $stderr_open = true;
- while($stdout_open || $stderr_open) {
- $pipes_to_check = array();
- if($stdout_open) {
- $pipes_to_check[] = $pipes[1];
- }
- if($stderr_open) {
- $pipes_to_check[] = $pipes[2];
- }
- $readables = readable_sockets($pipes_to_check);
- if($readables === false) {
- die('select failed');
- }
- foreach($readables as $pipe) {
- $ret = fread($pipe, 4096);
- if($ret === false) {
- die('fread (in exec_pipe) failed');
- }
- if($pipe = $pipes[1]) {
- if($ret == '') {
- fclose($pipes[1]);
- $stdout_open = false;
- } else {
- $stdout .= $ret;
- }
- }
- if($pipe = $pipes[2]) {
- if($ret == '') {
- fclose($pipes[2]);
- $stderr_open = false;
- } else {
- $stderr .= $ret;
- }
- }
- }
+ 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, $stderr);
+ return array($return_value, $stdout);
}
}
return strftime('%Y-%m-%d');
}
+
+function get_text_between($text, $start_text, $end_text) {
+ $start = strpos($text, $start_text);
+ if($start === false) {
+ return false;
+ }
+ $text = substr($text, $start + strlen($start_text));
+ $end = strpos($text, $end_text);
+ if($end === false) {
+ return false;
+ }
+ return substr($text, 0, $end);
+}
+
# 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
# syntax: