GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Pull Request — develop (#1827)
by
unknown
18:14
created
libs/PEAR.1.9/HTTP/Request2/MultipartBody.php 2 patches
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -112,7 +112,7 @@  discard block
 block discarded – undo
112 112
             } else {
113 113
                 for ($i = 0; $i < count($f['fp']); $i++) {
114 114
                     $upload = array(
115
-                        'name' => ($useBrackets? $fieldName . '[' . $i . ']': $fieldName)
115
+                        'name' => ($useBrackets ? $fieldName . '[' . $i . ']' : $fieldName)
116 116
                     );
117 117
                     foreach (array('fp', 'filename', 'size', 'type') as $key) {
118 118
                         $upload[$key] = $f[$key][$i];
@@ -188,7 +188,7 @@  discard block
 block discarded – undo
188 188
                     $ret    .= substr($header, $this->_pos[1], $length);
189 189
                     $length -= min(strlen($header) - $this->_pos[1], $length);
190 190
                 }
191
-                $filePos  = max(0, $this->_pos[1] - strlen($header));
191
+                $filePos = max(0, $this->_pos[1] - strlen($header));
192 192
                 if ($length > 0 && $filePos < $this->_uploads[$pos]['size']) {
193 193
                     $ret     .= fread($this->_uploads[$pos]['fp'], $length);
194 194
                     $length  -= min($length, $this->_uploads[$pos]['size'] - $filePos);
Please login to merge, or discard this patch.
Indentation   +166 added lines, -166 removed lines patch added patch discarded remove patch
@@ -1,45 +1,45 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 /**
3
- * Helper class for building multipart/form-data request body
4
- *
5
- * PHP version 5
6
- *
7
- * LICENSE:
8
- *
9
- * Copyright (c) 2008, 2009, Alexey Borzov <[email protected]>
10
- * All rights reserved.
11
- *
12
- * Redistribution and use in source and binary forms, with or without
13
- * modification, are permitted provided that the following conditions
14
- * are met:
15
- *
16
- *    * Redistributions of source code must retain the above copyright
17
- *      notice, this list of conditions and the following disclaimer.
18
- *    * Redistributions in binary form must reproduce the above copyright
19
- *      notice, this list of conditions and the following disclaimer in the
20
- *      documentation and/or other materials provided with the distribution.
21
- *    * The names of the authors may not be used to endorse or promote products
22
- *      derived from this software without specific prior written permission.
23
- *
24
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
25
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
26
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
27
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
28
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
29
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
30
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
31
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
32
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
33
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
34
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35
- *
36
- * @category   HTTP
37
- * @package    HTTP_Request2
38
- * @author     Alexey Borzov <[email protected]>
39
- * @license    http://opensource.org/licenses/bsd-license.php New BSD License
40
- * @version    SVN: $Id: MultipartBody.php 290192 2009-11-03 21:29:32Z avb $
41
- * @link       http://pear.php.net/package/HTTP_Request2
42
- */
3
+	 * Helper class for building multipart/form-data request body
4
+	 *
5
+	 * PHP version 5
6
+	 *
7
+	 * LICENSE:
8
+	 *
9
+	 * Copyright (c) 2008, 2009, Alexey Borzov <[email protected]>
10
+	 * All rights reserved.
11
+	 *
12
+	 * Redistribution and use in source and binary forms, with or without
13
+	 * modification, are permitted provided that the following conditions
14
+	 * are met:
15
+	 *
16
+	 *    * Redistributions of source code must retain the above copyright
17
+	 *      notice, this list of conditions and the following disclaimer.
18
+	 *    * Redistributions in binary form must reproduce the above copyright
19
+	 *      notice, this list of conditions and the following disclaimer in the
20
+	 *      documentation and/or other materials provided with the distribution.
21
+	 *    * The names of the authors may not be used to endorse or promote products
22
+	 *      derived from this software without specific prior written permission.
23
+	 *
24
+	 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
25
+	 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
26
+	 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
27
+	 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
28
+	 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
29
+	 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
30
+	 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
31
+	 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
32
+	 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
33
+	 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
34
+	 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35
+	 *
36
+	 * @category   HTTP
37
+	 * @package    HTTP_Request2
38
+	 * @author     Alexey Borzov <[email protected]>
39
+	 * @license    http://opensource.org/licenses/bsd-license.php New BSD License
40
+	 * @version    SVN: $Id: MultipartBody.php 290192 2009-11-03 21:29:32Z avb $
41
+	 * @link       http://pear.php.net/package/HTTP_Request2
42
+	 */
43 43
 
44 44
 /**
45 45
  * Class for building multipart/form-data request body
@@ -59,31 +59,31 @@  discard block
 block discarded – undo
59 59
     * MIME boundary
60 60
     * @var  string
61 61
     */
62
-    private $_boundary;
62
+	private $_boundary;
63 63
 
64 64
    /**
65 65
     * Form parameters added via {@link HTTP_Request2::addPostParameter()}
66 66
     * @var  array
67 67
     */
68
-    private $_params = array();
68
+	private $_params = array();
69 69
 
70 70
    /**
71 71
     * File uploads added via {@link HTTP_Request2::addUpload()}
72 72
     * @var  array
73 73
     */
74
-    private $_uploads = array();
74
+	private $_uploads = array();
75 75
 
76 76
    /**
77 77
     * Header for parts with parameters
78 78
     * @var  string
79 79
     */
80
-    private $_headerParam = "--%s\r\nContent-Disposition: form-data; name=\"%s\"\r\n\r\n";
80
+	private $_headerParam = "--%s\r\nContent-Disposition: form-data; name=\"%s\"\r\n\r\n";
81 81
 
82 82
    /**
83 83
     * Header for parts with uploads
84 84
     * @var  string
85 85
     */
86
-    private $_headerUpload = "--%s\r\nContent-Disposition: form-data; name=\"%s\"; filename=\"%s\"\r\nContent-Type: %s\r\n\r\n";
86
+	private $_headerUpload = "--%s\r\nContent-Disposition: form-data; name=\"%s\"; filename=\"%s\"\r\nContent-Type: %s\r\n\r\n";
87 87
 
88 88
    /**
89 89
     * Current position in parameter and upload arrays
@@ -93,7 +93,7 @@  discard block
 block discarded – undo
93 93
     *
94 94
     * @var  array
95 95
     */
96
-    private $_pos = array(0, 0);
96
+	private $_pos = array(0, 0);
97 97
 
98 98
 
99 99
    /**
@@ -103,59 +103,59 @@  discard block
 block discarded – undo
103 103
     * @param    array   file uploads set via {@link HTTP_Request2::addUpload()}
104 104
     * @param    bool    whether to append brackets to array variable names
105 105
     */
106
-    public function __construct(array $params, array $uploads, $useBrackets = true)
107
-    {
108
-        $this->_params = self::_flattenArray('', $params, $useBrackets);
109
-        foreach ($uploads as $fieldName => $f) {
110
-            if (!is_array($f['fp'])) {
111
-                $this->_uploads[] = $f + array('name' => $fieldName);
112
-            } else {
113
-                for ($i = 0; $i < count($f['fp']); $i++) {
114
-                    $upload = array(
115
-                        'name' => ($useBrackets? $fieldName . '[' . $i . ']': $fieldName)
116
-                    );
117
-                    foreach (array('fp', 'filename', 'size', 'type') as $key) {
118
-                        $upload[$key] = $f[$key][$i];
119
-                    }
120
-                    $this->_uploads[] = $upload;
121
-                }
122
-            }
123
-        }
124
-    }
106
+	public function __construct(array $params, array $uploads, $useBrackets = true)
107
+	{
108
+		$this->_params = self::_flattenArray('', $params, $useBrackets);
109
+		foreach ($uploads as $fieldName => $f) {
110
+			if (!is_array($f['fp'])) {
111
+				$this->_uploads[] = $f + array('name' => $fieldName);
112
+			} else {
113
+				for ($i = 0; $i < count($f['fp']); $i++) {
114
+					$upload = array(
115
+						'name' => ($useBrackets? $fieldName . '[' . $i . ']': $fieldName)
116
+					);
117
+					foreach (array('fp', 'filename', 'size', 'type') as $key) {
118
+						$upload[$key] = $f[$key][$i];
119
+					}
120
+					$this->_uploads[] = $upload;
121
+				}
122
+			}
123
+		}
124
+	}
125 125
 
126 126
    /**
127 127
     * Returns the length of the body to use in Content-Length header
128 128
     *
129 129
     * @return   integer
130 130
     */
131
-    public function getLength()
132
-    {
133
-        $boundaryLength     = strlen($this->getBoundary());
134
-        $headerParamLength  = strlen($this->_headerParam) - 4 + $boundaryLength;
135
-        $headerUploadLength = strlen($this->_headerUpload) - 8 + $boundaryLength;
136
-        $length             = $boundaryLength + 6;
137
-        foreach ($this->_params as $p) {
138
-            $length += $headerParamLength + strlen($p[0]) + strlen($p[1]) + 2;
139
-        }
140
-        foreach ($this->_uploads as $u) {
141
-            $length += $headerUploadLength + strlen($u['name']) + strlen($u['type']) +
142
-                       strlen($u['filename']) + $u['size'] + 2;
143
-        }
144
-        return $length;
145
-    }
131
+	public function getLength()
132
+	{
133
+		$boundaryLength     = strlen($this->getBoundary());
134
+		$headerParamLength  = strlen($this->_headerParam) - 4 + $boundaryLength;
135
+		$headerUploadLength = strlen($this->_headerUpload) - 8 + $boundaryLength;
136
+		$length             = $boundaryLength + 6;
137
+		foreach ($this->_params as $p) {
138
+			$length += $headerParamLength + strlen($p[0]) + strlen($p[1]) + 2;
139
+		}
140
+		foreach ($this->_uploads as $u) {
141
+			$length += $headerUploadLength + strlen($u['name']) + strlen($u['type']) +
142
+					   strlen($u['filename']) + $u['size'] + 2;
143
+		}
144
+		return $length;
145
+	}
146 146
 
147 147
    /**
148 148
     * Returns the boundary to use in Content-Type header
149 149
     *
150 150
     * @return   string
151 151
     */
152
-    public function getBoundary()
153
-    {
154
-        if (empty($this->_boundary)) {
155
-            $this->_boundary = '--' . md5('PEAR-HTTP_Request2-' . microtime());
156
-        }
157
-        return $this->_boundary;
158
-    }
152
+	public function getBoundary()
153
+	{
154
+		if (empty($this->_boundary)) {
155
+			$this->_boundary = '--' . md5('PEAR-HTTP_Request2-' . microtime());
156
+		}
157
+		return $this->_boundary;
158
+	}
159 159
 
160 160
    /**
161 161
     * Returns next chunk of request body
@@ -163,69 +163,69 @@  discard block
 block discarded – undo
163 163
     * @param    integer Amount of bytes to read
164 164
     * @return   string  Up to $length bytes of data, empty string if at end
165 165
     */
166
-    public function read($length)
167
-    {
168
-        $ret         = '';
169
-        $boundary    = $this->getBoundary();
170
-        $paramCount  = count($this->_params);
171
-        $uploadCount = count($this->_uploads);
172
-        while ($length > 0 && $this->_pos[0] <= $paramCount + $uploadCount) {
173
-            $oldLength = $length;
174
-            if ($this->_pos[0] < $paramCount) {
175
-                $param = sprintf($this->_headerParam, $boundary,
176
-                                 $this->_params[$this->_pos[0]][0]) .
177
-                         $this->_params[$this->_pos[0]][1] . "\r\n";
178
-                $ret    .= substr($param, $this->_pos[1], $length);
179
-                $length -= min(strlen($param) - $this->_pos[1], $length);
166
+	public function read($length)
167
+	{
168
+		$ret         = '';
169
+		$boundary    = $this->getBoundary();
170
+		$paramCount  = count($this->_params);
171
+		$uploadCount = count($this->_uploads);
172
+		while ($length > 0 && $this->_pos[0] <= $paramCount + $uploadCount) {
173
+			$oldLength = $length;
174
+			if ($this->_pos[0] < $paramCount) {
175
+				$param = sprintf($this->_headerParam, $boundary,
176
+								 $this->_params[$this->_pos[0]][0]) .
177
+						 $this->_params[$this->_pos[0]][1] . "\r\n";
178
+				$ret    .= substr($param, $this->_pos[1], $length);
179
+				$length -= min(strlen($param) - $this->_pos[1], $length);
180 180
 
181
-            } elseif ($this->_pos[0] < $paramCount + $uploadCount) {
182
-                $pos    = $this->_pos[0] - $paramCount;
183
-                $header = sprintf($this->_headerUpload, $boundary,
184
-                                  $this->_uploads[$pos]['name'],
185
-                                  $this->_uploads[$pos]['filename'],
186
-                                  $this->_uploads[$pos]['type']);
187
-                if ($this->_pos[1] < strlen($header)) {
188
-                    $ret    .= substr($header, $this->_pos[1], $length);
189
-                    $length -= min(strlen($header) - $this->_pos[1], $length);
190
-                }
191
-                $filePos  = max(0, $this->_pos[1] - strlen($header));
192
-                if ($length > 0 && $filePos < $this->_uploads[$pos]['size']) {
193
-                    $ret     .= fread($this->_uploads[$pos]['fp'], $length);
194
-                    $length  -= min($length, $this->_uploads[$pos]['size'] - $filePos);
195
-                }
196
-                if ($length > 0) {
197
-                    $start   = $this->_pos[1] + ($oldLength - $length) -
198
-                               strlen($header) - $this->_uploads[$pos]['size'];
199
-                    $ret    .= substr("\r\n", $start, $length);
200
-                    $length -= min(2 - $start, $length);
201
-                }
181
+			} elseif ($this->_pos[0] < $paramCount + $uploadCount) {
182
+				$pos    = $this->_pos[0] - $paramCount;
183
+				$header = sprintf($this->_headerUpload, $boundary,
184
+								  $this->_uploads[$pos]['name'],
185
+								  $this->_uploads[$pos]['filename'],
186
+								  $this->_uploads[$pos]['type']);
187
+				if ($this->_pos[1] < strlen($header)) {
188
+					$ret    .= substr($header, $this->_pos[1], $length);
189
+					$length -= min(strlen($header) - $this->_pos[1], $length);
190
+				}
191
+				$filePos  = max(0, $this->_pos[1] - strlen($header));
192
+				if ($length > 0 && $filePos < $this->_uploads[$pos]['size']) {
193
+					$ret     .= fread($this->_uploads[$pos]['fp'], $length);
194
+					$length  -= min($length, $this->_uploads[$pos]['size'] - $filePos);
195
+				}
196
+				if ($length > 0) {
197
+					$start   = $this->_pos[1] + ($oldLength - $length) -
198
+							   strlen($header) - $this->_uploads[$pos]['size'];
199
+					$ret    .= substr("\r\n", $start, $length);
200
+					$length -= min(2 - $start, $length);
201
+				}
202 202
 
203
-            } else {
204
-                $closing  = '--' . $boundary . "--\r\n";
205
-                $ret     .= substr($closing, $this->_pos[1], $length);
206
-                $length  -= min(strlen($closing) - $this->_pos[1], $length);
207
-            }
208
-            if ($length > 0) {
209
-                $this->_pos     = array($this->_pos[0] + 1, 0);
210
-            } else {
211
-                $this->_pos[1] += $oldLength;
212
-            }
213
-        }
214
-        return $ret;
215
-    }
203
+			} else {
204
+				$closing  = '--' . $boundary . "--\r\n";
205
+				$ret     .= substr($closing, $this->_pos[1], $length);
206
+				$length  -= min(strlen($closing) - $this->_pos[1], $length);
207
+			}
208
+			if ($length > 0) {
209
+				$this->_pos     = array($this->_pos[0] + 1, 0);
210
+			} else {
211
+				$this->_pos[1] += $oldLength;
212
+			}
213
+		}
214
+		return $ret;
215
+	}
216 216
 
217 217
    /**
218 218
     * Sets the current position to the start of the body
219 219
     *
220 220
     * This allows reusing the same body in another request
221 221
     */
222
-    public function rewind()
223
-    {
224
-        $this->_pos = array(0, 0);
225
-        foreach ($this->_uploads as $u) {
226
-            rewind($u['fp']);
227
-        }
228
-    }
222
+	public function rewind()
223
+	{
224
+		$this->_pos = array(0, 0);
225
+		foreach ($this->_uploads as $u) {
226
+			rewind($u['fp']);
227
+		}
228
+	}
229 229
 
230 230
    /**
231 231
     * Returns the body as string
@@ -235,11 +235,11 @@  discard block
 block discarded – undo
235 235
     *
236 236
     * @return   string
237 237
     */
238
-    public function __toString()
239
-    {
240
-        $this->rewind();
241
-        return $this->read($this->getLength());
242
-    }
238
+	public function __toString()
239
+	{
240
+		$this->rewind();
241
+		return $this->read($this->getLength());
242
+	}
243 243
 
244 244
 
245 245
    /**
@@ -251,24 +251,24 @@  discard block
 block discarded – undo
251 251
     * @param    bool    whether to append [] to array variables' names
252 252
     * @return   array   array with the following items: array('item name', 'item value');
253 253
     */
254
-    private static function _flattenArray($name, $values, $useBrackets)
255
-    {
256
-        if (!is_array($values)) {
257
-            return array(array($name, $values));
258
-        } else {
259
-            $ret = array();
260
-            foreach ($values as $k => $v) {
261
-                if (empty($name)) {
262
-                    $newName = $k;
263
-                } elseif ($useBrackets) {
264
-                    $newName = $name . '[' . $k . ']';
265
-                } else {
266
-                    $newName = $name;
267
-                }
268
-                $ret = array_merge($ret, self::_flattenArray($newName, $v, $useBrackets));
269
-            }
270
-            return $ret;
271
-        }
272
-    }
254
+	private static function _flattenArray($name, $values, $useBrackets)
255
+	{
256
+		if (!is_array($values)) {
257
+			return array(array($name, $values));
258
+		} else {
259
+			$ret = array();
260
+			foreach ($values as $k => $v) {
261
+				if (empty($name)) {
262
+					$newName = $k;
263
+				} elseif ($useBrackets) {
264
+					$newName = $name . '[' . $k . ']';
265
+				} else {
266
+					$newName = $name;
267
+				}
268
+				$ret = array_merge($ret, self::_flattenArray($newName, $v, $useBrackets));
269
+			}
270
+			return $ret;
271
+		}
272
+	}
273 273
 }
274 274
 ?>
Please login to merge, or discard this patch.
libs/PEAR.1.9/HTTP/Request2/Observer/Log.php 2 patches
Indentation   +149 added lines, -149 removed lines patch added patch discarded remove patch
@@ -1,46 +1,46 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 /**
3
- * An observer useful for debugging / testing.
4
- *
5
- * PHP version 5
6
- *
7
- * LICENSE:
8
- *
9
- * Copyright (c) 2008, 2009, Alexey Borzov <[email protected]>
10
- * All rights reserved.
11
- *
12
- * Redistribution and use in source and binary forms, with or without
13
- * modification, are permitted provided that the following conditions
14
- * are met:
15
- *
16
- *    * Redistributions of source code must retain the above copyright
17
- *      notice, this list of conditions and the following disclaimer.
18
- *    * Redistributions in binary form must reproduce the above copyright
19
- *      notice, this list of conditions and the following disclaimer in the
20
- *      documentation and/or other materials provided with the distribution.
21
- *    * The names of the authors may not be used to endorse or promote products
22
- *      derived from this software without specific prior written permission.
23
- *
24
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
25
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
26
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
27
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
28
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
29
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
30
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
31
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
32
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
33
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
34
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35
- *
36
- * @category HTTP
37
- * @package  HTTP_Request2
38
- * @author   David Jean Louis <[email protected]>
39
- * @author   Alexey Borzov <[email protected]>
40
- * @license  http://opensource.org/licenses/bsd-license.php New BSD License
41
- * @version  SVN: $Id: Log.php 293416 2010-01-11 18:06:15Z avb $
42
- * @link     http://pear.php.net/package/HTTP_Request2
43
- */
3
+	 * An observer useful for debugging / testing.
4
+	 *
5
+	 * PHP version 5
6
+	 *
7
+	 * LICENSE:
8
+	 *
9
+	 * Copyright (c) 2008, 2009, Alexey Borzov <[email protected]>
10
+	 * All rights reserved.
11
+	 *
12
+	 * Redistribution and use in source and binary forms, with or without
13
+	 * modification, are permitted provided that the following conditions
14
+	 * are met:
15
+	 *
16
+	 *    * Redistributions of source code must retain the above copyright
17
+	 *      notice, this list of conditions and the following disclaimer.
18
+	 *    * Redistributions in binary form must reproduce the above copyright
19
+	 *      notice, this list of conditions and the following disclaimer in the
20
+	 *      documentation and/or other materials provided with the distribution.
21
+	 *    * The names of the authors may not be used to endorse or promote products
22
+	 *      derived from this software without specific prior written permission.
23
+	 *
24
+	 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
25
+	 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
26
+	 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
27
+	 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
28
+	 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
29
+	 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
30
+	 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
31
+	 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
32
+	 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
33
+	 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
34
+	 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35
+	 *
36
+	 * @category HTTP
37
+	 * @package  HTTP_Request2
38
+	 * @author   David Jean Louis <[email protected]>
39
+	 * @author   Alexey Borzov <[email protected]>
40
+	 * @license  http://opensource.org/licenses/bsd-license.php New BSD License
41
+	 * @version  SVN: $Id: Log.php 293416 2010-01-11 18:06:15Z avb $
42
+	 * @link     http://pear.php.net/package/HTTP_Request2
43
+	 */
44 44
 
45 45
 /**
46 46
  * Exception class for HTTP_Request2 package
@@ -92,124 +92,124 @@  discard block
 block discarded – undo
92 92
  */
93 93
 class HTTP_Request2_Observer_Log implements SplObserver
94 94
 {
95
-    // properties {{{
95
+	// properties {{{
96 96
 
97
-    /**
98
-     * The log target, it can be a a resource or a PEAR Log instance.
99
-     *
100
-     * @var resource|Log $target
101
-     */
102
-    protected $target = null;
97
+	/**
98
+	 * The log target, it can be a a resource or a PEAR Log instance.
99
+	 *
100
+	 * @var resource|Log $target
101
+	 */
102
+	protected $target = null;
103 103
 
104
-    /**
105
-     * The events to log.
106
-     *
107
-     * @var array $events
108
-     */
109
-    public $events = array(
110
-        'connect',
111
-        'sentHeaders',
112
-        'sentBodyPart',
113
-        'receivedHeaders',
114
-        'receivedBody',
115
-        'disconnect',
116
-    );
104
+	/**
105
+	 * The events to log.
106
+	 *
107
+	 * @var array $events
108
+	 */
109
+	public $events = array(
110
+		'connect',
111
+		'sentHeaders',
112
+		'sentBodyPart',
113
+		'receivedHeaders',
114
+		'receivedBody',
115
+		'disconnect',
116
+	);
117 117
 
118
-    // }}}
119
-    // __construct() {{{
118
+	// }}}
119
+	// __construct() {{{
120 120
 
121
-    /**
122
-     * Constructor.
123
-     *
124
-     * @param mixed $target Can be a file path (default: php://output), a resource,
125
-     *                      or an instance of the PEAR Log class.
126
-     * @param array $events Array of events to listen to (default: all events)
127
-     *
128
-     * @return void
129
-     */
130
-    public function __construct($target = 'php://output', array $events = array())
131
-    {
132
-        if (!empty($events)) {
133
-            $this->events = $events;
134
-        }
135
-        if (is_resource($target) || $target instanceof Log) {
136
-            $this->target = $target;
137
-        } elseif (false === ($this->target = @fopen($target, 'ab'))) {
138
-            throw new HTTP_Request2_Exception("Unable to open '{$target}'");
139
-        }
140
-    }
121
+	/**
122
+	 * Constructor.
123
+	 *
124
+	 * @param mixed $target Can be a file path (default: php://output), a resource,
125
+	 *                      or an instance of the PEAR Log class.
126
+	 * @param array $events Array of events to listen to (default: all events)
127
+	 *
128
+	 * @return void
129
+	 */
130
+	public function __construct($target = 'php://output', array $events = array())
131
+	{
132
+		if (!empty($events)) {
133
+			$this->events = $events;
134
+		}
135
+		if (is_resource($target) || $target instanceof Log) {
136
+			$this->target = $target;
137
+		} elseif (false === ($this->target = @fopen($target, 'ab'))) {
138
+			throw new HTTP_Request2_Exception("Unable to open '{$target}'");
139
+		}
140
+	}
141 141
 
142
-    // }}}
143
-    // update() {{{
142
+	// }}}
143
+	// update() {{{
144 144
 
145
-    /**
146
-     * Called when the request notifies us of an event.
147
-     *
148
-     * @param HTTP_Request2 $subject The HTTP_Request2 instance
149
-     *
150
-     * @return void
151
-     */
152
-    public function update(SplSubject $subject)
153
-    {
154
-        $event = $subject->getLastEvent();
155
-        if (!in_array($event['name'], $this->events)) {
156
-            return;
157
-        }
145
+	/**
146
+	 * Called when the request notifies us of an event.
147
+	 *
148
+	 * @param HTTP_Request2 $subject The HTTP_Request2 instance
149
+	 *
150
+	 * @return void
151
+	 */
152
+	public function update(SplSubject $subject)
153
+	{
154
+		$event = $subject->getLastEvent();
155
+		if (!in_array($event['name'], $this->events)) {
156
+			return;
157
+		}
158 158
 
159
-        switch ($event['name']) {
160
-        case 'connect':
161
-            $this->log('* Connected to ' . $event['data']);
162
-            break;
163
-        case 'sentHeaders':
164
-            $headers = explode("\r\n", $event['data']);
165
-            array_pop($headers);
166
-            foreach ($headers as $header) {
167
-                $this->log('> ' . $header);
168
-            }
169
-            break;
170
-        case 'sentBodyPart':
171
-            $this->log('> ' . $event['data'] . ' byte(s) sent');
172
-            break;
173
-        case 'receivedHeaders':
174
-            $this->log(sprintf('< HTTP/%s %s %s',
175
-                $event['data']->getVersion(),
176
-                $event['data']->getStatus(),
177
-                $event['data']->getReasonPhrase()));
178
-            $headers = $event['data']->getHeader();
179
-            foreach ($headers as $key => $val) {
180
-                $this->log('< ' . $key . ': ' . $val);
181
-            }
182
-            $this->log('< ');
183
-            break;
184
-        case 'receivedBody':
185
-            $this->log($event['data']->getBody());
186
-            break;
187
-        case 'disconnect':
188
-            $this->log('* Disconnected');
189
-            break;
190
-        }
191
-    }
159
+		switch ($event['name']) {
160
+		case 'connect':
161
+			$this->log('* Connected to ' . $event['data']);
162
+			break;
163
+		case 'sentHeaders':
164
+			$headers = explode("\r\n", $event['data']);
165
+			array_pop($headers);
166
+			foreach ($headers as $header) {
167
+				$this->log('> ' . $header);
168
+			}
169
+			break;
170
+		case 'sentBodyPart':
171
+			$this->log('> ' . $event['data'] . ' byte(s) sent');
172
+			break;
173
+		case 'receivedHeaders':
174
+			$this->log(sprintf('< HTTP/%s %s %s',
175
+				$event['data']->getVersion(),
176
+				$event['data']->getStatus(),
177
+				$event['data']->getReasonPhrase()));
178
+			$headers = $event['data']->getHeader();
179
+			foreach ($headers as $key => $val) {
180
+				$this->log('< ' . $key . ': ' . $val);
181
+			}
182
+			$this->log('< ');
183
+			break;
184
+		case 'receivedBody':
185
+			$this->log($event['data']->getBody());
186
+			break;
187
+		case 'disconnect':
188
+			$this->log('* Disconnected');
189
+			break;
190
+		}
191
+	}
192 192
 
193
-    // }}}
194
-    // log() {{{
193
+	// }}}
194
+	// log() {{{
195 195
 
196
-    /**
197
-     * Logs the given message to the configured target.
198
-     *
199
-     * @param string $message Message to display
200
-     *
201
-     * @return void
202
-     */
203
-    protected function log($message)
204
-    {
205
-        if ($this->target instanceof Log) {
206
-            $this->target->debug($message);
207
-        } elseif (is_resource($this->target)) {
208
-            fwrite($this->target, $message . "\r\n");
209
-        }
210
-    }
196
+	/**
197
+	 * Logs the given message to the configured target.
198
+	 *
199
+	 * @param string $message Message to display
200
+	 *
201
+	 * @return void
202
+	 */
203
+	protected function log($message)
204
+	{
205
+		if ($this->target instanceof Log) {
206
+			$this->target->debug($message);
207
+		} elseif (is_resource($this->target)) {
208
+			fwrite($this->target, $message . "\r\n");
209
+		}
210
+	}
211 211
 
212
-    // }}}
212
+	// }}}
213 213
 }
214 214
 
215 215
 ?>
216 216
\ No newline at end of file
Please login to merge, or discard this patch.
Switch Indentation   +30 added lines, -30 removed lines patch added patch discarded remove patch
@@ -157,36 +157,36 @@
 block discarded – undo
157 157
         }
158 158
 
159 159
         switch ($event['name']) {
160
-        case 'connect':
161
-            $this->log('* Connected to ' . $event['data']);
162
-            break;
163
-        case 'sentHeaders':
164
-            $headers = explode("\r\n", $event['data']);
165
-            array_pop($headers);
166
-            foreach ($headers as $header) {
167
-                $this->log('> ' . $header);
168
-            }
169
-            break;
170
-        case 'sentBodyPart':
171
-            $this->log('> ' . $event['data'] . ' byte(s) sent');
172
-            break;
173
-        case 'receivedHeaders':
174
-            $this->log(sprintf('< HTTP/%s %s %s',
175
-                $event['data']->getVersion(),
176
-                $event['data']->getStatus(),
177
-                $event['data']->getReasonPhrase()));
178
-            $headers = $event['data']->getHeader();
179
-            foreach ($headers as $key => $val) {
180
-                $this->log('< ' . $key . ': ' . $val);
181
-            }
182
-            $this->log('< ');
183
-            break;
184
-        case 'receivedBody':
185
-            $this->log($event['data']->getBody());
186
-            break;
187
-        case 'disconnect':
188
-            $this->log('* Disconnected');
189
-            break;
160
+        	case 'connect':
161
+            	$this->log('* Connected to ' . $event['data']);
162
+            	break;
163
+        	case 'sentHeaders':
164
+            	$headers = explode("\r\n", $event['data']);
165
+            	array_pop($headers);
166
+            	foreach ($headers as $header) {
167
+                	$this->log('> ' . $header);
168
+            	}
169
+            	break;
170
+        	case 'sentBodyPart':
171
+            	$this->log('> ' . $event['data'] . ' byte(s) sent');
172
+            	break;
173
+        	case 'receivedHeaders':
174
+            	$this->log(sprintf('< HTTP/%s %s %s',
175
+                	$event['data']->getVersion(),
176
+                	$event['data']->getStatus(),
177
+                	$event['data']->getReasonPhrase()));
178
+            	$headers = $event['data']->getHeader();
179
+            	foreach ($headers as $key => $val) {
180
+                	$this->log('< ' . $key . ': ' . $val);
181
+            	}
182
+            	$this->log('< ');
183
+            	break;
184
+        	case 'receivedBody':
185
+            	$this->log($event['data']->getBody());
186
+            	break;
187
+        	case 'disconnect':
188
+            	$this->log('* Disconnected');
189
+            	break;
190 190
         }
191 191
     }
192 192
 
Please login to merge, or discard this patch.
libs/PEAR.1.9/HTTP/Request2/Response.php 2 patches
Indentation   +330 added lines, -330 removed lines patch added patch discarded remove patch
@@ -79,33 +79,33 @@  discard block
 block discarded – undo
79 79
     * HTTP protocol version (e.g. 1.0, 1.1)
80 80
     * @var  string
81 81
     */
82
-    protected $version;
82
+	protected $version;
83 83
 
84 84
    /**
85 85
     * Status code
86 86
     * @var  integer
87 87
     * @link http://tools.ietf.org/html/rfc2616#section-6.1.1
88 88
     */
89
-    protected $code;
89
+	protected $code;
90 90
 
91 91
    /**
92 92
     * Reason phrase
93 93
     * @var  string
94 94
     * @link http://tools.ietf.org/html/rfc2616#section-6.1.1
95 95
     */
96
-    protected $reasonPhrase;
96
+	protected $reasonPhrase;
97 97
 
98 98
    /**
99 99
     * Associative array of response headers
100 100
     * @var  array
101 101
     */
102
-    protected $headers = array();
102
+	protected $headers = array();
103 103
 
104 104
    /**
105 105
     * Cookies set in the response
106 106
     * @var  array
107 107
     */
108
-    protected $cookies = array();
108
+	protected $cookies = array();
109 109
 
110 110
    /**
111 111
     * Name of last header processed by parseHederLine()
@@ -114,13 +114,13 @@  discard block
 block discarded – undo
114 114
     *
115 115
     * @var  string
116 116
     */
117
-    protected $lastHeader = null;
117
+	protected $lastHeader = null;
118 118
 
119 119
    /**
120 120
     * Response body
121 121
     * @var  string
122 122
     */
123
-    protected $body = '';
123
+	protected $body = '';
124 124
 
125 125
    /**
126 126
     * Whether the body is still encoded by Content-Encoding
@@ -130,7 +130,7 @@  discard block
 block discarded – undo
130 130
     *
131 131
     * @var  bool
132 132
     */
133
-    protected $bodyEncoded;
133
+	protected $bodyEncoded;
134 134
 
135 135
    /**
136 136
     * Associative array of HTTP status code / reason phrase.
@@ -138,64 +138,64 @@  discard block
 block discarded – undo
138 138
     * @var  array
139 139
     * @link http://tools.ietf.org/html/rfc2616#section-10
140 140
     */
141
-    protected static $phrases = array(
142
-
143
-        // 1xx: Informational - Request received, continuing process
144
-        100 => 'Continue',
145
-        101 => 'Switching Protocols',
146
-
147
-        // 2xx: Success - The action was successfully received, understood and
148
-        // accepted
149
-        200 => 'OK',
150
-        201 => 'Created',
151
-        202 => 'Accepted',
152
-        203 => 'Non-Authoritative Information',
153
-        204 => 'No Content',
154
-        205 => 'Reset Content',
155
-        206 => 'Partial Content',
156
-
157
-        // 3xx: Redirection - Further action must be taken in order to complete
158
-        // the request
159
-        300 => 'Multiple Choices',
160
-        301 => 'Moved Permanently',
161
-        302 => 'Found',  // 1.1
162
-        303 => 'See Other',
163
-        304 => 'Not Modified',
164
-        305 => 'Use Proxy',
165
-        307 => 'Temporary Redirect',
166
-
167
-        // 4xx: Client Error - The request contains bad syntax or cannot be
168
-        // fulfilled
169
-        400 => 'Bad Request',
170
-        401 => 'Unauthorized',
171
-        402 => 'Payment Required',
172
-        403 => 'Forbidden',
173
-        404 => 'Not Found',
174
-        405 => 'Method Not Allowed',
175
-        406 => 'Not Acceptable',
176
-        407 => 'Proxy Authentication Required',
177
-        408 => 'Request Timeout',
178
-        409 => 'Conflict',
179
-        410 => 'Gone',
180
-        411 => 'Length Required',
181
-        412 => 'Precondition Failed',
182
-        413 => 'Request Entity Too Large',
183
-        414 => 'Request-URI Too Long',
184
-        415 => 'Unsupported Media Type',
185
-        416 => 'Requested Range Not Satisfiable',
186
-        417 => 'Expectation Failed',
187
-
188
-        // 5xx: Server Error - The server failed to fulfill an apparently
189
-        // valid request
190
-        500 => 'Internal Server Error',
191
-        501 => 'Not Implemented',
192
-        502 => 'Bad Gateway',
193
-        503 => 'Service Unavailable',
194
-        504 => 'Gateway Timeout',
195
-        505 => 'HTTP Version Not Supported',
196
-        509 => 'Bandwidth Limit Exceeded',
197
-
198
-    );
141
+	protected static $phrases = array(
142
+
143
+		// 1xx: Informational - Request received, continuing process
144
+		100 => 'Continue',
145
+		101 => 'Switching Protocols',
146
+
147
+		// 2xx: Success - The action was successfully received, understood and
148
+		// accepted
149
+		200 => 'OK',
150
+		201 => 'Created',
151
+		202 => 'Accepted',
152
+		203 => 'Non-Authoritative Information',
153
+		204 => 'No Content',
154
+		205 => 'Reset Content',
155
+		206 => 'Partial Content',
156
+
157
+		// 3xx: Redirection - Further action must be taken in order to complete
158
+		// the request
159
+		300 => 'Multiple Choices',
160
+		301 => 'Moved Permanently',
161
+		302 => 'Found',  // 1.1
162
+		303 => 'See Other',
163
+		304 => 'Not Modified',
164
+		305 => 'Use Proxy',
165
+		307 => 'Temporary Redirect',
166
+
167
+		// 4xx: Client Error - The request contains bad syntax or cannot be
168
+		// fulfilled
169
+		400 => 'Bad Request',
170
+		401 => 'Unauthorized',
171
+		402 => 'Payment Required',
172
+		403 => 'Forbidden',
173
+		404 => 'Not Found',
174
+		405 => 'Method Not Allowed',
175
+		406 => 'Not Acceptable',
176
+		407 => 'Proxy Authentication Required',
177
+		408 => 'Request Timeout',
178
+		409 => 'Conflict',
179
+		410 => 'Gone',
180
+		411 => 'Length Required',
181
+		412 => 'Precondition Failed',
182
+		413 => 'Request Entity Too Large',
183
+		414 => 'Request-URI Too Long',
184
+		415 => 'Unsupported Media Type',
185
+		416 => 'Requested Range Not Satisfiable',
186
+		417 => 'Expectation Failed',
187
+
188
+		// 5xx: Server Error - The server failed to fulfill an apparently
189
+		// valid request
190
+		500 => 'Internal Server Error',
191
+		501 => 'Not Implemented',
192
+		502 => 'Bad Gateway',
193
+		503 => 'Service Unavailable',
194
+		504 => 'Gateway Timeout',
195
+		505 => 'HTTP Version Not Supported',
196
+		509 => 'Bandwidth Limit Exceeded',
197
+
198
+	);
199 199
 
200 200
    /**
201 201
     * Constructor, parses the response status line
@@ -204,20 +204,20 @@  discard block
 block discarded – undo
204 204
     * @param    bool    Whether body is still encoded by Content-Encoding
205 205
     * @throws   HTTP_Request2_Exception if status line is invalid according to spec
206 206
     */
207
-    public function __construct($statusLine, $bodyEncoded = true)
208
-    {
209
-        if (!preg_match('!^HTTP/(\d\.\d) (\d{3})(?: (.+))?!', $statusLine, $m)) {
210
-            throw new HTTP_Request2_Exception("Malformed response: {$statusLine}");
211
-        }
212
-        $this->version = $m[1];
213
-        $this->code    = intval($m[2]);
214
-        if (!empty($m[3])) {
215
-            $this->reasonPhrase = trim($m[3]);
216
-        } elseif (!empty(self::$phrases[$this->code])) {
217
-            $this->reasonPhrase = self::$phrases[$this->code];
218
-        }
219
-        $this->bodyEncoded = (bool)$bodyEncoded;
220
-    }
207
+	public function __construct($statusLine, $bodyEncoded = true)
208
+	{
209
+		if (!preg_match('!^HTTP/(\d\.\d) (\d{3})(?: (.+))?!', $statusLine, $m)) {
210
+			throw new HTTP_Request2_Exception("Malformed response: {$statusLine}");
211
+		}
212
+		$this->version = $m[1];
213
+		$this->code    = intval($m[2]);
214
+		if (!empty($m[3])) {
215
+			$this->reasonPhrase = trim($m[3]);
216
+		} elseif (!empty(self::$phrases[$this->code])) {
217
+			$this->reasonPhrase = self::$phrases[$this->code];
218
+		}
219
+		$this->bodyEncoded = (bool)$bodyEncoded;
220
+	}
221 221
 
222 222
    /**
223 223
     * Parses the line from HTTP response filling $headers array
@@ -229,51 +229,51 @@  discard block
 block discarded – undo
229 229
     *
230 230
     * @param    string  Line from HTTP response
231 231
     */
232
-    public function parseHeaderLine($headerLine)
233
-    {
234
-        $headerLine = trim($headerLine, "\r\n");
235
-
236
-        // empty string signals the end of headers, process the received ones
237
-        if ('' == $headerLine) {
238
-            if (!empty($this->headers['set-cookie'])) {
239
-                $cookies = is_array($this->headers['set-cookie'])?
240
-                           $this->headers['set-cookie']:
241
-                           array($this->headers['set-cookie']);
242
-                foreach ($cookies as $cookieString) {
243
-                    $this->parseCookie($cookieString);
244
-                }
245
-                unset($this->headers['set-cookie']);
246
-            }
247
-            foreach (array_keys($this->headers) as $k) {
248
-                if (is_array($this->headers[$k])) {
249
-                    $this->headers[$k] = implode(', ', $this->headers[$k]);
250
-                }
251
-            }
252
-
253
-        // string of the form header-name: header value
254
-        } elseif (preg_match('!^([^\x00-\x1f\x7f-\xff()<>@,;:\\\\"/\[\]?={}\s]+):(.+)$!', $headerLine, $m)) {
255
-            $name  = strtolower($m[1]);
256
-            $value = trim($m[2]);
257
-            if (empty($this->headers[$name])) {
258
-                $this->headers[$name] = $value;
259
-            } else {
260
-                if (!is_array($this->headers[$name])) {
261
-                    $this->headers[$name] = array($this->headers[$name]);
262
-                }
263
-                $this->headers[$name][] = $value;
264
-            }
265
-            $this->lastHeader = $name;
266
-
267
-        // continuation of a previous header
268
-        } elseif (preg_match('!^\s+(.+)$!', $headerLine, $m) && $this->lastHeader) {
269
-            if (!is_array($this->headers[$this->lastHeader])) {
270
-                $this->headers[$this->lastHeader] .= ' ' . trim($m[1]);
271
-            } else {
272
-                $key = count($this->headers[$this->lastHeader]) - 1;
273
-                $this->headers[$this->lastHeader][$key] .= ' ' . trim($m[1]);
274
-            }
275
-        }
276
-    }
232
+	public function parseHeaderLine($headerLine)
233
+	{
234
+		$headerLine = trim($headerLine, "\r\n");
235
+
236
+		// empty string signals the end of headers, process the received ones
237
+		if ('' == $headerLine) {
238
+			if (!empty($this->headers['set-cookie'])) {
239
+				$cookies = is_array($this->headers['set-cookie'])?
240
+						   $this->headers['set-cookie']:
241
+						   array($this->headers['set-cookie']);
242
+				foreach ($cookies as $cookieString) {
243
+					$this->parseCookie($cookieString);
244
+				}
245
+				unset($this->headers['set-cookie']);
246
+			}
247
+			foreach (array_keys($this->headers) as $k) {
248
+				if (is_array($this->headers[$k])) {
249
+					$this->headers[$k] = implode(', ', $this->headers[$k]);
250
+				}
251
+			}
252
+
253
+		// string of the form header-name: header value
254
+		} elseif (preg_match('!^([^\x00-\x1f\x7f-\xff()<>@,;:\\\\"/\[\]?={}\s]+):(.+)$!', $headerLine, $m)) {
255
+			$name  = strtolower($m[1]);
256
+			$value = trim($m[2]);
257
+			if (empty($this->headers[$name])) {
258
+				$this->headers[$name] = $value;
259
+			} else {
260
+				if (!is_array($this->headers[$name])) {
261
+					$this->headers[$name] = array($this->headers[$name]);
262
+				}
263
+				$this->headers[$name][] = $value;
264
+			}
265
+			$this->lastHeader = $name;
266
+
267
+		// continuation of a previous header
268
+		} elseif (preg_match('!^\s+(.+)$!', $headerLine, $m) && $this->lastHeader) {
269
+			if (!is_array($this->headers[$this->lastHeader])) {
270
+				$this->headers[$this->lastHeader] .= ' ' . trim($m[1]);
271
+			} else {
272
+				$key = count($this->headers[$this->lastHeader]) - 1;
273
+				$this->headers[$this->lastHeader][$key] .= ' ' . trim($m[1]);
274
+			}
275
+		}
276
+	}
277 277
 
278 278
    /**
279 279
     * Parses a Set-Cookie header to fill $cookies array
@@ -281,86 +281,86 @@  discard block
 block discarded – undo
281 281
     * @param    string    value of Set-Cookie header
282 282
     * @link     http://web.archive.org/web/20080331104521/http://cgi.netscape.com/newsref/std/cookie_spec.html
283 283
     */
284
-    protected function parseCookie($cookieString)
285
-    {
286
-        $cookie = array(
287
-            'expires' => null,
288
-            'domain'  => null,
289
-            'path'    => null,
290
-            'secure'  => false
291
-        );
292
-
293
-        // Only a name=value pair
294
-        if (!strpos($cookieString, ';')) {
295
-            $pos = strpos($cookieString, '=');
296
-            $cookie['name']  = trim(substr($cookieString, 0, $pos));
297
-            $cookie['value'] = trim(substr($cookieString, $pos + 1));
298
-
299
-        // Some optional parameters are supplied
300
-        } else {
301
-            $elements = explode(';', $cookieString);
302
-            $pos = strpos($elements[0], '=');
303
-            $cookie['name']  = trim(substr($elements[0], 0, $pos));
304
-            $cookie['value'] = trim(substr($elements[0], $pos + 1));
305
-
306
-            for ($i = 1; $i < count($elements); $i++) {
307
-                if (false === strpos($elements[$i], '=')) {
308
-                    $elName  = trim($elements[$i]);
309
-                    $elValue = null;
310
-                } else {
311
-                    list ($elName, $elValue) = array_map('trim', explode('=', $elements[$i]));
312
-                }
313
-                $elName = strtolower($elName);
314
-                if ('secure' == $elName) {
315
-                    $cookie['secure'] = true;
316
-                } elseif ('expires' == $elName) {
317
-                    $cookie['expires'] = str_replace('"', '', $elValue);
318
-                } elseif ('path' == $elName || 'domain' == $elName) {
319
-                    $cookie[$elName] = urldecode($elValue);
320
-                } else {
321
-                    $cookie[$elName] = $elValue;
322
-                }
323
-            }
324
-        }
325
-        $this->cookies[] = $cookie;
326
-    }
284
+	protected function parseCookie($cookieString)
285
+	{
286
+		$cookie = array(
287
+			'expires' => null,
288
+			'domain'  => null,
289
+			'path'    => null,
290
+			'secure'  => false
291
+		);
292
+
293
+		// Only a name=value pair
294
+		if (!strpos($cookieString, ';')) {
295
+			$pos = strpos($cookieString, '=');
296
+			$cookie['name']  = trim(substr($cookieString, 0, $pos));
297
+			$cookie['value'] = trim(substr($cookieString, $pos + 1));
298
+
299
+		// Some optional parameters are supplied
300
+		} else {
301
+			$elements = explode(';', $cookieString);
302
+			$pos = strpos($elements[0], '=');
303
+			$cookie['name']  = trim(substr($elements[0], 0, $pos));
304
+			$cookie['value'] = trim(substr($elements[0], $pos + 1));
305
+
306
+			for ($i = 1; $i < count($elements); $i++) {
307
+				if (false === strpos($elements[$i], '=')) {
308
+					$elName  = trim($elements[$i]);
309
+					$elValue = null;
310
+				} else {
311
+					list ($elName, $elValue) = array_map('trim', explode('=', $elements[$i]));
312
+				}
313
+				$elName = strtolower($elName);
314
+				if ('secure' == $elName) {
315
+					$cookie['secure'] = true;
316
+				} elseif ('expires' == $elName) {
317
+					$cookie['expires'] = str_replace('"', '', $elValue);
318
+				} elseif ('path' == $elName || 'domain' == $elName) {
319
+					$cookie[$elName] = urldecode($elValue);
320
+				} else {
321
+					$cookie[$elName] = $elValue;
322
+				}
323
+			}
324
+		}
325
+		$this->cookies[] = $cookie;
326
+	}
327 327
 
328 328
    /**
329 329
     * Appends a string to the response body
330 330
     * @param    string
331 331
     */
332
-    public function appendBody($bodyChunk)
333
-    {
334
-        $this->body .= $bodyChunk;
335
-    }
332
+	public function appendBody($bodyChunk)
333
+	{
334
+		$this->body .= $bodyChunk;
335
+	}
336 336
 
337 337
    /**
338 338
     * Returns the status code
339 339
     * @return   integer
340 340
     */
341
-    public function getStatus()
342
-    {
343
-        return $this->code;
344
-    }
341
+	public function getStatus()
342
+	{
343
+		return $this->code;
344
+	}
345 345
 
346 346
    /**
347 347
     * Returns the reason phrase
348 348
     * @return   string
349 349
     */
350
-    public function getReasonPhrase()
351
-    {
352
-        return $this->reasonPhrase;
353
-    }
350
+	public function getReasonPhrase()
351
+	{
352
+		return $this->reasonPhrase;
353
+	}
354 354
 
355 355
    /**
356 356
     * Whether response is a redirect that can be automatically handled by HTTP_Request2
357 357
     * @return   bool
358 358
     */
359
-    public function isRedirect()
360
-    {
361
-        return in_array($this->code, array(300, 301, 302, 303, 307))
362
-               && isset($this->headers['location']);
363
-    }
359
+	public function isRedirect()
360
+	{
361
+		return in_array($this->code, array(300, 301, 302, 303, 307))
362
+			   && isset($this->headers['location']);
363
+	}
364 364
 
365 365
    /**
366 366
     * Returns either the named header or all response headers
@@ -370,25 +370,25 @@  discard block
 block discarded – undo
370 370
     *                           not present), array of all response headers if
371 371
     *                           $headerName is null
372 372
     */
373
-    public function getHeader($headerName = null)
374
-    {
375
-        if (null === $headerName) {
376
-            return $this->headers;
377
-        } else {
378
-            $headerName = strtolower($headerName);
379
-            return isset($this->headers[$headerName])? $this->headers[$headerName]: null;
380
-        }
381
-    }
373
+	public function getHeader($headerName = null)
374
+	{
375
+		if (null === $headerName) {
376
+			return $this->headers;
377
+		} else {
378
+			$headerName = strtolower($headerName);
379
+			return isset($this->headers[$headerName])? $this->headers[$headerName]: null;
380
+		}
381
+	}
382 382
 
383 383
    /**
384 384
     * Returns cookies set in response
385 385
     *
386 386
     * @return   array
387 387
     */
388
-    public function getCookies()
389
-    {
390
-        return $this->cookies;
391
-    }
388
+	public function getCookies()
389
+	{
390
+		return $this->cookies;
391
+	}
392 392
 
393 393
    /**
394 394
     * Returns the body of the response
@@ -396,49 +396,49 @@  discard block
 block discarded – undo
396 396
     * @return   string
397 397
     * @throws   HTTP_Request2_Exception if body cannot be decoded
398 398
     */
399
-    public function getBody()
400
-    {
401
-        if (!$this->bodyEncoded ||
402
-            !in_array(strtolower($this->getHeader('content-encoding')), array('gzip', 'deflate'))
403
-        ) {
404
-            return $this->body;
405
-
406
-        } else {
407
-            if (extension_loaded('mbstring') && (2 & ini_get('mbstring.func_overload'))) {
408
-                $oldEncoding = mb_internal_encoding();
409
-                mb_internal_encoding('iso-8859-1');
410
-            }
411
-
412
-            try {
413
-                switch (strtolower($this->getHeader('content-encoding'))) {
414
-                    case 'gzip':
415
-                        $decoded = self::decodeGzip($this->body);
416
-                        break;
417
-                    case 'deflate':
418
-                        $decoded = self::decodeDeflate($this->body);
419
-                }
420
-            } catch (Exception $e) {
421
-            }
422
-
423
-            if (!empty($oldEncoding)) {
424
-                mb_internal_encoding($oldEncoding);
425
-            }
426
-            if (!empty($e)) {
427
-                throw $e;
428
-            }
429
-            return $decoded;
430
-        }
431
-    }
399
+	public function getBody()
400
+	{
401
+		if (!$this->bodyEncoded ||
402
+			!in_array(strtolower($this->getHeader('content-encoding')), array('gzip', 'deflate'))
403
+		) {
404
+			return $this->body;
405
+
406
+		} else {
407
+			if (extension_loaded('mbstring') && (2 & ini_get('mbstring.func_overload'))) {
408
+				$oldEncoding = mb_internal_encoding();
409
+				mb_internal_encoding('iso-8859-1');
410
+			}
411
+
412
+			try {
413
+				switch (strtolower($this->getHeader('content-encoding'))) {
414
+					case 'gzip':
415
+						$decoded = self::decodeGzip($this->body);
416
+						break;
417
+					case 'deflate':
418
+						$decoded = self::decodeDeflate($this->body);
419
+				}
420
+			} catch (Exception $e) {
421
+			}
422
+
423
+			if (!empty($oldEncoding)) {
424
+				mb_internal_encoding($oldEncoding);
425
+			}
426
+			if (!empty($e)) {
427
+				throw $e;
428
+			}
429
+			return $decoded;
430
+		}
431
+	}
432 432
 
433 433
    /**
434 434
     * Get the HTTP version of the response
435 435
     *
436 436
     * @return   string
437 437
     */
438
-    public function getVersion()
439
-    {
440
-        return $this->version;
441
-    }
438
+	public function getVersion()
439
+	{
440
+		return $this->version;
441
+	}
442 442
 
443 443
    /**
444 444
     * Decodes the message-body encoded by gzip
@@ -452,89 +452,89 @@  discard block
 block discarded – undo
452 452
     * @throws   HTTP_Request2_Exception
453 453
     * @link     http://tools.ietf.org/html/rfc1952
454 454
     */
455
-    public static function decodeGzip($data)
456
-    {
457
-        $length = strlen($data);
458
-        // If it doesn't look like gzip-encoded data, don't bother
459
-        if (18 > $length || strcmp(substr($data, 0, 2), "\x1f\x8b")) {
460
-            return $data;
461
-        }
462
-        if (!function_exists('gzinflate')) {
463
-            throw new HTTP_Request2_Exception('Unable to decode body: gzip extension not available');
464
-        }
465
-        $method = ord(substr($data, 2, 1));
466
-        if (8 != $method) {
467
-            throw new HTTP_Request2_Exception('Error parsing gzip header: unknown compression method');
468
-        }
469
-        $flags = ord(substr($data, 3, 1));
470
-        if ($flags & 224) {
471
-            throw new HTTP_Request2_Exception('Error parsing gzip header: reserved bits are set');
472
-        }
473
-
474
-        // header is 10 bytes minimum. may be longer, though.
475
-        $headerLength = 10;
476
-        // extra fields, need to skip 'em
477
-        if ($flags & 4) {
478
-            if ($length - $headerLength - 2 < 8) {
479
-                throw new HTTP_Request2_Exception('Error parsing gzip header: data too short');
480
-            }
481
-            $extraLength = unpack('v', substr($data, 10, 2));
482
-            if ($length - $headerLength - 2 - $extraLength[1] < 8) {
483
-                throw new HTTP_Request2_Exception('Error parsing gzip header: data too short');
484
-            }
485
-            $headerLength += $extraLength[1] + 2;
486
-        }
487
-        // file name, need to skip that
488
-        if ($flags & 8) {
489
-            if ($length - $headerLength - 1 < 8) {
490
-                throw new HTTP_Request2_Exception('Error parsing gzip header: data too short');
491
-            }
492
-            $filenameLength = strpos(substr($data, $headerLength), chr(0));
493
-            if (false === $filenameLength || $length - $headerLength - $filenameLength - 1 < 8) {
494
-                throw new HTTP_Request2_Exception('Error parsing gzip header: data too short');
495
-            }
496
-            $headerLength += $filenameLength + 1;
497
-        }
498
-        // comment, need to skip that also
499
-        if ($flags & 16) {
500
-            if ($length - $headerLength - 1 < 8) {
501
-                throw new HTTP_Request2_Exception('Error parsing gzip header: data too short');
502
-            }
503
-            $commentLength = strpos(substr($data, $headerLength), chr(0));
504
-            if (false === $commentLength || $length - $headerLength - $commentLength - 1 < 8) {
505
-                throw new HTTP_Request2_Exception('Error parsing gzip header: data too short');
506
-            }
507
-            $headerLength += $commentLength + 1;
508
-        }
509
-        // have a CRC for header. let's check
510
-        if ($flags & 2) {
511
-            if ($length - $headerLength - 2 < 8) {
512
-                throw new HTTP_Request2_Exception('Error parsing gzip header: data too short');
513
-            }
514
-            $crcReal   = 0xffff & crc32(substr($data, 0, $headerLength));
515
-            $crcStored = unpack('v', substr($data, $headerLength, 2));
516
-            if ($crcReal != $crcStored[1]) {
517
-                throw new HTTP_Request2_Exception('Header CRC check failed');
518
-            }
519
-            $headerLength += 2;
520
-        }
521
-        // unpacked data CRC and size at the end of encoded data
522
-        $tmp = unpack('V2', substr($data, -8));
523
-        $dataCrc  = $tmp[1];
524
-        $dataSize = $tmp[2];
525
-
526
-        // finally, call the gzinflate() function
527
-        // don't pass $dataSize to gzinflate, see bugs #13135, #14370
528
-        $unpacked = gzinflate(substr($data, $headerLength, -8));
529
-        if (false === $unpacked) {
530
-            throw new HTTP_Request2_Exception('gzinflate() call failed');
531
-        } elseif ($dataSize != strlen($unpacked)) {
532
-            throw new HTTP_Request2_Exception('Data size check failed');
533
-        } elseif ((0xffffffff & $dataCrc) != (0xffffffff & crc32($unpacked))) {
534
-            throw new HTTP_Request2_Exception('Data CRC check failed');
535
-        }
536
-        return $unpacked;
537
-    }
455
+	public static function decodeGzip($data)
456
+	{
457
+		$length = strlen($data);
458
+		// If it doesn't look like gzip-encoded data, don't bother
459
+		if (18 > $length || strcmp(substr($data, 0, 2), "\x1f\x8b")) {
460
+			return $data;
461
+		}
462
+		if (!function_exists('gzinflate')) {
463
+			throw new HTTP_Request2_Exception('Unable to decode body: gzip extension not available');
464
+		}
465
+		$method = ord(substr($data, 2, 1));
466
+		if (8 != $method) {
467
+			throw new HTTP_Request2_Exception('Error parsing gzip header: unknown compression method');
468
+		}
469
+		$flags = ord(substr($data, 3, 1));
470
+		if ($flags & 224) {
471
+			throw new HTTP_Request2_Exception('Error parsing gzip header: reserved bits are set');
472
+		}
473
+
474
+		// header is 10 bytes minimum. may be longer, though.
475
+		$headerLength = 10;
476
+		// extra fields, need to skip 'em
477
+		if ($flags & 4) {
478
+			if ($length - $headerLength - 2 < 8) {
479
+				throw new HTTP_Request2_Exception('Error parsing gzip header: data too short');
480
+			}
481
+			$extraLength = unpack('v', substr($data, 10, 2));
482
+			if ($length - $headerLength - 2 - $extraLength[1] < 8) {
483
+				throw new HTTP_Request2_Exception('Error parsing gzip header: data too short');
484
+			}
485
+			$headerLength += $extraLength[1] + 2;
486
+		}
487
+		// file name, need to skip that
488
+		if ($flags & 8) {
489
+			if ($length - $headerLength - 1 < 8) {
490
+				throw new HTTP_Request2_Exception('Error parsing gzip header: data too short');
491
+			}
492
+			$filenameLength = strpos(substr($data, $headerLength), chr(0));
493
+			if (false === $filenameLength || $length - $headerLength - $filenameLength - 1 < 8) {
494
+				throw new HTTP_Request2_Exception('Error parsing gzip header: data too short');
495
+			}
496
+			$headerLength += $filenameLength + 1;
497
+		}
498
+		// comment, need to skip that also
499
+		if ($flags & 16) {
500
+			if ($length - $headerLength - 1 < 8) {
501
+				throw new HTTP_Request2_Exception('Error parsing gzip header: data too short');
502
+			}
503
+			$commentLength = strpos(substr($data, $headerLength), chr(0));
504
+			if (false === $commentLength || $length - $headerLength - $commentLength - 1 < 8) {
505
+				throw new HTTP_Request2_Exception('Error parsing gzip header: data too short');
506
+			}
507
+			$headerLength += $commentLength + 1;
508
+		}
509
+		// have a CRC for header. let's check
510
+		if ($flags & 2) {
511
+			if ($length - $headerLength - 2 < 8) {
512
+				throw new HTTP_Request2_Exception('Error parsing gzip header: data too short');
513
+			}
514
+			$crcReal   = 0xffff & crc32(substr($data, 0, $headerLength));
515
+			$crcStored = unpack('v', substr($data, $headerLength, 2));
516
+			if ($crcReal != $crcStored[1]) {
517
+				throw new HTTP_Request2_Exception('Header CRC check failed');
518
+			}
519
+			$headerLength += 2;
520
+		}
521
+		// unpacked data CRC and size at the end of encoded data
522
+		$tmp = unpack('V2', substr($data, -8));
523
+		$dataCrc  = $tmp[1];
524
+		$dataSize = $tmp[2];
525
+
526
+		// finally, call the gzinflate() function
527
+		// don't pass $dataSize to gzinflate, see bugs #13135, #14370
528
+		$unpacked = gzinflate(substr($data, $headerLength, -8));
529
+		if (false === $unpacked) {
530
+			throw new HTTP_Request2_Exception('gzinflate() call failed');
531
+		} elseif ($dataSize != strlen($unpacked)) {
532
+			throw new HTTP_Request2_Exception('Data size check failed');
533
+		} elseif ((0xffffffff & $dataCrc) != (0xffffffff & crc32($unpacked))) {
534
+			throw new HTTP_Request2_Exception('Data CRC check failed');
535
+		}
536
+		return $unpacked;
537
+	}
538 538
 
539 539
    /**
540 540
     * Decodes the message-body encoded by deflate
@@ -543,17 +543,17 @@  discard block
 block discarded – undo
543 543
     * @return   string  decoded data
544 544
     * @throws   HTTP_Request2_Exception
545 545
     */
546
-    public static function decodeDeflate($data)
547
-    {
548
-        if (!function_exists('gzuncompress')) {
549
-            throw new HTTP_Request2_Exception('Unable to decode body: gzip extension not available');
550
-        }
551
-        // RFC 2616 defines 'deflate' encoding as zlib format from RFC 1950,
552
-        // while many applications send raw deflate stream from RFC 1951.
553
-        // We should check for presence of zlib header and use gzuncompress() or
554
-        // gzinflate() as needed. See bug #15305
555
-        $header = unpack('n', substr($data, 0, 2));
556
-        return (0 == $header[1] % 31)? gzuncompress($data): gzinflate($data);
557
-    }
546
+	public static function decodeDeflate($data)
547
+	{
548
+		if (!function_exists('gzuncompress')) {
549
+			throw new HTTP_Request2_Exception('Unable to decode body: gzip extension not available');
550
+		}
551
+		// RFC 2616 defines 'deflate' encoding as zlib format from RFC 1950,
552
+		// while many applications send raw deflate stream from RFC 1951.
553
+		// We should check for presence of zlib header and use gzuncompress() or
554
+		// gzinflate() as needed. See bug #15305
555
+		$header = unpack('n', substr($data, 0, 2));
556
+		return (0 == $header[1] % 31)? gzuncompress($data): gzinflate($data);
557
+	}
558 558
 }
559 559
 ?>
560 560
\ No newline at end of file
Please login to merge, or discard this patch.
Spacing   +6 added lines, -7 removed lines patch added patch discarded remove patch
@@ -158,7 +158,7 @@  discard block
 block discarded – undo
158 158
         // the request
159 159
         300 => 'Multiple Choices',
160 160
         301 => 'Moved Permanently',
161
-        302 => 'Found',  // 1.1
161
+        302 => 'Found', // 1.1
162 162
         303 => 'See Other',
163 163
         304 => 'Not Modified',
164 164
         305 => 'Use Proxy',
@@ -216,7 +216,7 @@  discard block
 block discarded – undo
216 216
         } elseif (!empty(self::$phrases[$this->code])) {
217 217
             $this->reasonPhrase = self::$phrases[$this->code];
218 218
         }
219
-        $this->bodyEncoded = (bool)$bodyEncoded;
219
+        $this->bodyEncoded = (bool) $bodyEncoded;
220 220
     }
221 221
 
222 222
    /**
@@ -236,9 +236,8 @@  discard block
 block discarded – undo
236 236
         // empty string signals the end of headers, process the received ones
237 237
         if ('' == $headerLine) {
238 238
             if (!empty($this->headers['set-cookie'])) {
239
-                $cookies = is_array($this->headers['set-cookie'])?
240
-                           $this->headers['set-cookie']:
241
-                           array($this->headers['set-cookie']);
239
+                $cookies = is_array($this->headers['set-cookie']) ?
240
+                           $this->headers['set-cookie'] : array($this->headers['set-cookie']);
242 241
                 foreach ($cookies as $cookieString) {
243 242
                     $this->parseCookie($cookieString);
244 243
                 }
@@ -376,7 +375,7 @@  discard block
 block discarded – undo
376 375
             return $this->headers;
377 376
         } else {
378 377
             $headerName = strtolower($headerName);
379
-            return isset($this->headers[$headerName])? $this->headers[$headerName]: null;
378
+            return isset($this->headers[$headerName]) ? $this->headers[$headerName] : null;
380 379
         }
381 380
     }
382 381
 
@@ -553,7 +552,7 @@  discard block
 block discarded – undo
553 552
         // We should check for presence of zlib header and use gzuncompress() or
554 553
         // gzinflate() as needed. See bug #15305
555 554
         $header = unpack('n', substr($data, 0, 2));
556
-        return (0 == $header[1] % 31)? gzuncompress($data): gzinflate($data);
555
+        return (0 == $header[1] % 31) ? gzuncompress($data) : gzinflate($data);
557 556
     }
558 557
 }
559 558
 ?>
560 559
\ No newline at end of file
Please login to merge, or discard this patch.
libs/PEAR.1.9/PEAR.php 2 patches
Indentation   +1034 added lines, -1034 removed lines patch added patch discarded remove patch
@@ -1,23 +1,23 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 /**
3
- * PEAR, the PHP Extension and Application Repository
4
- *
5
- * PEAR class and PEAR_Error class
6
- *
7
- * PHP versions 4 and 5
8
- *
9
- * @category   pear
10
- * @package    PEAR
11
- * @author     Sterling Hughes <[email protected]>
12
- * @author     Stig Bakken <[email protected]>
13
- * @author     Tomas V.V.Cox <[email protected]>
14
- * @author     Greg Beaver <[email protected]>
15
- * @copyright  1997-2009 The Authors
16
- * @license    http://opensource.org/licenses/bsd-license.php New BSD License
17
- * @version    CVS: $Id: PEAR.php 286670 2009-08-02 14:16:06Z dufuz $
18
- * @link       http://pear.php.net/package/PEAR
19
- * @since      File available since Release 0.1
20
- */
3
+	 * PEAR, the PHP Extension and Application Repository
4
+	 *
5
+	 * PEAR class and PEAR_Error class
6
+	 *
7
+	 * PHP versions 4 and 5
8
+	 *
9
+	 * @category   pear
10
+	 * @package    PEAR
11
+	 * @author     Sterling Hughes <[email protected]>
12
+	 * @author     Stig Bakken <[email protected]>
13
+	 * @author     Tomas V.V.Cox <[email protected]>
14
+	 * @author     Greg Beaver <[email protected]>
15
+	 * @copyright  1997-2009 The Authors
16
+	 * @license    http://opensource.org/licenses/bsd-license.php New BSD License
17
+	 * @version    CVS: $Id: PEAR.php 286670 2009-08-02 14:16:06Z dufuz $
18
+	 * @link       http://pear.php.net/package/PEAR
19
+	 * @since      File available since Release 0.1
20
+	 */
21 21
 
22 22
 /**#@+
23 23
  * ERROR constants
@@ -34,16 +34,16 @@  discard block
 block discarded – undo
34 34
 define('PEAR_ERROR_EXCEPTION', 32);
35 35
 /**#@-*/
36 36
 define('PEAR_ZE2', (function_exists('version_compare') &&
37
-                    version_compare(zend_version(), "2-dev", "ge")));
37
+					version_compare(zend_version(), "2-dev", "ge")));
38 38
 
39 39
 if (substr(PHP_OS, 0, 3) == 'WIN') {
40
-    define('OS_WINDOWS', true);
41
-    define('OS_UNIX',    false);
42
-    define('PEAR_OS',    'Windows');
40
+	define('OS_WINDOWS', true);
41
+	define('OS_UNIX',    false);
42
+	define('PEAR_OS',    'Windows');
43 43
 } else {
44
-    define('OS_WINDOWS', false);
45
-    define('OS_UNIX',    true);
46
-    define('PEAR_OS',    'Unix'); // blatant assumption
44
+	define('OS_WINDOWS', false);
45
+	define('OS_UNIX',    true);
46
+	define('PEAR_OS',    'Unix'); // blatant assumption
47 47
 }
48 48
 
49 49
 $GLOBALS['_PEAR_default_error_mode']     = PEAR_ERROR_RETURN;
@@ -86,728 +86,728 @@  discard block
 block discarded – undo
86 86
  */
87 87
 class PEAR
88 88
 {
89
-    // {{{ properties
90
-
91
-    /**
92
-     * Whether to enable internal debug messages.
93
-     *
94
-     * @var     bool
95
-     * @access  private
96
-     */
97
-    var $_debug = false;
98
-
99
-    /**
100
-     * Default error mode for this object.
101
-     *
102
-     * @var     int
103
-     * @access  private
104
-     */
105
-    var $_default_error_mode = null;
106
-
107
-    /**
108
-     * Default error options used for this object when error mode
109
-     * is PEAR_ERROR_TRIGGER.
110
-     *
111
-     * @var     int
112
-     * @access  private
113
-     */
114
-    var $_default_error_options = null;
115
-
116
-    /**
117
-     * Default error handler (callback) for this object, if error mode is
118
-     * PEAR_ERROR_CALLBACK.
119
-     *
120
-     * @var     string
121
-     * @access  private
122
-     */
123
-    var $_default_error_handler = '';
124
-
125
-    /**
126
-     * Which class to use for error objects.
127
-     *
128
-     * @var     string
129
-     * @access  private
130
-     */
131
-    var $_error_class = 'PEAR_Error';
132
-
133
-    /**
134
-     * An array of expected errors.
135
-     *
136
-     * @var     array
137
-     * @access  private
138
-     */
139
-    var $_expected_errors = array();
140
-
141
-    // }}}
142
-
143
-    // {{{ constructor
144
-
145
-    /**
146
-     * Constructor.  Registers this object in
147
-     * $_PEAR_destructor_object_list for destructor emulation if a
148
-     * destructor object exists.
149
-     *
150
-     * @param string $error_class  (optional) which class to use for
151
-     *        error objects, defaults to PEAR_Error.
152
-     * @access public
153
-     * @return void
154
-     */
155
-    function PEAR($error_class = null)
156
-    {
157
-        $classname = strtolower(get_class($this));
158
-        if ($this->_debug) {
159
-            print "PEAR constructor called, class=$classname\n";
160
-        }
161
-        if ($error_class !== null) {
162
-            $this->_error_class = $error_class;
163
-        }
164
-        while ($classname && strcasecmp($classname, "pear")) {
165
-            $destructor = "_$classname";
166
-            if (method_exists($this, $destructor)) {
167
-                global $_PEAR_destructor_object_list;
168
-                $_PEAR_destructor_object_list[] = &$this;
169
-                if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) {
170
-                    register_shutdown_function("_PEAR_call_destructors");
171
-                    $GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true;
172
-                }
173
-                break;
174
-            } else {
175
-                $classname = get_parent_class($classname);
176
-            }
177
-        }
178
-    }
179
-
180
-    // }}}
181
-    // {{{ destructor
182
-
183
-    /**
184
-     * Destructor (the emulated type of...).  Does nothing right now,
185
-     * but is included for forward compatibility, so subclass
186
-     * destructors should always call it.
187
-     *
188
-     * See the note in the class desciption about output from
189
-     * destructors.
190
-     *
191
-     * @access public
192
-     * @return void
193
-     */
194
-    function _PEAR() {
195
-        if ($this->_debug) {
196
-            printf("PEAR destructor called, class=%s\n", strtolower(get_class($this)));
197
-        }
198
-    }
199
-
200
-    // }}}
201
-    // {{{ getStaticProperty()
202
-
203
-    /**
204
-    * If you have a class that's mostly/entirely static, and you need static
205
-    * properties, you can use this method to simulate them. Eg. in your method(s)
206
-    * do this: $myVar = &PEAR::getStaticProperty('myclass', 'myVar');
207
-    * You MUST use a reference, or they will not persist!
208
-    *
209
-    * @access public
210
-    * @param  string $class  The calling classname, to prevent clashes
211
-    * @param  string $var    The variable to retrieve.
212
-    * @return mixed   A reference to the variable. If not set it will be
213
-    *                 auto initialised to NULL.
214
-    */
215
-    function &getStaticProperty($class, $var)
216
-    {
217
-        static $properties;
218
-        if (!isset($properties[$class])) {
219
-            $properties[$class] = array();
220
-        }
221
-
222
-        if (!array_key_exists($var, $properties[$class])) {
223
-            $properties[$class][$var] = null;
224
-        }
225
-
226
-        return $properties[$class][$var];
227
-    }
228
-
229
-    // }}}
230
-    // {{{ registerShutdownFunc()
231
-
232
-    /**
233
-    * Use this function to register a shutdown method for static
234
-    * classes.
235
-    *
236
-    * @access public
237
-    * @param  mixed $func  The function name (or array of class/method) to call
238
-    * @param  mixed $args  The arguments to pass to the function
239
-    * @return void
240
-    */
241
-    function registerShutdownFunc($func, $args = array())
242
-    {
243
-        // if we are called statically, there is a potential
244
-        // that no shutdown func is registered.  Bug #6445
245
-        if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) {
246
-            register_shutdown_function("_PEAR_call_destructors");
247
-            $GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true;
248
-        }
249
-        $GLOBALS['_PEAR_shutdown_funcs'][] = array($func, $args);
250
-    }
251
-
252
-    // }}}
253
-    // {{{ isError()
254
-
255
-    /**
256
-     * Tell whether a value is a PEAR error.
257
-     *
258
-     * @param   mixed $data   the value to test
259
-     * @param   int   $code   if $data is an error object, return true
260
-     *                        only if $code is a string and
261
-     *                        $obj->getMessage() == $code or
262
-     *                        $code is an integer and $obj->getCode() == $code
263
-     * @access  public
264
-     * @return  bool    true if parameter is an error
265
-     */
266
-    function isError($data, $code = null)
267
-    {
268
-        if (!is_a($data, 'PEAR_Error')) {
269
-            return false;
270
-        }
271
-
272
-        if (is_null($code)) {
273
-            return true;
274
-        } elseif (is_string($code)) {
275
-            return $data->getMessage() == $code;
276
-        }
277
-
278
-        return $data->getCode() == $code;
279
-    }
280
-
281
-    // }}}
282
-    // {{{ setErrorHandling()
283
-
284
-    /**
285
-     * Sets how errors generated by this object should be handled.
286
-     * Can be invoked both in objects and statically.  If called
287
-     * statically, setErrorHandling sets the default behaviour for all
288
-     * PEAR objects.  If called in an object, setErrorHandling sets
289
-     * the default behaviour for that object.
290
-     *
291
-     * @param int $mode
292
-     *        One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT,
293
-     *        PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE,
294
-     *        PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION.
295
-     *
296
-     * @param mixed $options
297
-     *        When $mode is PEAR_ERROR_TRIGGER, this is the error level (one
298
-     *        of E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR).
299
-     *
300
-     *        When $mode is PEAR_ERROR_CALLBACK, this parameter is expected
301
-     *        to be the callback function or method.  A callback
302
-     *        function is a string with the name of the function, a
303
-     *        callback method is an array of two elements: the element
304
-     *        at index 0 is the object, and the element at index 1 is
305
-     *        the name of the method to call in the object.
306
-     *
307
-     *        When $mode is PEAR_ERROR_PRINT or PEAR_ERROR_DIE, this is
308
-     *        a printf format string used when printing the error
309
-     *        message.
310
-     *
311
-     * @access public
312
-     * @return void
313
-     * @see PEAR_ERROR_RETURN
314
-     * @see PEAR_ERROR_PRINT
315
-     * @see PEAR_ERROR_TRIGGER
316
-     * @see PEAR_ERROR_DIE
317
-     * @see PEAR_ERROR_CALLBACK
318
-     * @see PEAR_ERROR_EXCEPTION
319
-     *
320
-     * @since PHP 4.0.5
321
-     */
322
-
323
-    function setErrorHandling($mode = null, $options = null)
324
-    {
325
-        if (isset($this) && is_a($this, 'PEAR')) {
326
-            $setmode     = &$this->_default_error_mode;
327
-            $setoptions  = &$this->_default_error_options;
328
-        } else {
329
-            $setmode     = &$GLOBALS['_PEAR_default_error_mode'];
330
-            $setoptions  = &$GLOBALS['_PEAR_default_error_options'];
331
-        }
332
-
333
-        switch ($mode) {
334
-            case PEAR_ERROR_EXCEPTION:
335
-            case PEAR_ERROR_RETURN:
336
-            case PEAR_ERROR_PRINT:
337
-            case PEAR_ERROR_TRIGGER:
338
-            case PEAR_ERROR_DIE:
339
-            case null:
340
-                $setmode = $mode;
341
-                $setoptions = $options;
342
-                break;
343
-
344
-            case PEAR_ERROR_CALLBACK:
345
-                $setmode = $mode;
346
-                // class/object method callback
347
-                if (is_callable($options)) {
348
-                    $setoptions = $options;
349
-                } else {
350
-                    trigger_error("invalid error callback", E_USER_WARNING);
351
-                }
352
-                break;
353
-
354
-            default:
355
-                trigger_error("invalid error mode", E_USER_WARNING);
356
-                break;
357
-        }
358
-    }
359
-
360
-    // }}}
361
-    // {{{ expectError()
362
-
363
-    /**
364
-     * This method is used to tell which errors you expect to get.
365
-     * Expected errors are always returned with error mode
366
-     * PEAR_ERROR_RETURN.  Expected error codes are stored in a stack,
367
-     * and this method pushes a new element onto it.  The list of
368
-     * expected errors are in effect until they are popped off the
369
-     * stack with the popExpect() method.
370
-     *
371
-     * Note that this method can not be called statically
372
-     *
373
-     * @param mixed $code a single error code or an array of error codes to expect
374
-     *
375
-     * @return int     the new depth of the "expected errors" stack
376
-     * @access public
377
-     */
378
-    function expectError($code = '*')
379
-    {
380
-        if (is_array($code)) {
381
-            array_push($this->_expected_errors, $code);
382
-        } else {
383
-            array_push($this->_expected_errors, array($code));
384
-        }
385
-        return sizeof($this->_expected_errors);
386
-    }
387
-
388
-    // }}}
389
-    // {{{ popExpect()
390
-
391
-    /**
392
-     * This method pops one element off the expected error codes
393
-     * stack.
394
-     *
395
-     * @return array   the list of error codes that were popped
396
-     */
397
-    function popExpect()
398
-    {
399
-        return array_pop($this->_expected_errors);
400
-    }
401
-
402
-    // }}}
403
-    // {{{ _checkDelExpect()
404
-
405
-    /**
406
-     * This method checks unsets an error code if available
407
-     *
408
-     * @param mixed error code
409
-     * @return bool true if the error code was unset, false otherwise
410
-     * @access private
411
-     * @since PHP 4.3.0
412
-     */
413
-    function _checkDelExpect($error_code)
414
-    {
415
-        $deleted = false;
416
-
417
-        foreach ($this->_expected_errors AS $key => $error_array) {
418
-            if (in_array($error_code, $error_array)) {
419
-                unset($this->_expected_errors[$key][array_search($error_code, $error_array)]);
420
-                $deleted = true;
421
-            }
422
-
423
-            // clean up empty arrays
424
-            if (0 == count($this->_expected_errors[$key])) {
425
-                unset($this->_expected_errors[$key]);
426
-            }
427
-        }
428
-        return $deleted;
429
-    }
430
-
431
-    // }}}
432
-    // {{{ delExpect()
433
-
434
-    /**
435
-     * This method deletes all occurences of the specified element from
436
-     * the expected error codes stack.
437
-     *
438
-     * @param  mixed $error_code error code that should be deleted
439
-     * @return mixed list of error codes that were deleted or error
440
-     * @access public
441
-     * @since PHP 4.3.0
442
-     */
443
-    function delExpect($error_code)
444
-    {
445
-        $deleted = false;
446
-        if ((is_array($error_code) && (0 != count($error_code)))) {
447
-            // $error_code is a non-empty array here;
448
-            // we walk through it trying to unset all
449
-            // values
450
-            foreach($error_code as $key => $error) {
451
-                if ($this->_checkDelExpect($error)) {
452
-                    $deleted =  true;
453
-                } else {
454
-                    $deleted = false;
455
-                }
456
-            }
457
-            return $deleted ? true : PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
458
-        } elseif (!empty($error_code)) {
459
-            // $error_code comes alone, trying to unset it
460
-            if ($this->_checkDelExpect($error_code)) {
461
-                return true;
462
-            } else {
463
-                return PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
464
-            }
465
-        }
466
-
467
-        // $error_code is empty
468
-        return PEAR::raiseError("The expected error you submitted is empty"); // IMPROVE ME
469
-    }
470
-
471
-    // }}}
472
-    // {{{ raiseError()
473
-
474
-    /**
475
-     * This method is a wrapper that returns an instance of the
476
-     * configured error class with this object's default error
477
-     * handling applied.  If the $mode and $options parameters are not
478
-     * specified, the object's defaults are used.
479
-     *
480
-     * @param mixed $message a text error message or a PEAR error object
481
-     *
482
-     * @param int $code      a numeric error code (it is up to your class
483
-     *                  to define these if you want to use codes)
484
-     *
485
-     * @param int $mode      One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT,
486
-     *                  PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE,
487
-     *                  PEAR_ERROR_CALLBACK, PEAR_ERROR_EXCEPTION.
488
-     *
489
-     * @param mixed $options If $mode is PEAR_ERROR_TRIGGER, this parameter
490
-     *                  specifies the PHP-internal error level (one of
491
-     *                  E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR).
492
-     *                  If $mode is PEAR_ERROR_CALLBACK, this
493
-     *                  parameter specifies the callback function or
494
-     *                  method.  In other error modes this parameter
495
-     *                  is ignored.
496
-     *
497
-     * @param string $userinfo If you need to pass along for example debug
498
-     *                  information, this parameter is meant for that.
499
-     *
500
-     * @param string $error_class The returned error object will be
501
-     *                  instantiated from this class, if specified.
502
-     *
503
-     * @param bool $skipmsg If true, raiseError will only pass error codes,
504
-     *                  the error message parameter will be dropped.
505
-     *
506
-     * @access public
507
-     * @return object   a PEAR error object
508
-     * @see PEAR::setErrorHandling
509
-     * @since PHP 4.0.5
510
-     */
511
-    function &raiseError($message = null,
512
-                         $code = null,
513
-                         $mode = null,
514
-                         $options = null,
515
-                         $userinfo = null,
516
-                         $error_class = null,
517
-                         $skipmsg = false)
518
-    {
519
-        // The error is yet a PEAR error object
520
-        if (is_object($message)) {
521
-            $code        = $message->getCode();
522
-            $userinfo    = $message->getUserInfo();
523
-            $error_class = $message->getType();
524
-            $message->error_message_prefix = '';
525
-            $message     = $message->getMessage();
526
-        }
527
-
528
-        if (isset($this) && isset($this->_expected_errors) && sizeof($this->_expected_errors) > 0 && sizeof($exp = end($this->_expected_errors))) {
529
-            if ($exp[0] == "*" ||
530
-                (is_int(reset($exp)) && in_array($code, $exp)) ||
531
-                (is_string(reset($exp)) && in_array($message, $exp))) {
532
-                $mode = PEAR_ERROR_RETURN;
533
-            }
534
-        }
535
-
536
-        // No mode given, try global ones
537
-        if ($mode === null) {
538
-            // Class error handler
539
-            if (isset($this) && isset($this->_default_error_mode)) {
540
-                $mode    = $this->_default_error_mode;
541
-                $options = $this->_default_error_options;
542
-            // Global error handler
543
-            } elseif (isset($GLOBALS['_PEAR_default_error_mode'])) {
544
-                $mode    = $GLOBALS['_PEAR_default_error_mode'];
545
-                $options = $GLOBALS['_PEAR_default_error_options'];
546
-            }
547
-        }
548
-
549
-        if ($error_class !== null) {
550
-            $ec = $error_class;
551
-        } elseif (isset($this) && isset($this->_error_class)) {
552
-            $ec = $this->_error_class;
553
-        } else {
554
-            $ec = 'PEAR_Error';
555
-        }
556
-
557
-        if (intval(PHP_VERSION) < 5) {
558
-            // little non-eval hack to fix bug #12147
559
-            include 'PEAR/FixPHP5PEARWarnings.php';
560
-            return $a;
561
-        }
562
-
563
-        if ($skipmsg) {
564
-            $a = new $ec($code, $mode, $options, $userinfo);
565
-        } else {
566
-            $a = new $ec($message, $code, $mode, $options, $userinfo);
567
-        }
568
-
569
-        return $a;
570
-    }
571
-
572
-    // }}}
573
-    // {{{ throwError()
574
-
575
-    /**
576
-     * Simpler form of raiseError with fewer options.  In most cases
577
-     * message, code and userinfo are enough.
578
-     *
579
-     * @param string $message
580
-     *
581
-     */
582
-    function &throwError($message = null,
583
-                         $code = null,
584
-                         $userinfo = null)
585
-    {
586
-        if (isset($this) && is_a($this, 'PEAR')) {
587
-            $a = &$this->raiseError($message, $code, null, null, $userinfo);
588
-            return $a;
589
-        }
590
-
591
-        $a = &PEAR::raiseError($message, $code, null, null, $userinfo);
592
-        return $a;
593
-    }
594
-
595
-    // }}}
596
-    function staticPushErrorHandling($mode, $options = null)
597
-    {
598
-        $stack = &$GLOBALS['_PEAR_error_handler_stack'];
599
-        $def_mode    = &$GLOBALS['_PEAR_default_error_mode'];
600
-        $def_options = &$GLOBALS['_PEAR_default_error_options'];
601
-        $stack[] = array($def_mode, $def_options);
602
-        switch ($mode) {
603
-            case PEAR_ERROR_EXCEPTION:
604
-            case PEAR_ERROR_RETURN:
605
-            case PEAR_ERROR_PRINT:
606
-            case PEAR_ERROR_TRIGGER:
607
-            case PEAR_ERROR_DIE:
608
-            case null:
609
-                $def_mode = $mode;
610
-                $def_options = $options;
611
-                break;
612
-
613
-            case PEAR_ERROR_CALLBACK:
614
-                $def_mode = $mode;
615
-                // class/object method callback
616
-                if (is_callable($options)) {
617
-                    $def_options = $options;
618
-                } else {
619
-                    trigger_error("invalid error callback", E_USER_WARNING);
620
-                }
621
-                break;
622
-
623
-            default:
624
-                trigger_error("invalid error mode", E_USER_WARNING);
625
-                break;
626
-        }
627
-        $stack[] = array($mode, $options);
628
-        return true;
629
-    }
630
-
631
-    function staticPopErrorHandling()
632
-    {
633
-        $stack = &$GLOBALS['_PEAR_error_handler_stack'];
634
-        $setmode     = &$GLOBALS['_PEAR_default_error_mode'];
635
-        $setoptions  = &$GLOBALS['_PEAR_default_error_options'];
636
-        array_pop($stack);
637
-        list($mode, $options) = $stack[sizeof($stack) - 1];
638
-        array_pop($stack);
639
-        switch ($mode) {
640
-            case PEAR_ERROR_EXCEPTION:
641
-            case PEAR_ERROR_RETURN:
642
-            case PEAR_ERROR_PRINT:
643
-            case PEAR_ERROR_TRIGGER:
644
-            case PEAR_ERROR_DIE:
645
-            case null:
646
-                $setmode = $mode;
647
-                $setoptions = $options;
648
-                break;
649
-
650
-            case PEAR_ERROR_CALLBACK:
651
-                $setmode = $mode;
652
-                // class/object method callback
653
-                if (is_callable($options)) {
654
-                    $setoptions = $options;
655
-                } else {
656
-                    trigger_error("invalid error callback", E_USER_WARNING);
657
-                }
658
-                break;
659
-
660
-            default:
661
-                trigger_error("invalid error mode", E_USER_WARNING);
662
-                break;
663
-        }
664
-        return true;
665
-    }
666
-
667
-    // {{{ pushErrorHandling()
668
-
669
-    /**
670
-     * Push a new error handler on top of the error handler options stack. With this
671
-     * you can easily override the actual error handler for some code and restore
672
-     * it later with popErrorHandling.
673
-     *
674
-     * @param mixed $mode (same as setErrorHandling)
675
-     * @param mixed $options (same as setErrorHandling)
676
-     *
677
-     * @return bool Always true
678
-     *
679
-     * @see PEAR::setErrorHandling
680
-     */
681
-    function pushErrorHandling($mode, $options = null)
682
-    {
683
-        $stack = &$GLOBALS['_PEAR_error_handler_stack'];
684
-        if (isset($this) && is_a($this, 'PEAR')) {
685
-            $def_mode    = &$this->_default_error_mode;
686
-            $def_options = &$this->_default_error_options;
687
-        } else {
688
-            $def_mode    = &$GLOBALS['_PEAR_default_error_mode'];
689
-            $def_options = &$GLOBALS['_PEAR_default_error_options'];
690
-        }
691
-        $stack[] = array($def_mode, $def_options);
692
-
693
-        if (isset($this) && is_a($this, 'PEAR')) {
694
-            $this->setErrorHandling($mode, $options);
695
-        } else {
696
-            PEAR::setErrorHandling($mode, $options);
697
-        }
698
-        $stack[] = array($mode, $options);
699
-        return true;
700
-    }
701
-
702
-    // }}}
703
-    // {{{ popErrorHandling()
704
-
705
-    /**
706
-    * Pop the last error handler used
707
-    *
708
-    * @return bool Always true
709
-    *
710
-    * @see PEAR::pushErrorHandling
711
-    */
712
-    function popErrorHandling()
713
-    {
714
-        $stack = &$GLOBALS['_PEAR_error_handler_stack'];
715
-        array_pop($stack);
716
-        list($mode, $options) = $stack[sizeof($stack) - 1];
717
-        array_pop($stack);
718
-        if (isset($this) && is_a($this, 'PEAR')) {
719
-            $this->setErrorHandling($mode, $options);
720
-        } else {
721
-            PEAR::setErrorHandling($mode, $options);
722
-        }
723
-        return true;
724
-    }
725
-
726
-    // }}}
727
-    // {{{ loadExtension()
728
-
729
-    /**
730
-    * OS independant PHP extension load. Remember to take care
731
-    * on the correct extension name for case sensitive OSes.
732
-    *
733
-    * @param string $ext The extension name
734
-    * @return bool Success or not on the dl() call
735
-    */
736
-    function loadExtension($ext)
737
-    {
738
-        if (!extension_loaded($ext)) {
739
-            // if either returns true dl() will produce a FATAL error, stop that
740
-            if ((ini_get('enable_dl') != 1) || (ini_get('safe_mode') == 1)) {
741
-                return false;
742
-            }
743
-
744
-            if (OS_WINDOWS) {
745
-                $suffix = '.dll';
746
-            } elseif (PHP_OS == 'HP-UX') {
747
-                $suffix = '.sl';
748
-            } elseif (PHP_OS == 'AIX') {
749
-                $suffix = '.a';
750
-            } elseif (PHP_OS == 'OSX') {
751
-                $suffix = '.bundle';
752
-            } else {
753
-                $suffix = '.so';
754
-            }
755
-
756
-            return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix);
757
-        }
758
-
759
-        return true;
760
-    }
761
-
762
-    // }}}
89
+	// {{{ properties
90
+
91
+	/**
92
+	 * Whether to enable internal debug messages.
93
+	 *
94
+	 * @var     bool
95
+	 * @access  private
96
+	 */
97
+	var $_debug = false;
98
+
99
+	/**
100
+	 * Default error mode for this object.
101
+	 *
102
+	 * @var     int
103
+	 * @access  private
104
+	 */
105
+	var $_default_error_mode = null;
106
+
107
+	/**
108
+	 * Default error options used for this object when error mode
109
+	 * is PEAR_ERROR_TRIGGER.
110
+	 *
111
+	 * @var     int
112
+	 * @access  private
113
+	 */
114
+	var $_default_error_options = null;
115
+
116
+	/**
117
+	 * Default error handler (callback) for this object, if error mode is
118
+	 * PEAR_ERROR_CALLBACK.
119
+	 *
120
+	 * @var     string
121
+	 * @access  private
122
+	 */
123
+	var $_default_error_handler = '';
124
+
125
+	/**
126
+	 * Which class to use for error objects.
127
+	 *
128
+	 * @var     string
129
+	 * @access  private
130
+	 */
131
+	var $_error_class = 'PEAR_Error';
132
+
133
+	/**
134
+	 * An array of expected errors.
135
+	 *
136
+	 * @var     array
137
+	 * @access  private
138
+	 */
139
+	var $_expected_errors = array();
140
+
141
+	// }}}
142
+
143
+	// {{{ constructor
144
+
145
+	/**
146
+	 * Constructor.  Registers this object in
147
+	 * $_PEAR_destructor_object_list for destructor emulation if a
148
+	 * destructor object exists.
149
+	 *
150
+	 * @param string $error_class  (optional) which class to use for
151
+	 *        error objects, defaults to PEAR_Error.
152
+	 * @access public
153
+	 * @return void
154
+	 */
155
+	function PEAR($error_class = null)
156
+	{
157
+		$classname = strtolower(get_class($this));
158
+		if ($this->_debug) {
159
+			print "PEAR constructor called, class=$classname\n";
160
+		}
161
+		if ($error_class !== null) {
162
+			$this->_error_class = $error_class;
163
+		}
164
+		while ($classname && strcasecmp($classname, "pear")) {
165
+			$destructor = "_$classname";
166
+			if (method_exists($this, $destructor)) {
167
+				global $_PEAR_destructor_object_list;
168
+				$_PEAR_destructor_object_list[] = &$this;
169
+				if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) {
170
+					register_shutdown_function("_PEAR_call_destructors");
171
+					$GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true;
172
+				}
173
+				break;
174
+			} else {
175
+				$classname = get_parent_class($classname);
176
+			}
177
+		}
178
+	}
179
+
180
+	// }}}
181
+	// {{{ destructor
182
+
183
+	/**
184
+	 * Destructor (the emulated type of...).  Does nothing right now,
185
+	 * but is included for forward compatibility, so subclass
186
+	 * destructors should always call it.
187
+	 *
188
+	 * See the note in the class desciption about output from
189
+	 * destructors.
190
+	 *
191
+	 * @access public
192
+	 * @return void
193
+	 */
194
+	function _PEAR() {
195
+		if ($this->_debug) {
196
+			printf("PEAR destructor called, class=%s\n", strtolower(get_class($this)));
197
+		}
198
+	}
199
+
200
+	// }}}
201
+	// {{{ getStaticProperty()
202
+
203
+	/**
204
+	 * If you have a class that's mostly/entirely static, and you need static
205
+	 * properties, you can use this method to simulate them. Eg. in your method(s)
206
+	 * do this: $myVar = &PEAR::getStaticProperty('myclass', 'myVar');
207
+	 * You MUST use a reference, or they will not persist!
208
+	 *
209
+	 * @access public
210
+	 * @param  string $class  The calling classname, to prevent clashes
211
+	 * @param  string $var    The variable to retrieve.
212
+	 * @return mixed   A reference to the variable. If not set it will be
213
+	 *                 auto initialised to NULL.
214
+	 */
215
+	function &getStaticProperty($class, $var)
216
+	{
217
+		static $properties;
218
+		if (!isset($properties[$class])) {
219
+			$properties[$class] = array();
220
+		}
221
+
222
+		if (!array_key_exists($var, $properties[$class])) {
223
+			$properties[$class][$var] = null;
224
+		}
225
+
226
+		return $properties[$class][$var];
227
+	}
228
+
229
+	// }}}
230
+	// {{{ registerShutdownFunc()
231
+
232
+	/**
233
+	 * Use this function to register a shutdown method for static
234
+	 * classes.
235
+	 *
236
+	 * @access public
237
+	 * @param  mixed $func  The function name (or array of class/method) to call
238
+	 * @param  mixed $args  The arguments to pass to the function
239
+	 * @return void
240
+	 */
241
+	function registerShutdownFunc($func, $args = array())
242
+	{
243
+		// if we are called statically, there is a potential
244
+		// that no shutdown func is registered.  Bug #6445
245
+		if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) {
246
+			register_shutdown_function("_PEAR_call_destructors");
247
+			$GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true;
248
+		}
249
+		$GLOBALS['_PEAR_shutdown_funcs'][] = array($func, $args);
250
+	}
251
+
252
+	// }}}
253
+	// {{{ isError()
254
+
255
+	/**
256
+	 * Tell whether a value is a PEAR error.
257
+	 *
258
+	 * @param   mixed $data   the value to test
259
+	 * @param   int   $code   if $data is an error object, return true
260
+	 *                        only if $code is a string and
261
+	 *                        $obj->getMessage() == $code or
262
+	 *                        $code is an integer and $obj->getCode() == $code
263
+	 * @access  public
264
+	 * @return  bool    true if parameter is an error
265
+	 */
266
+	function isError($data, $code = null)
267
+	{
268
+		if (!is_a($data, 'PEAR_Error')) {
269
+			return false;
270
+		}
271
+
272
+		if (is_null($code)) {
273
+			return true;
274
+		} elseif (is_string($code)) {
275
+			return $data->getMessage() == $code;
276
+		}
277
+
278
+		return $data->getCode() == $code;
279
+	}
280
+
281
+	// }}}
282
+	// {{{ setErrorHandling()
283
+
284
+	/**
285
+	 * Sets how errors generated by this object should be handled.
286
+	 * Can be invoked both in objects and statically.  If called
287
+	 * statically, setErrorHandling sets the default behaviour for all
288
+	 * PEAR objects.  If called in an object, setErrorHandling sets
289
+	 * the default behaviour for that object.
290
+	 *
291
+	 * @param int $mode
292
+	 *        One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT,
293
+	 *        PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE,
294
+	 *        PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION.
295
+	 *
296
+	 * @param mixed $options
297
+	 *        When $mode is PEAR_ERROR_TRIGGER, this is the error level (one
298
+	 *        of E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR).
299
+	 *
300
+	 *        When $mode is PEAR_ERROR_CALLBACK, this parameter is expected
301
+	 *        to be the callback function or method.  A callback
302
+	 *        function is a string with the name of the function, a
303
+	 *        callback method is an array of two elements: the element
304
+	 *        at index 0 is the object, and the element at index 1 is
305
+	 *        the name of the method to call in the object.
306
+	 *
307
+	 *        When $mode is PEAR_ERROR_PRINT or PEAR_ERROR_DIE, this is
308
+	 *        a printf format string used when printing the error
309
+	 *        message.
310
+	 *
311
+	 * @access public
312
+	 * @return void
313
+	 * @see PEAR_ERROR_RETURN
314
+	 * @see PEAR_ERROR_PRINT
315
+	 * @see PEAR_ERROR_TRIGGER
316
+	 * @see PEAR_ERROR_DIE
317
+	 * @see PEAR_ERROR_CALLBACK
318
+	 * @see PEAR_ERROR_EXCEPTION
319
+	 *
320
+	 * @since PHP 4.0.5
321
+	 */
322
+
323
+	function setErrorHandling($mode = null, $options = null)
324
+	{
325
+		if (isset($this) && is_a($this, 'PEAR')) {
326
+			$setmode     = &$this->_default_error_mode;
327
+			$setoptions  = &$this->_default_error_options;
328
+		} else {
329
+			$setmode     = &$GLOBALS['_PEAR_default_error_mode'];
330
+			$setoptions  = &$GLOBALS['_PEAR_default_error_options'];
331
+		}
332
+
333
+		switch ($mode) {
334
+			case PEAR_ERROR_EXCEPTION:
335
+			case PEAR_ERROR_RETURN:
336
+			case PEAR_ERROR_PRINT:
337
+			case PEAR_ERROR_TRIGGER:
338
+			case PEAR_ERROR_DIE:
339
+			case null:
340
+				$setmode = $mode;
341
+				$setoptions = $options;
342
+				break;
343
+
344
+			case PEAR_ERROR_CALLBACK:
345
+				$setmode = $mode;
346
+				// class/object method callback
347
+				if (is_callable($options)) {
348
+					$setoptions = $options;
349
+				} else {
350
+					trigger_error("invalid error callback", E_USER_WARNING);
351
+				}
352
+				break;
353
+
354
+			default:
355
+				trigger_error("invalid error mode", E_USER_WARNING);
356
+				break;
357
+		}
358
+	}
359
+
360
+	// }}}
361
+	// {{{ expectError()
362
+
363
+	/**
364
+	 * This method is used to tell which errors you expect to get.
365
+	 * Expected errors are always returned with error mode
366
+	 * PEAR_ERROR_RETURN.  Expected error codes are stored in a stack,
367
+	 * and this method pushes a new element onto it.  The list of
368
+	 * expected errors are in effect until they are popped off the
369
+	 * stack with the popExpect() method.
370
+	 *
371
+	 * Note that this method can not be called statically
372
+	 *
373
+	 * @param mixed $code a single error code or an array of error codes to expect
374
+	 *
375
+	 * @return int     the new depth of the "expected errors" stack
376
+	 * @access public
377
+	 */
378
+	function expectError($code = '*')
379
+	{
380
+		if (is_array($code)) {
381
+			array_push($this->_expected_errors, $code);
382
+		} else {
383
+			array_push($this->_expected_errors, array($code));
384
+		}
385
+		return sizeof($this->_expected_errors);
386
+	}
387
+
388
+	// }}}
389
+	// {{{ popExpect()
390
+
391
+	/**
392
+	 * This method pops one element off the expected error codes
393
+	 * stack.
394
+	 *
395
+	 * @return array   the list of error codes that were popped
396
+	 */
397
+	function popExpect()
398
+	{
399
+		return array_pop($this->_expected_errors);
400
+	}
401
+
402
+	// }}}
403
+	// {{{ _checkDelExpect()
404
+
405
+	/**
406
+	 * This method checks unsets an error code if available
407
+	 *
408
+	 * @param mixed error code
409
+	 * @return bool true if the error code was unset, false otherwise
410
+	 * @access private
411
+	 * @since PHP 4.3.0
412
+	 */
413
+	function _checkDelExpect($error_code)
414
+	{
415
+		$deleted = false;
416
+
417
+		foreach ($this->_expected_errors AS $key => $error_array) {
418
+			if (in_array($error_code, $error_array)) {
419
+				unset($this->_expected_errors[$key][array_search($error_code, $error_array)]);
420
+				$deleted = true;
421
+			}
422
+
423
+			// clean up empty arrays
424
+			if (0 == count($this->_expected_errors[$key])) {
425
+				unset($this->_expected_errors[$key]);
426
+			}
427
+		}
428
+		return $deleted;
429
+	}
430
+
431
+	// }}}
432
+	// {{{ delExpect()
433
+
434
+	/**
435
+	 * This method deletes all occurences of the specified element from
436
+	 * the expected error codes stack.
437
+	 *
438
+	 * @param  mixed $error_code error code that should be deleted
439
+	 * @return mixed list of error codes that were deleted or error
440
+	 * @access public
441
+	 * @since PHP 4.3.0
442
+	 */
443
+	function delExpect($error_code)
444
+	{
445
+		$deleted = false;
446
+		if ((is_array($error_code) && (0 != count($error_code)))) {
447
+			// $error_code is a non-empty array here;
448
+			// we walk through it trying to unset all
449
+			// values
450
+			foreach($error_code as $key => $error) {
451
+				if ($this->_checkDelExpect($error)) {
452
+					$deleted =  true;
453
+				} else {
454
+					$deleted = false;
455
+				}
456
+			}
457
+			return $deleted ? true : PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
458
+		} elseif (!empty($error_code)) {
459
+			// $error_code comes alone, trying to unset it
460
+			if ($this->_checkDelExpect($error_code)) {
461
+				return true;
462
+			} else {
463
+				return PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
464
+			}
465
+		}
466
+
467
+		// $error_code is empty
468
+		return PEAR::raiseError("The expected error you submitted is empty"); // IMPROVE ME
469
+	}
470
+
471
+	// }}}
472
+	// {{{ raiseError()
473
+
474
+	/**
475
+	 * This method is a wrapper that returns an instance of the
476
+	 * configured error class with this object's default error
477
+	 * handling applied.  If the $mode and $options parameters are not
478
+	 * specified, the object's defaults are used.
479
+	 *
480
+	 * @param mixed $message a text error message or a PEAR error object
481
+	 *
482
+	 * @param int $code      a numeric error code (it is up to your class
483
+	 *                  to define these if you want to use codes)
484
+	 *
485
+	 * @param int $mode      One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT,
486
+	 *                  PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE,
487
+	 *                  PEAR_ERROR_CALLBACK, PEAR_ERROR_EXCEPTION.
488
+	 *
489
+	 * @param mixed $options If $mode is PEAR_ERROR_TRIGGER, this parameter
490
+	 *                  specifies the PHP-internal error level (one of
491
+	 *                  E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR).
492
+	 *                  If $mode is PEAR_ERROR_CALLBACK, this
493
+	 *                  parameter specifies the callback function or
494
+	 *                  method.  In other error modes this parameter
495
+	 *                  is ignored.
496
+	 *
497
+	 * @param string $userinfo If you need to pass along for example debug
498
+	 *                  information, this parameter is meant for that.
499
+	 *
500
+	 * @param string $error_class The returned error object will be
501
+	 *                  instantiated from this class, if specified.
502
+	 *
503
+	 * @param bool $skipmsg If true, raiseError will only pass error codes,
504
+	 *                  the error message parameter will be dropped.
505
+	 *
506
+	 * @access public
507
+	 * @return object   a PEAR error object
508
+	 * @see PEAR::setErrorHandling
509
+	 * @since PHP 4.0.5
510
+	 */
511
+	function &raiseError($message = null,
512
+						 $code = null,
513
+						 $mode = null,
514
+						 $options = null,
515
+						 $userinfo = null,
516
+						 $error_class = null,
517
+						 $skipmsg = false)
518
+	{
519
+		// The error is yet a PEAR error object
520
+		if (is_object($message)) {
521
+			$code        = $message->getCode();
522
+			$userinfo    = $message->getUserInfo();
523
+			$error_class = $message->getType();
524
+			$message->error_message_prefix = '';
525
+			$message     = $message->getMessage();
526
+		}
527
+
528
+		if (isset($this) && isset($this->_expected_errors) && sizeof($this->_expected_errors) > 0 && sizeof($exp = end($this->_expected_errors))) {
529
+			if ($exp[0] == "*" ||
530
+				(is_int(reset($exp)) && in_array($code, $exp)) ||
531
+				(is_string(reset($exp)) && in_array($message, $exp))) {
532
+				$mode = PEAR_ERROR_RETURN;
533
+			}
534
+		}
535
+
536
+		// No mode given, try global ones
537
+		if ($mode === null) {
538
+			// Class error handler
539
+			if (isset($this) && isset($this->_default_error_mode)) {
540
+				$mode    = $this->_default_error_mode;
541
+				$options = $this->_default_error_options;
542
+			// Global error handler
543
+			} elseif (isset($GLOBALS['_PEAR_default_error_mode'])) {
544
+				$mode    = $GLOBALS['_PEAR_default_error_mode'];
545
+				$options = $GLOBALS['_PEAR_default_error_options'];
546
+			}
547
+		}
548
+
549
+		if ($error_class !== null) {
550
+			$ec = $error_class;
551
+		} elseif (isset($this) && isset($this->_error_class)) {
552
+			$ec = $this->_error_class;
553
+		} else {
554
+			$ec = 'PEAR_Error';
555
+		}
556
+
557
+		if (intval(PHP_VERSION) < 5) {
558
+			// little non-eval hack to fix bug #12147
559
+			include 'PEAR/FixPHP5PEARWarnings.php';
560
+			return $a;
561
+		}
562
+
563
+		if ($skipmsg) {
564
+			$a = new $ec($code, $mode, $options, $userinfo);
565
+		} else {
566
+			$a = new $ec($message, $code, $mode, $options, $userinfo);
567
+		}
568
+
569
+		return $a;
570
+	}
571
+
572
+	// }}}
573
+	// {{{ throwError()
574
+
575
+	/**
576
+	 * Simpler form of raiseError with fewer options.  In most cases
577
+	 * message, code and userinfo are enough.
578
+	 *
579
+	 * @param string $message
580
+	 *
581
+	 */
582
+	function &throwError($message = null,
583
+						 $code = null,
584
+						 $userinfo = null)
585
+	{
586
+		if (isset($this) && is_a($this, 'PEAR')) {
587
+			$a = &$this->raiseError($message, $code, null, null, $userinfo);
588
+			return $a;
589
+		}
590
+
591
+		$a = &PEAR::raiseError($message, $code, null, null, $userinfo);
592
+		return $a;
593
+	}
594
+
595
+	// }}}
596
+	function staticPushErrorHandling($mode, $options = null)
597
+	{
598
+		$stack = &$GLOBALS['_PEAR_error_handler_stack'];
599
+		$def_mode    = &$GLOBALS['_PEAR_default_error_mode'];
600
+		$def_options = &$GLOBALS['_PEAR_default_error_options'];
601
+		$stack[] = array($def_mode, $def_options);
602
+		switch ($mode) {
603
+			case PEAR_ERROR_EXCEPTION:
604
+			case PEAR_ERROR_RETURN:
605
+			case PEAR_ERROR_PRINT:
606
+			case PEAR_ERROR_TRIGGER:
607
+			case PEAR_ERROR_DIE:
608
+			case null:
609
+				$def_mode = $mode;
610
+				$def_options = $options;
611
+				break;
612
+
613
+			case PEAR_ERROR_CALLBACK:
614
+				$def_mode = $mode;
615
+				// class/object method callback
616
+				if (is_callable($options)) {
617
+					$def_options = $options;
618
+				} else {
619
+					trigger_error("invalid error callback", E_USER_WARNING);
620
+				}
621
+				break;
622
+
623
+			default:
624
+				trigger_error("invalid error mode", E_USER_WARNING);
625
+				break;
626
+		}
627
+		$stack[] = array($mode, $options);
628
+		return true;
629
+	}
630
+
631
+	function staticPopErrorHandling()
632
+	{
633
+		$stack = &$GLOBALS['_PEAR_error_handler_stack'];
634
+		$setmode     = &$GLOBALS['_PEAR_default_error_mode'];
635
+		$setoptions  = &$GLOBALS['_PEAR_default_error_options'];
636
+		array_pop($stack);
637
+		list($mode, $options) = $stack[sizeof($stack) - 1];
638
+		array_pop($stack);
639
+		switch ($mode) {
640
+			case PEAR_ERROR_EXCEPTION:
641
+			case PEAR_ERROR_RETURN:
642
+			case PEAR_ERROR_PRINT:
643
+			case PEAR_ERROR_TRIGGER:
644
+			case PEAR_ERROR_DIE:
645
+			case null:
646
+				$setmode = $mode;
647
+				$setoptions = $options;
648
+				break;
649
+
650
+			case PEAR_ERROR_CALLBACK:
651
+				$setmode = $mode;
652
+				// class/object method callback
653
+				if (is_callable($options)) {
654
+					$setoptions = $options;
655
+				} else {
656
+					trigger_error("invalid error callback", E_USER_WARNING);
657
+				}
658
+				break;
659
+
660
+			default:
661
+				trigger_error("invalid error mode", E_USER_WARNING);
662
+				break;
663
+		}
664
+		return true;
665
+	}
666
+
667
+	// {{{ pushErrorHandling()
668
+
669
+	/**
670
+	 * Push a new error handler on top of the error handler options stack. With this
671
+	 * you can easily override the actual error handler for some code and restore
672
+	 * it later with popErrorHandling.
673
+	 *
674
+	 * @param mixed $mode (same as setErrorHandling)
675
+	 * @param mixed $options (same as setErrorHandling)
676
+	 *
677
+	 * @return bool Always true
678
+	 *
679
+	 * @see PEAR::setErrorHandling
680
+	 */
681
+	function pushErrorHandling($mode, $options = null)
682
+	{
683
+		$stack = &$GLOBALS['_PEAR_error_handler_stack'];
684
+		if (isset($this) && is_a($this, 'PEAR')) {
685
+			$def_mode    = &$this->_default_error_mode;
686
+			$def_options = &$this->_default_error_options;
687
+		} else {
688
+			$def_mode    = &$GLOBALS['_PEAR_default_error_mode'];
689
+			$def_options = &$GLOBALS['_PEAR_default_error_options'];
690
+		}
691
+		$stack[] = array($def_mode, $def_options);
692
+
693
+		if (isset($this) && is_a($this, 'PEAR')) {
694
+			$this->setErrorHandling($mode, $options);
695
+		} else {
696
+			PEAR::setErrorHandling($mode, $options);
697
+		}
698
+		$stack[] = array($mode, $options);
699
+		return true;
700
+	}
701
+
702
+	// }}}
703
+	// {{{ popErrorHandling()
704
+
705
+	/**
706
+	 * Pop the last error handler used
707
+	 *
708
+	 * @return bool Always true
709
+	 *
710
+	 * @see PEAR::pushErrorHandling
711
+	 */
712
+	function popErrorHandling()
713
+	{
714
+		$stack = &$GLOBALS['_PEAR_error_handler_stack'];
715
+		array_pop($stack);
716
+		list($mode, $options) = $stack[sizeof($stack) - 1];
717
+		array_pop($stack);
718
+		if (isset($this) && is_a($this, 'PEAR')) {
719
+			$this->setErrorHandling($mode, $options);
720
+		} else {
721
+			PEAR::setErrorHandling($mode, $options);
722
+		}
723
+		return true;
724
+	}
725
+
726
+	// }}}
727
+	// {{{ loadExtension()
728
+
729
+	/**
730
+	 * OS independant PHP extension load. Remember to take care
731
+	 * on the correct extension name for case sensitive OSes.
732
+	 *
733
+	 * @param string $ext The extension name
734
+	 * @return bool Success or not on the dl() call
735
+	 */
736
+	function loadExtension($ext)
737
+	{
738
+		if (!extension_loaded($ext)) {
739
+			// if either returns true dl() will produce a FATAL error, stop that
740
+			if ((ini_get('enable_dl') != 1) || (ini_get('safe_mode') == 1)) {
741
+				return false;
742
+			}
743
+
744
+			if (OS_WINDOWS) {
745
+				$suffix = '.dll';
746
+			} elseif (PHP_OS == 'HP-UX') {
747
+				$suffix = '.sl';
748
+			} elseif (PHP_OS == 'AIX') {
749
+				$suffix = '.a';
750
+			} elseif (PHP_OS == 'OSX') {
751
+				$suffix = '.bundle';
752
+			} else {
753
+				$suffix = '.so';
754
+			}
755
+
756
+			return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix);
757
+		}
758
+
759
+		return true;
760
+	}
761
+
762
+	// }}}
763 763
 }
764 764
 
765 765
 if (PEAR_ZE2) {
766
-    include_once 'PEAR5.php';
766
+	include_once 'PEAR5.php';
767 767
 }
768 768
 
769 769
 // {{{ _PEAR_call_destructors()
770 770
 
771 771
 function _PEAR_call_destructors()
772 772
 {
773
-    global $_PEAR_destructor_object_list;
774
-    if (is_array($_PEAR_destructor_object_list) &&
775
-        sizeof($_PEAR_destructor_object_list))
776
-    {
777
-        reset($_PEAR_destructor_object_list);
778
-        if (PEAR_ZE2) {
779
-            $destructLifoExists = PEAR5::getStaticProperty('PEAR', 'destructlifo');
780
-        } else {
781
-            $destructLifoExists = PEAR::getStaticProperty('PEAR', 'destructlifo');
782
-        }
783
-
784
-        if ($destructLifoExists) {
785
-            $_PEAR_destructor_object_list = array_reverse($_PEAR_destructor_object_list);
786
-        }
787
-
788
-        while (list($k, $objref) = each($_PEAR_destructor_object_list)) {
789
-            $classname = get_class($objref);
790
-            while ($classname) {
791
-                $destructor = "_$classname";
792
-                if (method_exists($objref, $destructor)) {
793
-                    $objref->$destructor();
794
-                    break;
795
-                } else {
796
-                    $classname = get_parent_class($classname);
797
-                }
798
-            }
799
-        }
800
-        // Empty the object list to ensure that destructors are
801
-        // not called more than once.
802
-        $_PEAR_destructor_object_list = array();
803
-    }
804
-
805
-    // Now call the shutdown functions
806
-    if (isset($GLOBALS['_PEAR_shutdown_funcs']) AND is_array($GLOBALS['_PEAR_shutdown_funcs']) AND !empty($GLOBALS['_PEAR_shutdown_funcs'])) {
807
-        foreach ($GLOBALS['_PEAR_shutdown_funcs'] as $value) {
808
-            call_user_func_array($value[0], $value[1]);
809
-        }
810
-    }
773
+	global $_PEAR_destructor_object_list;
774
+	if (is_array($_PEAR_destructor_object_list) &&
775
+		sizeof($_PEAR_destructor_object_list))
776
+	{
777
+		reset($_PEAR_destructor_object_list);
778
+		if (PEAR_ZE2) {
779
+			$destructLifoExists = PEAR5::getStaticProperty('PEAR', 'destructlifo');
780
+		} else {
781
+			$destructLifoExists = PEAR::getStaticProperty('PEAR', 'destructlifo');
782
+		}
783
+
784
+		if ($destructLifoExists) {
785
+			$_PEAR_destructor_object_list = array_reverse($_PEAR_destructor_object_list);
786
+		}
787
+
788
+		while (list($k, $objref) = each($_PEAR_destructor_object_list)) {
789
+			$classname = get_class($objref);
790
+			while ($classname) {
791
+				$destructor = "_$classname";
792
+				if (method_exists($objref, $destructor)) {
793
+					$objref->$destructor();
794
+					break;
795
+				} else {
796
+					$classname = get_parent_class($classname);
797
+				}
798
+			}
799
+		}
800
+		// Empty the object list to ensure that destructors are
801
+		// not called more than once.
802
+		$_PEAR_destructor_object_list = array();
803
+	}
804
+
805
+	// Now call the shutdown functions
806
+	if (isset($GLOBALS['_PEAR_shutdown_funcs']) AND is_array($GLOBALS['_PEAR_shutdown_funcs']) AND !empty($GLOBALS['_PEAR_shutdown_funcs'])) {
807
+		foreach ($GLOBALS['_PEAR_shutdown_funcs'] as $value) {
808
+			call_user_func_array($value[0], $value[1]);
809
+		}
810
+	}
811 811
 }
812 812
 
813 813
 // }}}
@@ -830,302 +830,302 @@  discard block
 block discarded – undo
830 830
  */
831 831
 class PEAR_Error
832 832
 {
833
-    // {{{ properties
834
-
835
-    var $error_message_prefix = '';
836
-    var $mode                 = PEAR_ERROR_RETURN;
837
-    var $level                = E_USER_NOTICE;
838
-    var $code                 = -1;
839
-    var $message              = '';
840
-    var $userinfo             = '';
841
-    var $backtrace            = null;
842
-
843
-    // }}}
844
-    // {{{ constructor
845
-
846
-    /**
847
-     * PEAR_Error constructor
848
-     *
849
-     * @param string $message  message
850
-     *
851
-     * @param int $code     (optional) error code
852
-     *
853
-     * @param int $mode     (optional) error mode, one of: PEAR_ERROR_RETURN,
854
-     * PEAR_ERROR_PRINT, PEAR_ERROR_DIE, PEAR_ERROR_TRIGGER,
855
-     * PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION
856
-     *
857
-     * @param mixed $options   (optional) error level, _OR_ in the case of
858
-     * PEAR_ERROR_CALLBACK, the callback function or object/method
859
-     * tuple.
860
-     *
861
-     * @param string $userinfo (optional) additional user/debug info
862
-     *
863
-     * @access public
864
-     *
865
-     */
866
-    function PEAR_Error($message = 'unknown error', $code = null,
867
-                        $mode = null, $options = null, $userinfo = null)
868
-    {
869
-        if ($mode === null) {
870
-            $mode = PEAR_ERROR_RETURN;
871
-        }
872
-        $this->message   = $message;
873
-        $this->code      = $code;
874
-        $this->mode      = $mode;
875
-        $this->userinfo  = $userinfo;
876
-
877
-        if (PEAR_ZE2) {
878
-            $skiptrace = PEAR5::getStaticProperty('PEAR_Error', 'skiptrace');
879
-        } else {
880
-            $skiptrace = PEAR::getStaticProperty('PEAR_Error', 'skiptrace');
881
-        }
882
-
883
-        if (!$skiptrace) {
884
-            $this->backtrace = debug_backtrace();
885
-            if (isset($this->backtrace[0]) && isset($this->backtrace[0]['object'])) {
886
-                unset($this->backtrace[0]['object']);
887
-            }
888
-        }
889
-
890
-        if ($mode & PEAR_ERROR_CALLBACK) {
891
-            $this->level = E_USER_NOTICE;
892
-            $this->callback = $options;
893
-        } else {
894
-            if ($options === null) {
895
-                $options = E_USER_NOTICE;
896
-            }
897
-
898
-            $this->level = $options;
899
-            $this->callback = null;
900
-        }
901
-
902
-        if ($this->mode & PEAR_ERROR_PRINT) {
903
-            if (is_null($options) || is_int($options)) {
904
-                $format = "%s";
905
-            } else {
906
-                $format = $options;
907
-            }
908
-
909
-            printf($format, $this->getMessage());
910
-        }
911
-
912
-        if ($this->mode & PEAR_ERROR_TRIGGER) {
913
-            trigger_error($this->getMessage(), $this->level);
914
-        }
915
-
916
-        if ($this->mode & PEAR_ERROR_DIE) {
917
-            $msg = $this->getMessage();
918
-            if (is_null($options) || is_int($options)) {
919
-                $format = "%s";
920
-                if (substr($msg, -1) != "\n") {
921
-                    $msg .= "\n";
922
-                }
923
-            } else {
924
-                $format = $options;
925
-            }
926
-            die(sprintf($format, $msg));
927
-        }
928
-
929
-        if ($this->mode & PEAR_ERROR_CALLBACK) {
930
-            if (is_callable($this->callback)) {
931
-                call_user_func($this->callback, $this);
932
-            }
933
-        }
934
-
935
-        if ($this->mode & PEAR_ERROR_EXCEPTION) {
936
-            trigger_error("PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_Exception for exceptions", E_USER_WARNING);
937
-            eval('$e = new Exception($this->message, $this->code);throw($e);');
938
-        }
939
-    }
940
-
941
-    // }}}
942
-    // {{{ getMode()
943
-
944
-    /**
945
-     * Get the error mode from an error object.
946
-     *
947
-     * @return int error mode
948
-     * @access public
949
-     */
950
-    function getMode() {
951
-        return $this->mode;
952
-    }
953
-
954
-    // }}}
955
-    // {{{ getCallback()
956
-
957
-    /**
958
-     * Get the callback function/method from an error object.
959
-     *
960
-     * @return mixed callback function or object/method array
961
-     * @access public
962
-     */
963
-    function getCallback() {
964
-        return $this->callback;
965
-    }
966
-
967
-    // }}}
968
-    // {{{ getMessage()
969
-
970
-
971
-    /**
972
-     * Get the error message from an error object.
973
-     *
974
-     * @return  string  full error message
975
-     * @access public
976
-     */
977
-    function getMessage()
978
-    {
979
-        return ($this->error_message_prefix . $this->message);
980
-    }
981
-
982
-
983
-    // }}}
984
-    // {{{ getCode()
985
-
986
-    /**
987
-     * Get error code from an error object
988
-     *
989
-     * @return int error code
990
-     * @access public
991
-     */
992
-     function getCode()
993
-     {
994
-        return $this->code;
995
-     }
996
-
997
-    // }}}
998
-    // {{{ getType()
999
-
1000
-    /**
1001
-     * Get the name of this error/exception.
1002
-     *
1003
-     * @return string error/exception name (type)
1004
-     * @access public
1005
-     */
1006
-    function getType()
1007
-    {
1008
-        return get_class($this);
1009
-    }
1010
-
1011
-    // }}}
1012
-    // {{{ getUserInfo()
1013
-
1014
-    /**
1015
-     * Get additional user-supplied information.
1016
-     *
1017
-     * @return string user-supplied information
1018
-     * @access public
1019
-     */
1020
-    function getUserInfo()
1021
-    {
1022
-        return $this->userinfo;
1023
-    }
1024
-
1025
-    // }}}
1026
-    // {{{ getDebugInfo()
1027
-
1028
-    /**
1029
-     * Get additional debug information supplied by the application.
1030
-     *
1031
-     * @return string debug information
1032
-     * @access public
1033
-     */
1034
-    function getDebugInfo()
1035
-    {
1036
-        return $this->getUserInfo();
1037
-    }
1038
-
1039
-    // }}}
1040
-    // {{{ getBacktrace()
1041
-
1042
-    /**
1043
-     * Get the call backtrace from where the error was generated.
1044
-     * Supported with PHP 4.3.0 or newer.
1045
-     *
1046
-     * @param int $frame (optional) what frame to fetch
1047
-     * @return array Backtrace, or NULL if not available.
1048
-     * @access public
1049
-     */
1050
-    function getBacktrace($frame = null)
1051
-    {
1052
-        if (defined('PEAR_IGNORE_BACKTRACE')) {
1053
-            return null;
1054
-        }
1055
-        if ($frame === null) {
1056
-            return $this->backtrace;
1057
-        }
1058
-        return $this->backtrace[$frame];
1059
-    }
1060
-
1061
-    // }}}
1062
-    // {{{ addUserInfo()
1063
-
1064
-    function addUserInfo($info)
1065
-    {
1066
-        if (empty($this->userinfo)) {
1067
-            $this->userinfo = $info;
1068
-        } else {
1069
-            $this->userinfo .= " ** $info";
1070
-        }
1071
-    }
1072
-
1073
-    // }}}
1074
-    // {{{ toString()
1075
-    function __toString()
1076
-    {
1077
-        return $this->getMessage();
1078
-    }
1079
-    // }}}
1080
-    // {{{ toString()
1081
-
1082
-    /**
1083
-     * Make a string representation of this object.
1084
-     *
1085
-     * @return string a string with an object summary
1086
-     * @access public
1087
-     */
1088
-    function toString() {
1089
-        $modes = array();
1090
-        $levels = array(E_USER_NOTICE  => 'notice',
1091
-                        E_USER_WARNING => 'warning',
1092
-                        E_USER_ERROR   => 'error');
1093
-        if ($this->mode & PEAR_ERROR_CALLBACK) {
1094
-            if (is_array($this->callback)) {
1095
-                $callback = (is_object($this->callback[0]) ?
1096
-                    strtolower(get_class($this->callback[0])) :
1097
-                    $this->callback[0]) . '::' .
1098
-                    $this->callback[1];
1099
-            } else {
1100
-                $callback = $this->callback;
1101
-            }
1102
-            return sprintf('[%s: message="%s" code=%d mode=callback '.
1103
-                           'callback=%s prefix="%s" info="%s"]',
1104
-                           strtolower(get_class($this)), $this->message, $this->code,
1105
-                           $callback, $this->error_message_prefix,
1106
-                           $this->userinfo);
1107
-        }
1108
-        if ($this->mode & PEAR_ERROR_PRINT) {
1109
-            $modes[] = 'print';
1110
-        }
1111
-        if ($this->mode & PEAR_ERROR_TRIGGER) {
1112
-            $modes[] = 'trigger';
1113
-        }
1114
-        if ($this->mode & PEAR_ERROR_DIE) {
1115
-            $modes[] = 'die';
1116
-        }
1117
-        if ($this->mode & PEAR_ERROR_RETURN) {
1118
-            $modes[] = 'return';
1119
-        }
1120
-        return sprintf('[%s: message="%s" code=%d mode=%s level=%s '.
1121
-                       'prefix="%s" info="%s"]',
1122
-                       strtolower(get_class($this)), $this->message, $this->code,
1123
-                       implode("|", $modes), $levels[$this->level],
1124
-                       $this->error_message_prefix,
1125
-                       $this->userinfo);
1126
-    }
1127
-
1128
-    // }}}
833
+	// {{{ properties
834
+
835
+	var $error_message_prefix = '';
836
+	var $mode                 = PEAR_ERROR_RETURN;
837
+	var $level                = E_USER_NOTICE;
838
+	var $code                 = -1;
839
+	var $message              = '';
840
+	var $userinfo             = '';
841
+	var $backtrace            = null;
842
+
843
+	// }}}
844
+	// {{{ constructor
845
+
846
+	/**
847
+	 * PEAR_Error constructor
848
+	 *
849
+	 * @param string $message  message
850
+	 *
851
+	 * @param int $code     (optional) error code
852
+	 *
853
+	 * @param int $mode     (optional) error mode, one of: PEAR_ERROR_RETURN,
854
+	 * PEAR_ERROR_PRINT, PEAR_ERROR_DIE, PEAR_ERROR_TRIGGER,
855
+	 * PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION
856
+	 *
857
+	 * @param mixed $options   (optional) error level, _OR_ in the case of
858
+	 * PEAR_ERROR_CALLBACK, the callback function or object/method
859
+	 * tuple.
860
+	 *
861
+	 * @param string $userinfo (optional) additional user/debug info
862
+	 *
863
+	 * @access public
864
+	 *
865
+	 */
866
+	function PEAR_Error($message = 'unknown error', $code = null,
867
+						$mode = null, $options = null, $userinfo = null)
868
+	{
869
+		if ($mode === null) {
870
+			$mode = PEAR_ERROR_RETURN;
871
+		}
872
+		$this->message   = $message;
873
+		$this->code      = $code;
874
+		$this->mode      = $mode;
875
+		$this->userinfo  = $userinfo;
876
+
877
+		if (PEAR_ZE2) {
878
+			$skiptrace = PEAR5::getStaticProperty('PEAR_Error', 'skiptrace');
879
+		} else {
880
+			$skiptrace = PEAR::getStaticProperty('PEAR_Error', 'skiptrace');
881
+		}
882
+
883
+		if (!$skiptrace) {
884
+			$this->backtrace = debug_backtrace();
885
+			if (isset($this->backtrace[0]) && isset($this->backtrace[0]['object'])) {
886
+				unset($this->backtrace[0]['object']);
887
+			}
888
+		}
889
+
890
+		if ($mode & PEAR_ERROR_CALLBACK) {
891
+			$this->level = E_USER_NOTICE;
892
+			$this->callback = $options;
893
+		} else {
894
+			if ($options === null) {
895
+				$options = E_USER_NOTICE;
896
+			}
897
+
898
+			$this->level = $options;
899
+			$this->callback = null;
900
+		}
901
+
902
+		if ($this->mode & PEAR_ERROR_PRINT) {
903
+			if (is_null($options) || is_int($options)) {
904
+				$format = "%s";
905
+			} else {
906
+				$format = $options;
907
+			}
908
+
909
+			printf($format, $this->getMessage());
910
+		}
911
+
912
+		if ($this->mode & PEAR_ERROR_TRIGGER) {
913
+			trigger_error($this->getMessage(), $this->level);
914
+		}
915
+
916
+		if ($this->mode & PEAR_ERROR_DIE) {
917
+			$msg = $this->getMessage();
918
+			if (is_null($options) || is_int($options)) {
919
+				$format = "%s";
920
+				if (substr($msg, -1) != "\n") {
921
+					$msg .= "\n";
922
+				}
923
+			} else {
924
+				$format = $options;
925
+			}
926
+			die(sprintf($format, $msg));
927
+		}
928
+
929
+		if ($this->mode & PEAR_ERROR_CALLBACK) {
930
+			if (is_callable($this->callback)) {
931
+				call_user_func($this->callback, $this);
932
+			}
933
+		}
934
+
935
+		if ($this->mode & PEAR_ERROR_EXCEPTION) {
936
+			trigger_error("PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_Exception for exceptions", E_USER_WARNING);
937
+			eval('$e = new Exception($this->message, $this->code);throw($e);');
938
+		}
939
+	}
940
+
941
+	// }}}
942
+	// {{{ getMode()
943
+
944
+	/**
945
+	 * Get the error mode from an error object.
946
+	 *
947
+	 * @return int error mode
948
+	 * @access public
949
+	 */
950
+	function getMode() {
951
+		return $this->mode;
952
+	}
953
+
954
+	// }}}
955
+	// {{{ getCallback()
956
+
957
+	/**
958
+	 * Get the callback function/method from an error object.
959
+	 *
960
+	 * @return mixed callback function or object/method array
961
+	 * @access public
962
+	 */
963
+	function getCallback() {
964
+		return $this->callback;
965
+	}
966
+
967
+	// }}}
968
+	// {{{ getMessage()
969
+
970
+
971
+	/**
972
+	 * Get the error message from an error object.
973
+	 *
974
+	 * @return  string  full error message
975
+	 * @access public
976
+	 */
977
+	function getMessage()
978
+	{
979
+		return ($this->error_message_prefix . $this->message);
980
+	}
981
+
982
+
983
+	// }}}
984
+	// {{{ getCode()
985
+
986
+	/**
987
+	 * Get error code from an error object
988
+	 *
989
+	 * @return int error code
990
+	 * @access public
991
+	 */
992
+	 function getCode()
993
+	 {
994
+		return $this->code;
995
+	 }
996
+
997
+	// }}}
998
+	// {{{ getType()
999
+
1000
+	/**
1001
+	 * Get the name of this error/exception.
1002
+	 *
1003
+	 * @return string error/exception name (type)
1004
+	 * @access public
1005
+	 */
1006
+	function getType()
1007
+	{
1008
+		return get_class($this);
1009
+	}
1010
+
1011
+	// }}}
1012
+	// {{{ getUserInfo()
1013
+
1014
+	/**
1015
+	 * Get additional user-supplied information.
1016
+	 *
1017
+	 * @return string user-supplied information
1018
+	 * @access public
1019
+	 */
1020
+	function getUserInfo()
1021
+	{
1022
+		return $this->userinfo;
1023
+	}
1024
+
1025
+	// }}}
1026
+	// {{{ getDebugInfo()
1027
+
1028
+	/**
1029
+	 * Get additional debug information supplied by the application.
1030
+	 *
1031
+	 * @return string debug information
1032
+	 * @access public
1033
+	 */
1034
+	function getDebugInfo()
1035
+	{
1036
+		return $this->getUserInfo();
1037
+	}
1038
+
1039
+	// }}}
1040
+	// {{{ getBacktrace()
1041
+
1042
+	/**
1043
+	 * Get the call backtrace from where the error was generated.
1044
+	 * Supported with PHP 4.3.0 or newer.
1045
+	 *
1046
+	 * @param int $frame (optional) what frame to fetch
1047
+	 * @return array Backtrace, or NULL if not available.
1048
+	 * @access public
1049
+	 */
1050
+	function getBacktrace($frame = null)
1051
+	{
1052
+		if (defined('PEAR_IGNORE_BACKTRACE')) {
1053
+			return null;
1054
+		}
1055
+		if ($frame === null) {
1056
+			return $this->backtrace;
1057
+		}
1058
+		return $this->backtrace[$frame];
1059
+	}
1060
+
1061
+	// }}}
1062
+	// {{{ addUserInfo()
1063
+
1064
+	function addUserInfo($info)
1065
+	{
1066
+		if (empty($this->userinfo)) {
1067
+			$this->userinfo = $info;
1068
+		} else {
1069
+			$this->userinfo .= " ** $info";
1070
+		}
1071
+	}
1072
+
1073
+	// }}}
1074
+	// {{{ toString()
1075
+	function __toString()
1076
+	{
1077
+		return $this->getMessage();
1078
+	}
1079
+	// }}}
1080
+	// {{{ toString()
1081
+
1082
+	/**
1083
+	 * Make a string representation of this object.
1084
+	 *
1085
+	 * @return string a string with an object summary
1086
+	 * @access public
1087
+	 */
1088
+	function toString() {
1089
+		$modes = array();
1090
+		$levels = array(E_USER_NOTICE  => 'notice',
1091
+						E_USER_WARNING => 'warning',
1092
+						E_USER_ERROR   => 'error');
1093
+		if ($this->mode & PEAR_ERROR_CALLBACK) {
1094
+			if (is_array($this->callback)) {
1095
+				$callback = (is_object($this->callback[0]) ?
1096
+					strtolower(get_class($this->callback[0])) :
1097
+					$this->callback[0]) . '::' .
1098
+					$this->callback[1];
1099
+			} else {
1100
+				$callback = $this->callback;
1101
+			}
1102
+			return sprintf('[%s: message="%s" code=%d mode=callback '.
1103
+						   'callback=%s prefix="%s" info="%s"]',
1104
+						   strtolower(get_class($this)), $this->message, $this->code,
1105
+						   $callback, $this->error_message_prefix,
1106
+						   $this->userinfo);
1107
+		}
1108
+		if ($this->mode & PEAR_ERROR_PRINT) {
1109
+			$modes[] = 'print';
1110
+		}
1111
+		if ($this->mode & PEAR_ERROR_TRIGGER) {
1112
+			$modes[] = 'trigger';
1113
+		}
1114
+		if ($this->mode & PEAR_ERROR_DIE) {
1115
+			$modes[] = 'die';
1116
+		}
1117
+		if ($this->mode & PEAR_ERROR_RETURN) {
1118
+			$modes[] = 'return';
1119
+		}
1120
+		return sprintf('[%s: message="%s" code=%d mode=%s level=%s '.
1121
+					   'prefix="%s" info="%s"]',
1122
+					   strtolower(get_class($this)), $this->message, $this->code,
1123
+					   implode("|", $modes), $levels[$this->level],
1124
+					   $this->error_message_prefix,
1125
+					   $this->userinfo);
1126
+	}
1127
+
1128
+	// }}}
1129 1129
 }
1130 1130
 
1131 1131
 /*
Please login to merge, or discard this patch.
Spacing   +15 added lines, -16 removed lines patch added patch discarded remove patch
@@ -28,11 +28,11 @@  discard block
 block discarded – undo
28 28
 /**#@+
29 29
  * ERROR constants
30 30
  */
31
-define('PEAR_ERROR_RETURN',     1);
32
-define('PEAR_ERROR_PRINT',      2);
33
-define('PEAR_ERROR_TRIGGER',    4);
34
-define('PEAR_ERROR_DIE',        8);
35
-define('PEAR_ERROR_CALLBACK',  16);
31
+define('PEAR_ERROR_RETURN', 1);
32
+define('PEAR_ERROR_PRINT', 2);
33
+define('PEAR_ERROR_TRIGGER', 4);
34
+define('PEAR_ERROR_DIE', 8);
35
+define('PEAR_ERROR_CALLBACK', 16);
36 36
 /**
37 37
  * WARNING: obsolete
38 38
  * @deprecated
@@ -44,12 +44,12 @@  discard block
 block discarded – undo
44 44
 
45 45
 if (substr(PHP_OS, 0, 3) == 'WIN') {
46 46
     define('OS_WINDOWS', true);
47
-    define('OS_UNIX',    false);
48
-    define('PEAR_OS',    'Windows');
47
+    define('OS_UNIX', false);
48
+    define('PEAR_OS', 'Windows');
49 49
 } else {
50 50
     define('OS_WINDOWS', false);
51
-    define('OS_UNIX',    true);
52
-    define('PEAR_OS',    'Unix'); // blatant assumption
51
+    define('OS_UNIX', true);
52
+    define('PEAR_OS', 'Unix'); // blatant assumption
53 53
 }
54 54
 
55 55
 // instant backwards compatibility
@@ -460,9 +460,9 @@  discard block
 block discarded – undo
460 460
             // $error_code is a non-empty array here;
461 461
             // we walk through it trying to unset all
462 462
             // values
463
-            foreach($error_code as $key => $error) {
463
+            foreach ($error_code as $key => $error) {
464 464
                 if ($this->_checkDelExpect($error)) {
465
-                    $deleted =  true;
465
+                    $deleted = true;
466 466
                 } else {
467 467
                     $deleted = false;
468 468
                 }
@@ -756,7 +756,7 @@  discard block
 block discarded – undo
756 756
             } else {
757 757
                 $suffix = '.so';
758 758
             }
759
-            return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix);
759
+            return @dl('php_' . $ext . $suffix) || @dl($ext . $suffix);
760 760
         }
761 761
         return true;
762 762
     }
@@ -1063,13 +1063,12 @@  discard block
 block discarded – undo
1063 1063
         if ($this->mode & PEAR_ERROR_CALLBACK) {
1064 1064
             if (is_array($this->callback)) {
1065 1065
                 $callback = (is_object($this->callback[0]) ?
1066
-                    strtolower(get_class($this->callback[0])) :
1067
-                    $this->callback[0]) . '::' .
1066
+                    strtolower(get_class($this->callback[0])) : $this->callback[0]) . '::' .
1068 1067
                     $this->callback[1];
1069 1068
             } else {
1070 1069
                 $callback = $this->callback;
1071 1070
             }
1072
-            return sprintf('[%s: message="%s" code=%d mode=callback '.
1071
+            return sprintf('[%s: message="%s" code=%d mode=callback ' .
1073 1072
                            'callback=%s prefix="%s" info="%s"]',
1074 1073
                            strtolower(get_class($this)), $this->message, $this->code,
1075 1074
                            $callback, $this->error_message_prefix,
@@ -1087,7 +1086,7 @@  discard block
 block discarded – undo
1087 1086
         if ($this->mode & PEAR_ERROR_RETURN) {
1088 1087
             $modes[] = 'return';
1089 1088
         }
1090
-        return sprintf('[%s: message="%s" code=%d mode=%s level=%s '.
1089
+        return sprintf('[%s: message="%s" code=%d mode=%s level=%s ' .
1091 1090
                        'prefix="%s" info="%s"]',
1092 1091
                        strtolower(get_class($this)), $this->message, $this->code,
1093 1092
                        implode("|", $modes), $levels[$this->level],
Please login to merge, or discard this patch.
libs/PEAR.1.9/PEAR5.php 1 patch
Indentation   +23 added lines, -23 removed lines patch added patch discarded remove patch
@@ -5,29 +5,29 @@
 block discarded – undo
5 5
  */
6 6
 class PEAR5
7 7
 {
8
-    /**
9
-    * If you have a class that's mostly/entirely static, and you need static
10
-    * properties, you can use this method to simulate them. Eg. in your method(s)
11
-    * do this: $myVar = &PEAR5::getStaticProperty('myclass', 'myVar');
12
-    * You MUST use a reference, or they will not persist!
13
-    *
14
-    * @access public
15
-    * @param  string $class  The calling classname, to prevent clashes
16
-    * @param  string $var    The variable to retrieve.
17
-    * @return mixed   A reference to the variable. If not set it will be
18
-    *                 auto initialised to NULL.
19
-    */
20
-    static function &getStaticProperty($class, $var)
21
-    {
22
-        static $properties;
23
-        if (!isset($properties[$class])) {
24
-            $properties[$class] = array();
25
-        }
8
+	/**
9
+	 * If you have a class that's mostly/entirely static, and you need static
10
+	 * properties, you can use this method to simulate them. Eg. in your method(s)
11
+	 * do this: $myVar = &PEAR5::getStaticProperty('myclass', 'myVar');
12
+	 * You MUST use a reference, or they will not persist!
13
+	 *
14
+	 * @access public
15
+	 * @param  string $class  The calling classname, to prevent clashes
16
+	 * @param  string $var    The variable to retrieve.
17
+	 * @return mixed   A reference to the variable. If not set it will be
18
+	 *                 auto initialised to NULL.
19
+	 */
20
+	static function &getStaticProperty($class, $var)
21
+	{
22
+		static $properties;
23
+		if (!isset($properties[$class])) {
24
+			$properties[$class] = array();
25
+		}
26 26
 
27
-        if (!array_key_exists($var, $properties[$class])) {
28
-            $properties[$class][$var] = null;
29
-        }
27
+		if (!array_key_exists($var, $properties[$class])) {
28
+			$properties[$class][$var] = null;
29
+		}
30 30
 
31
-        return $properties[$class][$var];
32
-    }
31
+		return $properties[$class][$var];
32
+	}
33 33
 }
34 34
\ No newline at end of file
Please login to merge, or discard this patch.
libs/PEAR/HTTP/Request/Listener.php 1 patch
Indentation   +59 added lines, -59 removed lines patch added patch discarded remove patch
@@ -1,47 +1,47 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 /**
3
- * Listener for HTTP_Request and HTTP_Response objects
4
- *
5
- * PHP versions 4 and 5
6
- * 
7
- * LICENSE:
8
- *
9
- * Copyright (c) 2002-2007, Richard Heyes
10
- * All rights reserved.
11
- *
12
- * Redistribution and use in source and binary forms, with or without
13
- * modification, are permitted provided that the following conditions
14
- * are met:
15
- *
16
- * o Redistributions of source code must retain the above copyright
17
- *   notice, this list of conditions and the following disclaimer.
18
- * o Redistributions in binary form must reproduce the above copyright
19
- *   notice, this list of conditions and the following disclaimer in the
20
- *   documentation and/or other materials provided with the distribution.
21
- * o The names of the authors may not be used to endorse or promote
22
- *   products derived from this software without specific prior written
23
- *   permission.
24
- *
25
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
- *
37
- * @category    HTTP
38
- * @package     HTTP_Request
39
- * @author      Alexey Borzov <[email protected]>
40
- * @copyright   2002-2007 Richard Heyes
41
- * @license     http://opensource.org/licenses/bsd-license.php New BSD License
42
- * @version     CVS: $Id: Listener.php,v 1.3 2007/05/18 10:33:31 avb Exp $
43
- * @link        http://pear.php.net/package/HTTP_Request/ 
44
- */
3
+	 * Listener for HTTP_Request and HTTP_Response objects
4
+	 *
5
+	 * PHP versions 4 and 5
6
+	 * 
7
+	 * LICENSE:
8
+	 *
9
+	 * Copyright (c) 2002-2007, Richard Heyes
10
+	 * All rights reserved.
11
+	 *
12
+	 * Redistribution and use in source and binary forms, with or without
13
+	 * modification, are permitted provided that the following conditions
14
+	 * are met:
15
+	 *
16
+	 * o Redistributions of source code must retain the above copyright
17
+	 *   notice, this list of conditions and the following disclaimer.
18
+	 * o Redistributions in binary form must reproduce the above copyright
19
+	 *   notice, this list of conditions and the following disclaimer in the
20
+	 *   documentation and/or other materials provided with the distribution.
21
+	 * o The names of the authors may not be used to endorse or promote
22
+	 *   products derived from this software without specific prior written
23
+	 *   permission.
24
+	 *
25
+	 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+	 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+	 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28
+	 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29
+	 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30
+	 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31
+	 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32
+	 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33
+	 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34
+	 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35
+	 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
+	 *
37
+	 * @category    HTTP
38
+	 * @package     HTTP_Request
39
+	 * @author      Alexey Borzov <[email protected]>
40
+	 * @copyright   2002-2007 Richard Heyes
41
+	 * @license     http://opensource.org/licenses/bsd-license.php New BSD License
42
+	 * @version     CVS: $Id: Listener.php,v 1.3 2007/05/18 10:33:31 avb Exp $
43
+	 * @link        http://pear.php.net/package/HTTP_Request/ 
44
+	 */
45 45
 
46 46
 /**
47 47
  * Listener for HTTP_Request and HTTP_Response objects
@@ -60,17 +60,17 @@  discard block
 block discarded – undo
60 60
     * A listener's identifier
61 61
     * @var string
62 62
     */
63
-    var $_id;
63
+	var $_id;
64 64
 
65 65
    /**
66 66
     * Constructor, sets the object's identifier
67 67
     *
68 68
     * @access public
69 69
     */
70
-    function HTTP_Request_Listener()
71
-    {
72
-        $this->_id = md5(uniqid('http_request_', 1));
73
-    }
70
+	function HTTP_Request_Listener()
71
+	{
72
+		$this->_id = md5(uniqid('http_request_', 1));
73
+	}
74 74
 
75 75
 
76 76
    /**
@@ -79,10 +79,10 @@  discard block
 block discarded – undo
79 79
     * @access public
80 80
     * @return string
81 81
     */
82
-    function getId()
83
-    {
84
-        return $this->_id;
85
-    }
82
+	function getId()
83
+	{
84
+		return $this->_id;
85
+	}
86 86
 
87 87
 
88 88
    /**
@@ -94,13 +94,13 @@  discard block
 block discarded – undo
94 94
     * @param    mixed   Additional data
95 95
     * @abstract
96 96
     */
97
-    function update(&$subject, $event, $data = null)
98
-    {
99
-        echo "Notified of event: '$event'\n";
100
-        if (null !== $data) {
101
-            echo "Additional data: ";
102
-            var_dump($data);
103
-        }
104
-    }
97
+	function update(&$subject, $event, $data = null)
98
+	{
99
+		echo "Notified of event: '$event'\n";
100
+		if (null !== $data) {
101
+			echo "Additional data: ";
102
+			var_dump($data);
103
+		}
104
+	}
105 105
 }
106 106
 ?>
Please login to merge, or discard this patch.
libs/PEAR/Net/Socket.php 2 patches
Indentation   +490 added lines, -490 removed lines patch added patch discarded remove patch
@@ -34,495 +34,495 @@
 block discarded – undo
34 34
  */
35 35
 class Net_Socket extends PEAR {
36 36
 
37
-    /**
38
-     * Socket file pointer.
39
-     * @var resource $fp
40
-     */
41
-    var $fp = null;
42
-
43
-    /**
44
-     * Whether the socket is blocking. Defaults to true.
45
-     * @var boolean $blocking
46
-     */
47
-    var $blocking = true;
48
-
49
-    /**
50
-     * Whether the socket is persistent. Defaults to false.
51
-     * @var boolean $persistent
52
-     */
53
-    var $persistent = false;
54
-
55
-    /**
56
-     * The IP address to connect to.
57
-     * @var string $addr
58
-     */
59
-    var $addr = '';
60
-
61
-    /**
62
-     * The port number to connect to.
63
-     * @var integer $port
64
-     */
65
-    var $port = 0;
66
-
67
-    /**
68
-     * Number of seconds to wait on socket connections before assuming
69
-     * there's no more data. Defaults to no timeout.
70
-     * @var integer $timeout
71
-     */
72
-    var $timeout = false;
73
-
74
-    /**
75
-     * Number of bytes to read at a time in readLine() and
76
-     * readAll(). Defaults to 2048.
77
-     * @var integer $lineLength
78
-     */
79
-    var $lineLength = 2048;
80
-
81
-    /**
82
-     * Connect to the specified port. If called when the socket is
83
-     * already connected, it disconnects and connects again.
84
-     *
85
-     * @param string  $addr        IP address or host name.
86
-     * @param integer $port        TCP port number.
87
-     * @param boolean $persistent  (optional) Whether the connection is
88
-     *                             persistent (kept open between requests
89
-     *                             by the web server).
90
-     * @param integer $timeout     (optional) How long to wait for data.
91
-     * @param array   $options     See options for stream_context_create.
92
-     *
93
-     * @access public
94
-     *
95
-     * @return boolean | PEAR_Error  True on success or a PEAR_Error on failure.
96
-     */
97
-    function connect($addr, $port = 0, $persistent = null, $timeout = null, $options = null)
98
-    {
99
-        if (is_resource($this->fp)) {
100
-            @fclose($this->fp);
101
-            $this->fp = null;
102
-        }
103
-
104
-        if (!$addr) {
105
-            return $this->raiseError('$addr cannot be empty');
106
-        } elseif (strspn($addr, '.0123456789') == strlen($addr) ||
107
-                  strstr($addr, '/') !== false) {
108
-            $this->addr = $addr;
109
-        } else {
110
-            $this->addr = @gethostbyname($addr);
111
-        }
112
-
113
-        $this->port = $port % 65536;
114
-
115
-        if ($persistent !== null) {
116
-            $this->persistent = $persistent;
117
-        }
118
-
119
-        if ($timeout !== null) {
120
-            $this->timeout = $timeout;
121
-        }
122
-
123
-        $openfunc = $this->persistent ? 'pfsockopen' : 'fsockopen';
124
-        $errno = 0;
125
-        $errstr = '';
126
-        if ($options && function_exists('stream_context_create')) {
127
-            if ($this->timeout) {
128
-                $timeout = $this->timeout;
129
-            } else {
130
-                $timeout = 0;
131
-            }
132
-            $context = stream_context_create($options);
133
-            $fp = @$openfunc($this->addr, $this->port, $errno, $errstr, $timeout, $context);
134
-        } else {
135
-            if ($this->timeout) {
136
-                $fp = @$openfunc($this->addr, $this->port, $errno, $errstr, $this->timeout);
137
-            } else {
138
-                $fp = @$openfunc($this->addr, $this->port, $errno, $errstr);
139
-            }
140
-        }
141
-
142
-        if (!$fp) {
143
-            return $this->raiseError($errstr, $errno);
144
-        }
145
-
146
-        $this->fp = $fp;
147
-
148
-        return $this->setBlocking($this->blocking);
149
-    }
150
-
151
-    /**
152
-     * Disconnects from the peer, closes the socket.
153
-     *
154
-     * @access public
155
-     * @return mixed true on success or an error object otherwise
156
-     */
157
-    function disconnect()
158
-    {
159
-        if (!is_resource($this->fp)) {
160
-            return $this->raiseError('not connected');
161
-        }
162
-
163
-        @fclose($this->fp);
164
-        $this->fp = null;
165
-        return true;
166
-    }
167
-
168
-    /**
169
-     * Find out if the socket is in blocking mode.
170
-     *
171
-     * @access public
172
-     * @return boolean  The current blocking mode.
173
-     */
174
-    function isBlocking()
175
-    {
176
-        return $this->blocking;
177
-    }
178
-
179
-    /**
180
-     * Sets whether the socket connection should be blocking or
181
-     * not. A read call to a non-blocking socket will return immediately
182
-     * if there is no data available, whereas it will block until there
183
-     * is data for blocking sockets.
184
-     *
185
-     * @param boolean $mode  True for blocking sockets, false for nonblocking.
186
-     * @access public
187
-     * @return mixed true on success or an error object otherwise
188
-     */
189
-    function setBlocking($mode)
190
-    {
191
-        if (!is_resource($this->fp)) {
192
-            return $this->raiseError('not connected');
193
-        }
194
-
195
-        $this->blocking = $mode;
196
-        socket_set_blocking($this->fp, $this->blocking);
197
-        return true;
198
-    }
199
-
200
-    /**
201
-     * Sets the timeout value on socket descriptor,
202
-     * expressed in the sum of seconds and microseconds
203
-     *
204
-     * @param integer $seconds  Seconds.
205
-     * @param integer $microseconds  Microseconds.
206
-     * @access public
207
-     * @return mixed true on success or an error object otherwise
208
-     */
209
-    function setTimeout($seconds, $microseconds)
210
-    {
211
-        if (!is_resource($this->fp)) {
212
-            return $this->raiseError('not connected');
213
-        }
214
-
215
-        return socket_set_timeout($this->fp, $seconds, $microseconds);
216
-    }
217
-
218
-    /**
219
-     * Returns information about an existing socket resource.
220
-     * Currently returns four entries in the result array:
221
-     *
222
-     * <p>
223
-     * timed_out (bool) - The socket timed out waiting for data<br>
224
-     * blocked (bool) - The socket was blocked<br>
225
-     * eof (bool) - Indicates EOF event<br>
226
-     * unread_bytes (int) - Number of bytes left in the socket buffer<br>
227
-     * </p>
228
-     *
229
-     * @access public
230
-     * @return mixed Array containing information about existing socket resource or an error object otherwise
231
-     */
232
-    function getStatus()
233
-    {
234
-        if (!is_resource($this->fp)) {
235
-            return $this->raiseError('not connected');
236
-        }
237
-
238
-        return socket_get_status($this->fp);
239
-    }
240
-
241
-    /**
242
-     * Get a specified line of data
243
-     *
244
-     * @access public
245
-     * @return $size bytes of data from the socket, or a PEAR_Error if
246
-     *         not connected.
247
-     */
248
-    function gets($size)
249
-    {
250
-        if (!is_resource($this->fp)) {
251
-            return $this->raiseError('not connected');
252
-        }
253
-
254
-        return @fgets($this->fp, $size);
255
-    }
256
-
257
-    /**
258
-     * Read a specified amount of data. This is guaranteed to return,
259
-     * and has the added benefit of getting everything in one fread()
260
-     * chunk; if you know the size of the data you're getting
261
-     * beforehand, this is definitely the way to go.
262
-     *
263
-     * @param integer $size  The number of bytes to read from the socket.
264
-     * @access public
265
-     * @return $size bytes of data from the socket, or a PEAR_Error if
266
-     *         not connected.
267
-     */
268
-    function read($size)
269
-    {
270
-        if (!is_resource($this->fp)) {
271
-            return $this->raiseError('not connected');
272
-        }
273
-
274
-        return @fread($this->fp, $size);
275
-    }
276
-
277
-    /**
278
-     * Write a specified amount of data.
279
-     *
280
-     * @param string  $data       Data to write.
281
-     * @param integer $blocksize  Amount of data to write at once.
282
-     *                            NULL means all at once.
283
-     *
284
-     * @access public
285
-     * @return mixed true on success or an error object otherwise
286
-     */
287
-    function write($data, $blocksize = null)
288
-    {
289
-        if (!is_resource($this->fp)) {
290
-            return $this->raiseError('not connected');
291
-        }
292
-
293
-        if (is_null($blocksize) && !OS_WINDOWS) {
294
-            return fwrite($this->fp, $data);
295
-        } else {
296
-            if (is_null($blocksize)) {
297
-                $blocksize = 1024;
298
-            }
299
-
300
-            $pos = 0;
301
-            $size = strlen($data);
302
-            while ($pos < $size) {
303
-                $written = @fwrite($this->fp, substr($data, $pos, $blocksize));
304
-                if ($written === false) {
305
-                    return false;
306
-                }
307
-                $pos += $written;
308
-            }
309
-
310
-            return $pos;
311
-        }
312
-    }
313
-
314
-    /**
315
-     * Write a line of data to the socket, followed by a trailing "\r\n".
316
-     *
317
-     * @access public
318
-     * @return mixed fputs result, or an error
319
-     */
320
-    function writeLine($data)
321
-    {
322
-        if (!is_resource($this->fp)) {
323
-            return $this->raiseError('not connected');
324
-        }
325
-
326
-        return fwrite($this->fp, $data . "\r\n");
327
-    }
328
-
329
-    /**
330
-     * Tests for end-of-file on a socket descriptor.
331
-     *
332
-     * @access public
333
-     * @return bool
334
-     */
335
-    function eof()
336
-    {
337
-        return (is_resource($this->fp) && feof($this->fp));
338
-    }
339
-
340
-    /**
341
-     * Reads a byte of data
342
-     *
343
-     * @access public
344
-     * @return 1 byte of data from the socket, or a PEAR_Error if
345
-     *         not connected.
346
-     */
347
-    function readByte()
348
-    {
349
-        if (!is_resource($this->fp)) {
350
-            return $this->raiseError('not connected');
351
-        }
352
-
353
-        return ord(@fread($this->fp, 1));
354
-    }
355
-
356
-    /**
357
-     * Reads a word of data
358
-     *
359
-     * @access public
360
-     * @return 1 word of data from the socket, or a PEAR_Error if
361
-     *         not connected.
362
-     */
363
-    function readWord()
364
-    {
365
-        if (!is_resource($this->fp)) {
366
-            return $this->raiseError('not connected');
367
-        }
368
-
369
-        $buf = @fread($this->fp, 2);
370
-        return (ord($buf[0]) + (ord($buf[1]) << 8));
371
-    }
372
-
373
-    /**
374
-     * Reads an int of data
375
-     *
376
-     * @access public
377
-     * @return integer  1 int of data from the socket, or a PEAR_Error if
378
-     *                  not connected.
379
-     */
380
-    function readInt()
381
-    {
382
-        if (!is_resource($this->fp)) {
383
-            return $this->raiseError('not connected');
384
-        }
385
-
386
-        $buf = @fread($this->fp, 4);
387
-        return (ord($buf[0]) + (ord($buf[1]) << 8) +
388
-                (ord($buf[2]) << 16) + (ord($buf[3]) << 24));
389
-    }
390
-
391
-    /**
392
-     * Reads a zero-terminated string of data
393
-     *
394
-     * @access public
395
-     * @return string, or a PEAR_Error if
396
-     *         not connected.
397
-     */
398
-    function readString()
399
-    {
400
-        if (!is_resource($this->fp)) {
401
-            return $this->raiseError('not connected');
402
-        }
403
-
404
-        $string = '';
405
-        while (($char = @fread($this->fp, 1)) != "\x00")  {
406
-            $string .= $char;
407
-        }
408
-        return $string;
409
-    }
410
-
411
-    /**
412
-     * Reads an IP Address and returns it in a dot formated string
413
-     *
414
-     * @access public
415
-     * @return Dot formated string, or a PEAR_Error if
416
-     *         not connected.
417
-     */
418
-    function readIPAddress()
419
-    {
420
-        if (!is_resource($this->fp)) {
421
-            return $this->raiseError('not connected');
422
-        }
423
-
424
-        $buf = @fread($this->fp, 4);
425
-        return sprintf("%s.%s.%s.%s", ord($buf[0]), ord($buf[1]),
426
-                       ord($buf[2]), ord($buf[3]));
427
-    }
428
-
429
-    /**
430
-     * Read until either the end of the socket or a newline, whichever
431
-     * comes first. Strips the trailing newline from the returned data.
432
-     *
433
-     * @access public
434
-     * @return All available data up to a newline, without that
435
-     *         newline, or until the end of the socket, or a PEAR_Error if
436
-     *         not connected.
437
-     */
438
-    function readLine()
439
-    {
440
-        if (!is_resource($this->fp)) {
441
-            return $this->raiseError('not connected');
442
-        }
443
-
444
-        $line = '';
445
-        $timeout = time() + $this->timeout;
446
-        while (!feof($this->fp) && (!$this->timeout || time() < $timeout)) {
447
-            $line .= @fgets($this->fp, $this->lineLength);
448
-            if (substr($line, -1) == "\n") {
449
-                return rtrim($line, "\r\n");
450
-            }
451
-        }
452
-        return $line;
453
-    }
454
-
455
-    /**
456
-     * Read until the socket closes, or until there is no more data in
457
-     * the inner PHP buffer. If the inner buffer is empty, in blocking
458
-     * mode we wait for at least 1 byte of data. Therefore, in
459
-     * blocking mode, if there is no data at all to be read, this
460
-     * function will never exit (unless the socket is closed on the
461
-     * remote end).
462
-     *
463
-     * @access public
464
-     *
465
-     * @return string  All data until the socket closes, or a PEAR_Error if
466
-     *                 not connected.
467
-     */
468
-    function readAll()
469
-    {
470
-        if (!is_resource($this->fp)) {
471
-            return $this->raiseError('not connected');
472
-        }
473
-
474
-        $data = '';
475
-        while (!feof($this->fp)) {
476
-            $data .= @fread($this->fp, $this->lineLength);
477
-        }
478
-        return $data;
479
-    }
480
-
481
-    /**
482
-     * Runs the equivalent of the select() system call on the socket
483
-     * with a timeout specified by tv_sec and tv_usec.
484
-     *
485
-     * @param integer $state    Which of read/write/error to check for.
486
-     * @param integer $tv_sec   Number of seconds for timeout.
487
-     * @param integer $tv_usec  Number of microseconds for timeout.
488
-     *
489
-     * @access public
490
-     * @return False if select fails, integer describing which of read/write/error
491
-     *         are ready, or PEAR_Error if not connected.
492
-     */
493
-    function select($state, $tv_sec, $tv_usec = 0)
494
-    {
495
-        if (!is_resource($this->fp)) {
496
-            return $this->raiseError('not connected');
497
-        }
498
-
499
-        $read = null;
500
-        $write = null;
501
-        $except = null;
502
-        if ($state & NET_SOCKET_READ) {
503
-            $read[] = $this->fp;
504
-        }
505
-        if ($state & NET_SOCKET_WRITE) {
506
-            $write[] = $this->fp;
507
-        }
508
-        if ($state & NET_SOCKET_ERROR) {
509
-            $except[] = $this->fp;
510
-        }
511
-        if (false === ($sr = stream_select($read, $write, $except, $tv_sec, $tv_usec))) {
512
-            return false;
513
-        }
514
-
515
-        $result = 0;
516
-        if (count($read)) {
517
-            $result |= NET_SOCKET_READ;
518
-        }
519
-        if (count($write)) {
520
-            $result |= NET_SOCKET_WRITE;
521
-        }
522
-        if (count($except)) {
523
-            $result |= NET_SOCKET_ERROR;
524
-        }
525
-        return $result;
526
-    }
37
+	/**
38
+	 * Socket file pointer.
39
+	 * @var resource $fp
40
+	 */
41
+	var $fp = null;
42
+
43
+	/**
44
+	 * Whether the socket is blocking. Defaults to true.
45
+	 * @var boolean $blocking
46
+	 */
47
+	var $blocking = true;
48
+
49
+	/**
50
+	 * Whether the socket is persistent. Defaults to false.
51
+	 * @var boolean $persistent
52
+	 */
53
+	var $persistent = false;
54
+
55
+	/**
56
+	 * The IP address to connect to.
57
+	 * @var string $addr
58
+	 */
59
+	var $addr = '';
60
+
61
+	/**
62
+	 * The port number to connect to.
63
+	 * @var integer $port
64
+	 */
65
+	var $port = 0;
66
+
67
+	/**
68
+	 * Number of seconds to wait on socket connections before assuming
69
+	 * there's no more data. Defaults to no timeout.
70
+	 * @var integer $timeout
71
+	 */
72
+	var $timeout = false;
73
+
74
+	/**
75
+	 * Number of bytes to read at a time in readLine() and
76
+	 * readAll(). Defaults to 2048.
77
+	 * @var integer $lineLength
78
+	 */
79
+	var $lineLength = 2048;
80
+
81
+	/**
82
+	 * Connect to the specified port. If called when the socket is
83
+	 * already connected, it disconnects and connects again.
84
+	 *
85
+	 * @param string  $addr        IP address or host name.
86
+	 * @param integer $port        TCP port number.
87
+	 * @param boolean $persistent  (optional) Whether the connection is
88
+	 *                             persistent (kept open between requests
89
+	 *                             by the web server).
90
+	 * @param integer $timeout     (optional) How long to wait for data.
91
+	 * @param array   $options     See options for stream_context_create.
92
+	 *
93
+	 * @access public
94
+	 *
95
+	 * @return boolean | PEAR_Error  True on success or a PEAR_Error on failure.
96
+	 */
97
+	function connect($addr, $port = 0, $persistent = null, $timeout = null, $options = null)
98
+	{
99
+		if (is_resource($this->fp)) {
100
+			@fclose($this->fp);
101
+			$this->fp = null;
102
+		}
103
+
104
+		if (!$addr) {
105
+			return $this->raiseError('$addr cannot be empty');
106
+		} elseif (strspn($addr, '.0123456789') == strlen($addr) ||
107
+				  strstr($addr, '/') !== false) {
108
+			$this->addr = $addr;
109
+		} else {
110
+			$this->addr = @gethostbyname($addr);
111
+		}
112
+
113
+		$this->port = $port % 65536;
114
+
115
+		if ($persistent !== null) {
116
+			$this->persistent = $persistent;
117
+		}
118
+
119
+		if ($timeout !== null) {
120
+			$this->timeout = $timeout;
121
+		}
122
+
123
+		$openfunc = $this->persistent ? 'pfsockopen' : 'fsockopen';
124
+		$errno = 0;
125
+		$errstr = '';
126
+		if ($options && function_exists('stream_context_create')) {
127
+			if ($this->timeout) {
128
+				$timeout = $this->timeout;
129
+			} else {
130
+				$timeout = 0;
131
+			}
132
+			$context = stream_context_create($options);
133
+			$fp = @$openfunc($this->addr, $this->port, $errno, $errstr, $timeout, $context);
134
+		} else {
135
+			if ($this->timeout) {
136
+				$fp = @$openfunc($this->addr, $this->port, $errno, $errstr, $this->timeout);
137
+			} else {
138
+				$fp = @$openfunc($this->addr, $this->port, $errno, $errstr);
139
+			}
140
+		}
141
+
142
+		if (!$fp) {
143
+			return $this->raiseError($errstr, $errno);
144
+		}
145
+
146
+		$this->fp = $fp;
147
+
148
+		return $this->setBlocking($this->blocking);
149
+	}
150
+
151
+	/**
152
+	 * Disconnects from the peer, closes the socket.
153
+	 *
154
+	 * @access public
155
+	 * @return mixed true on success or an error object otherwise
156
+	 */
157
+	function disconnect()
158
+	{
159
+		if (!is_resource($this->fp)) {
160
+			return $this->raiseError('not connected');
161
+		}
162
+
163
+		@fclose($this->fp);
164
+		$this->fp = null;
165
+		return true;
166
+	}
167
+
168
+	/**
169
+	 * Find out if the socket is in blocking mode.
170
+	 *
171
+	 * @access public
172
+	 * @return boolean  The current blocking mode.
173
+	 */
174
+	function isBlocking()
175
+	{
176
+		return $this->blocking;
177
+	}
178
+
179
+	/**
180
+	 * Sets whether the socket connection should be blocking or
181
+	 * not. A read call to a non-blocking socket will return immediately
182
+	 * if there is no data available, whereas it will block until there
183
+	 * is data for blocking sockets.
184
+	 *
185
+	 * @param boolean $mode  True for blocking sockets, false for nonblocking.
186
+	 * @access public
187
+	 * @return mixed true on success or an error object otherwise
188
+	 */
189
+	function setBlocking($mode)
190
+	{
191
+		if (!is_resource($this->fp)) {
192
+			return $this->raiseError('not connected');
193
+		}
194
+
195
+		$this->blocking = $mode;
196
+		socket_set_blocking($this->fp, $this->blocking);
197
+		return true;
198
+	}
199
+
200
+	/**
201
+	 * Sets the timeout value on socket descriptor,
202
+	 * expressed in the sum of seconds and microseconds
203
+	 *
204
+	 * @param integer $seconds  Seconds.
205
+	 * @param integer $microseconds  Microseconds.
206
+	 * @access public
207
+	 * @return mixed true on success or an error object otherwise
208
+	 */
209
+	function setTimeout($seconds, $microseconds)
210
+	{
211
+		if (!is_resource($this->fp)) {
212
+			return $this->raiseError('not connected');
213
+		}
214
+
215
+		return socket_set_timeout($this->fp, $seconds, $microseconds);
216
+	}
217
+
218
+	/**
219
+	 * Returns information about an existing socket resource.
220
+	 * Currently returns four entries in the result array:
221
+	 *
222
+	 * <p>
223
+	 * timed_out (bool) - The socket timed out waiting for data<br>
224
+	 * blocked (bool) - The socket was blocked<br>
225
+	 * eof (bool) - Indicates EOF event<br>
226
+	 * unread_bytes (int) - Number of bytes left in the socket buffer<br>
227
+	 * </p>
228
+	 *
229
+	 * @access public
230
+	 * @return mixed Array containing information about existing socket resource or an error object otherwise
231
+	 */
232
+	function getStatus()
233
+	{
234
+		if (!is_resource($this->fp)) {
235
+			return $this->raiseError('not connected');
236
+		}
237
+
238
+		return socket_get_status($this->fp);
239
+	}
240
+
241
+	/**
242
+	 * Get a specified line of data
243
+	 *
244
+	 * @access public
245
+	 * @return $size bytes of data from the socket, or a PEAR_Error if
246
+	 *         not connected.
247
+	 */
248
+	function gets($size)
249
+	{
250
+		if (!is_resource($this->fp)) {
251
+			return $this->raiseError('not connected');
252
+		}
253
+
254
+		return @fgets($this->fp, $size);
255
+	}
256
+
257
+	/**
258
+	 * Read a specified amount of data. This is guaranteed to return,
259
+	 * and has the added benefit of getting everything in one fread()
260
+	 * chunk; if you know the size of the data you're getting
261
+	 * beforehand, this is definitely the way to go.
262
+	 *
263
+	 * @param integer $size  The number of bytes to read from the socket.
264
+	 * @access public
265
+	 * @return $size bytes of data from the socket, or a PEAR_Error if
266
+	 *         not connected.
267
+	 */
268
+	function read($size)
269
+	{
270
+		if (!is_resource($this->fp)) {
271
+			return $this->raiseError('not connected');
272
+		}
273
+
274
+		return @fread($this->fp, $size);
275
+	}
276
+
277
+	/**
278
+	 * Write a specified amount of data.
279
+	 *
280
+	 * @param string  $data       Data to write.
281
+	 * @param integer $blocksize  Amount of data to write at once.
282
+	 *                            NULL means all at once.
283
+	 *
284
+	 * @access public
285
+	 * @return mixed true on success or an error object otherwise
286
+	 */
287
+	function write($data, $blocksize = null)
288
+	{
289
+		if (!is_resource($this->fp)) {
290
+			return $this->raiseError('not connected');
291
+		}
292
+
293
+		if (is_null($blocksize) && !OS_WINDOWS) {
294
+			return fwrite($this->fp, $data);
295
+		} else {
296
+			if (is_null($blocksize)) {
297
+				$blocksize = 1024;
298
+			}
299
+
300
+			$pos = 0;
301
+			$size = strlen($data);
302
+			while ($pos < $size) {
303
+				$written = @fwrite($this->fp, substr($data, $pos, $blocksize));
304
+				if ($written === false) {
305
+					return false;
306
+				}
307
+				$pos += $written;
308
+			}
309
+
310
+			return $pos;
311
+		}
312
+	}
313
+
314
+	/**
315
+	 * Write a line of data to the socket, followed by a trailing "\r\n".
316
+	 *
317
+	 * @access public
318
+	 * @return mixed fputs result, or an error
319
+	 */
320
+	function writeLine($data)
321
+	{
322
+		if (!is_resource($this->fp)) {
323
+			return $this->raiseError('not connected');
324
+		}
325
+
326
+		return fwrite($this->fp, $data . "\r\n");
327
+	}
328
+
329
+	/**
330
+	 * Tests for end-of-file on a socket descriptor.
331
+	 *
332
+	 * @access public
333
+	 * @return bool
334
+	 */
335
+	function eof()
336
+	{
337
+		return (is_resource($this->fp) && feof($this->fp));
338
+	}
339
+
340
+	/**
341
+	 * Reads a byte of data
342
+	 *
343
+	 * @access public
344
+	 * @return 1 byte of data from the socket, or a PEAR_Error if
345
+	 *         not connected.
346
+	 */
347
+	function readByte()
348
+	{
349
+		if (!is_resource($this->fp)) {
350
+			return $this->raiseError('not connected');
351
+		}
352
+
353
+		return ord(@fread($this->fp, 1));
354
+	}
355
+
356
+	/**
357
+	 * Reads a word of data
358
+	 *
359
+	 * @access public
360
+	 * @return 1 word of data from the socket, or a PEAR_Error if
361
+	 *         not connected.
362
+	 */
363
+	function readWord()
364
+	{
365
+		if (!is_resource($this->fp)) {
366
+			return $this->raiseError('not connected');
367
+		}
368
+
369
+		$buf = @fread($this->fp, 2);
370
+		return (ord($buf[0]) + (ord($buf[1]) << 8));
371
+	}
372
+
373
+	/**
374
+	 * Reads an int of data
375
+	 *
376
+	 * @access public
377
+	 * @return integer  1 int of data from the socket, or a PEAR_Error if
378
+	 *                  not connected.
379
+	 */
380
+	function readInt()
381
+	{
382
+		if (!is_resource($this->fp)) {
383
+			return $this->raiseError('not connected');
384
+		}
385
+
386
+		$buf = @fread($this->fp, 4);
387
+		return (ord($buf[0]) + (ord($buf[1]) << 8) +
388
+				(ord($buf[2]) << 16) + (ord($buf[3]) << 24));
389
+	}
390
+
391
+	/**
392
+	 * Reads a zero-terminated string of data
393
+	 *
394
+	 * @access public
395
+	 * @return string, or a PEAR_Error if
396
+	 *         not connected.
397
+	 */
398
+	function readString()
399
+	{
400
+		if (!is_resource($this->fp)) {
401
+			return $this->raiseError('not connected');
402
+		}
403
+
404
+		$string = '';
405
+		while (($char = @fread($this->fp, 1)) != "\x00")  {
406
+			$string .= $char;
407
+		}
408
+		return $string;
409
+	}
410
+
411
+	/**
412
+	 * Reads an IP Address and returns it in a dot formated string
413
+	 *
414
+	 * @access public
415
+	 * @return Dot formated string, or a PEAR_Error if
416
+	 *         not connected.
417
+	 */
418
+	function readIPAddress()
419
+	{
420
+		if (!is_resource($this->fp)) {
421
+			return $this->raiseError('not connected');
422
+		}
423
+
424
+		$buf = @fread($this->fp, 4);
425
+		return sprintf("%s.%s.%s.%s", ord($buf[0]), ord($buf[1]),
426
+					   ord($buf[2]), ord($buf[3]));
427
+	}
428
+
429
+	/**
430
+	 * Read until either the end of the socket or a newline, whichever
431
+	 * comes first. Strips the trailing newline from the returned data.
432
+	 *
433
+	 * @access public
434
+	 * @return All available data up to a newline, without that
435
+	 *         newline, or until the end of the socket, or a PEAR_Error if
436
+	 *         not connected.
437
+	 */
438
+	function readLine()
439
+	{
440
+		if (!is_resource($this->fp)) {
441
+			return $this->raiseError('not connected');
442
+		}
443
+
444
+		$line = '';
445
+		$timeout = time() + $this->timeout;
446
+		while (!feof($this->fp) && (!$this->timeout || time() < $timeout)) {
447
+			$line .= @fgets($this->fp, $this->lineLength);
448
+			if (substr($line, -1) == "\n") {
449
+				return rtrim($line, "\r\n");
450
+			}
451
+		}
452
+		return $line;
453
+	}
454
+
455
+	/**
456
+	 * Read until the socket closes, or until there is no more data in
457
+	 * the inner PHP buffer. If the inner buffer is empty, in blocking
458
+	 * mode we wait for at least 1 byte of data. Therefore, in
459
+	 * blocking mode, if there is no data at all to be read, this
460
+	 * function will never exit (unless the socket is closed on the
461
+	 * remote end).
462
+	 *
463
+	 * @access public
464
+	 *
465
+	 * @return string  All data until the socket closes, or a PEAR_Error if
466
+	 *                 not connected.
467
+	 */
468
+	function readAll()
469
+	{
470
+		if (!is_resource($this->fp)) {
471
+			return $this->raiseError('not connected');
472
+		}
473
+
474
+		$data = '';
475
+		while (!feof($this->fp)) {
476
+			$data .= @fread($this->fp, $this->lineLength);
477
+		}
478
+		return $data;
479
+	}
480
+
481
+	/**
482
+	 * Runs the equivalent of the select() system call on the socket
483
+	 * with a timeout specified by tv_sec and tv_usec.
484
+	 *
485
+	 * @param integer $state    Which of read/write/error to check for.
486
+	 * @param integer $tv_sec   Number of seconds for timeout.
487
+	 * @param integer $tv_usec  Number of microseconds for timeout.
488
+	 *
489
+	 * @access public
490
+	 * @return False if select fails, integer describing which of read/write/error
491
+	 *         are ready, or PEAR_Error if not connected.
492
+	 */
493
+	function select($state, $tv_sec, $tv_usec = 0)
494
+	{
495
+		if (!is_resource($this->fp)) {
496
+			return $this->raiseError('not connected');
497
+		}
498
+
499
+		$read = null;
500
+		$write = null;
501
+		$except = null;
502
+		if ($state & NET_SOCKET_READ) {
503
+			$read[] = $this->fp;
504
+		}
505
+		if ($state & NET_SOCKET_WRITE) {
506
+			$write[] = $this->fp;
507
+		}
508
+		if ($state & NET_SOCKET_ERROR) {
509
+			$except[] = $this->fp;
510
+		}
511
+		if (false === ($sr = stream_select($read, $write, $except, $tv_sec, $tv_usec))) {
512
+			return false;
513
+		}
514
+
515
+		$result = 0;
516
+		if (count($read)) {
517
+			$result |= NET_SOCKET_READ;
518
+		}
519
+		if (count($write)) {
520
+			$result |= NET_SOCKET_WRITE;
521
+		}
522
+		if (count($except)) {
523
+			$result |= NET_SOCKET_ERROR;
524
+		}
525
+		return $result;
526
+	}
527 527
 
528 528
 }
Please login to merge, or discard this patch.
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -21,7 +21,7 @@  discard block
 block discarded – undo
21 21
 
22 22
 require_once 'PEAR.php';
23 23
 
24
-define('NET_SOCKET_READ',  1);
24
+define('NET_SOCKET_READ', 1);
25 25
 define('NET_SOCKET_WRITE', 2);
26 26
 define('NET_SOCKET_ERROR', 3);
27 27
 
@@ -402,7 +402,7 @@  discard block
 block discarded – undo
402 402
         }
403 403
 
404 404
         $string = '';
405
-        while (($char = @fread($this->fp, 1)) != "\x00")  {
405
+        while (($char = @fread($this->fp, 1)) != "\x00") {
406 406
             $string .= $char;
407 407
         }
408 408
         return $string;
Please login to merge, or discard this patch.
libs/PEAR/PEAR.php 2 patches
Indentation   +979 added lines, -979 removed lines patch added patch discarded remove patch
@@ -40,25 +40,25 @@  discard block
 block discarded – undo
40 40
 define('PEAR_ERROR_EXCEPTION', 32);
41 41
 /**#@-*/
42 42
 define('PEAR_ZE2', (function_exists('version_compare') &&
43
-                    version_compare(zend_version(), "2-dev", "ge")));
43
+					version_compare(zend_version(), "2-dev", "ge")));
44 44
 
45 45
 if (substr(PHP_OS, 0, 3) == 'WIN') {
46
-    define('OS_WINDOWS', true);
47
-    define('OS_UNIX',    false);
48
-    define('PEAR_OS',    'Windows');
46
+	define('OS_WINDOWS', true);
47
+	define('OS_UNIX',    false);
48
+	define('PEAR_OS',    'Windows');
49 49
 } else {
50
-    define('OS_WINDOWS', false);
51
-    define('OS_UNIX',    true);
52
-    define('PEAR_OS',    'Unix'); // blatant assumption
50
+	define('OS_WINDOWS', false);
51
+	define('OS_UNIX',    true);
52
+	define('PEAR_OS',    'Unix'); // blatant assumption
53 53
 }
54 54
 
55 55
 // instant backwards compatibility
56 56
 if (!defined('PATH_SEPARATOR')) {
57
-    if (OS_WINDOWS) {
58
-        define('PATH_SEPARATOR', ';');
59
-    } else {
60
-        define('PATH_SEPARATOR', ':');
61
-    }
57
+	if (OS_WINDOWS) {
58
+		define('PATH_SEPARATOR', ';');
59
+	} else {
60
+		define('PATH_SEPARATOR', ':');
61
+	}
62 62
 }
63 63
 
64 64
 $GLOBALS['_PEAR_default_error_mode']     = PEAR_ERROR_RETURN;
@@ -101,704 +101,704 @@  discard block
 block discarded – undo
101 101
  */
102 102
 class PEAR
103 103
 {
104
-    // {{{ properties
105
-
106
-    /**
107
-     * Whether to enable internal debug messages.
108
-     *
109
-     * @var     bool
110
-     * @access  private
111
-     */
112
-    var $_debug = false;
113
-
114
-    /**
115
-     * Default error mode for this object.
116
-     *
117
-     * @var     int
118
-     * @access  private
119
-     */
120
-    var $_default_error_mode = null;
121
-
122
-    /**
123
-     * Default error options used for this object when error mode
124
-     * is PEAR_ERROR_TRIGGER.
125
-     *
126
-     * @var     int
127
-     * @access  private
128
-     */
129
-    var $_default_error_options = null;
130
-
131
-    /**
132
-     * Default error handler (callback) for this object, if error mode is
133
-     * PEAR_ERROR_CALLBACK.
134
-     *
135
-     * @var     string
136
-     * @access  private
137
-     */
138
-    var $_default_error_handler = '';
139
-
140
-    /**
141
-     * Which class to use for error objects.
142
-     *
143
-     * @var     string
144
-     * @access  private
145
-     */
146
-    var $_error_class = 'PEAR_Error';
147
-
148
-    /**
149
-     * An array of expected errors.
150
-     *
151
-     * @var     array
152
-     * @access  private
153
-     */
154
-    var $_expected_errors = array();
155
-
156
-    // }}}
157
-
158
-    // {{{ constructor
159
-
160
-    /**
161
-     * Constructor.  Registers this object in
162
-     * $_PEAR_destructor_object_list for destructor emulation if a
163
-     * destructor object exists.
164
-     *
165
-     * @param string $error_class  (optional) which class to use for
166
-     *        error objects, defaults to PEAR_Error.
167
-     * @access public
168
-     * @return void
169
-     */
170
-    function PEAR($error_class = null)
171
-    {
172
-        $classname = strtolower(get_class($this));
173
-        if ($this->_debug) {
174
-            print "PEAR constructor called, class=$classname\n";
175
-        }
176
-        if ($error_class !== null) {
177
-            $this->_error_class = $error_class;
178
-        }
179
-        while ($classname && strcasecmp($classname, "pear")) {
180
-            $destructor = "_$classname";
181
-            if (method_exists($this, $destructor)) {
182
-                global $_PEAR_destructor_object_list;
183
-                $_PEAR_destructor_object_list[] = &$this;
184
-                if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) {
185
-                    register_shutdown_function("_PEAR_call_destructors");
186
-                    $GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true;
187
-                }
188
-                break;
189
-            } else {
190
-                $classname = get_parent_class($classname);
191
-            }
192
-        }
193
-    }
194
-
195
-    // }}}
196
-    // {{{ destructor
197
-
198
-    /**
199
-     * Destructor (the emulated type of...).  Does nothing right now,
200
-     * but is included for forward compatibility, so subclass
201
-     * destructors should always call it.
202
-     *
203
-     * See the note in the class desciption about output from
204
-     * destructors.
205
-     *
206
-     * @access public
207
-     * @return void
208
-     */
209
-    function _PEAR() {
210
-        if ($this->_debug) {
211
-            printf("PEAR destructor called, class=%s\n", strtolower(get_class($this)));
212
-        }
213
-    }
214
-
215
-    // }}}
216
-    // {{{ getStaticProperty()
217
-
218
-    /**
219
-    * If you have a class that's mostly/entirely static, and you need static
220
-    * properties, you can use this method to simulate them. Eg. in your method(s)
221
-    * do this: $myVar = &PEAR::getStaticProperty('myclass', 'myVar');
222
-    * You MUST use a reference, or they will not persist!
223
-    *
224
-    * @access public
225
-    * @param  string $class  The calling classname, to prevent clashes
226
-    * @param  string $var    The variable to retrieve.
227
-    * @return mixed   A reference to the variable. If not set it will be
228
-    *                 auto initialised to NULL.
229
-    */
230
-    function &getStaticProperty($class, $var)
231
-    {
232
-        static $properties;
233
-        if (!isset($properties[$class])) {
234
-            $properties[$class] = array();
235
-        }
236
-        if (!array_key_exists($var, $properties[$class])) {
237
-            $properties[$class][$var] = null;
238
-        }
239
-        return $properties[$class][$var];
240
-    }
241
-
242
-    // }}}
243
-    // {{{ registerShutdownFunc()
244
-
245
-    /**
246
-    * Use this function to register a shutdown method for static
247
-    * classes.
248
-    *
249
-    * @access public
250
-    * @param  mixed $func  The function name (or array of class/method) to call
251
-    * @param  mixed $args  The arguments to pass to the function
252
-    * @return void
253
-    */
254
-    function registerShutdownFunc($func, $args = array())
255
-    {
256
-        // if we are called statically, there is a potential
257
-        // that no shutdown func is registered.  Bug #6445
258
-        if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) {
259
-            register_shutdown_function("_PEAR_call_destructors");
260
-            $GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true;
261
-        }
262
-        $GLOBALS['_PEAR_shutdown_funcs'][] = array($func, $args);
263
-    }
264
-
265
-    // }}}
266
-    // {{{ isError()
267
-
268
-    /**
269
-     * Tell whether a value is a PEAR error.
270
-     *
271
-     * @param   mixed $data   the value to test
272
-     * @param   int   $code   if $data is an error object, return true
273
-     *                        only if $code is a string and
274
-     *                        $obj->getMessage() == $code or
275
-     *                        $code is an integer and $obj->getCode() == $code
276
-     * @access  public
277
-     * @return  bool    true if parameter is an error
278
-     */
279
-    function isError($data, $code = null)
280
-    {
281
-        if (is_a($data, 'PEAR_Error')) {
282
-            if (is_null($code)) {
283
-                return true;
284
-            } elseif (is_string($code)) {
285
-                return $data->getMessage() == $code;
286
-            } else {
287
-                return $data->getCode() == $code;
288
-            }
289
-        }
290
-        return false;
291
-    }
292
-
293
-    // }}}
294
-    // {{{ setErrorHandling()
295
-
296
-    /**
297
-     * Sets how errors generated by this object should be handled.
298
-     * Can be invoked both in objects and statically.  If called
299
-     * statically, setErrorHandling sets the default behaviour for all
300
-     * PEAR objects.  If called in an object, setErrorHandling sets
301
-     * the default behaviour for that object.
302
-     *
303
-     * @param int $mode
304
-     *        One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT,
305
-     *        PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE,
306
-     *        PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION.
307
-     *
308
-     * @param mixed $options
309
-     *        When $mode is PEAR_ERROR_TRIGGER, this is the error level (one
310
-     *        of E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR).
311
-     *
312
-     *        When $mode is PEAR_ERROR_CALLBACK, this parameter is expected
313
-     *        to be the callback function or method.  A callback
314
-     *        function is a string with the name of the function, a
315
-     *        callback method is an array of two elements: the element
316
-     *        at index 0 is the object, and the element at index 1 is
317
-     *        the name of the method to call in the object.
318
-     *
319
-     *        When $mode is PEAR_ERROR_PRINT or PEAR_ERROR_DIE, this is
320
-     *        a printf format string used when printing the error
321
-     *        message.
322
-     *
323
-     * @access public
324
-     * @return void
325
-     * @see PEAR_ERROR_RETURN
326
-     * @see PEAR_ERROR_PRINT
327
-     * @see PEAR_ERROR_TRIGGER
328
-     * @see PEAR_ERROR_DIE
329
-     * @see PEAR_ERROR_CALLBACK
330
-     * @see PEAR_ERROR_EXCEPTION
331
-     *
332
-     * @since PHP 4.0.5
333
-     */
334
-
335
-    function setErrorHandling($mode = null, $options = null)
336
-    {
337
-        if (isset($this) && is_a($this, 'PEAR')) {
338
-            $setmode     = &$this->_default_error_mode;
339
-            $setoptions  = &$this->_default_error_options;
340
-        } else {
341
-            $setmode     = &$GLOBALS['_PEAR_default_error_mode'];
342
-            $setoptions  = &$GLOBALS['_PEAR_default_error_options'];
343
-        }
344
-
345
-        switch ($mode) {
346
-            case PEAR_ERROR_EXCEPTION:
347
-            case PEAR_ERROR_RETURN:
348
-            case PEAR_ERROR_PRINT:
349
-            case PEAR_ERROR_TRIGGER:
350
-            case PEAR_ERROR_DIE:
351
-            case null:
352
-                $setmode = $mode;
353
-                $setoptions = $options;
354
-                break;
355
-
356
-            case PEAR_ERROR_CALLBACK:
357
-                $setmode = $mode;
358
-                // class/object method callback
359
-                if (is_callable($options)) {
360
-                    $setoptions = $options;
361
-                } else {
362
-                    trigger_error("invalid error callback", E_USER_WARNING);
363
-                }
364
-                break;
365
-
366
-            default:
367
-                trigger_error("invalid error mode", E_USER_WARNING);
368
-                break;
369
-        }
370
-    }
371
-
372
-    // }}}
373
-    // {{{ expectError()
374
-
375
-    /**
376
-     * This method is used to tell which errors you expect to get.
377
-     * Expected errors are always returned with error mode
378
-     * PEAR_ERROR_RETURN.  Expected error codes are stored in a stack,
379
-     * and this method pushes a new element onto it.  The list of
380
-     * expected errors are in effect until they are popped off the
381
-     * stack with the popExpect() method.
382
-     *
383
-     * Note that this method can not be called statically
384
-     *
385
-     * @param mixed $code a single error code or an array of error codes to expect
386
-     *
387
-     * @return int     the new depth of the "expected errors" stack
388
-     * @access public
389
-     */
390
-    function expectError($code = '*')
391
-    {
392
-        if (is_array($code)) {
393
-            array_push($this->_expected_errors, $code);
394
-        } else {
395
-            array_push($this->_expected_errors, array($code));
396
-        }
397
-        return sizeof($this->_expected_errors);
398
-    }
399
-
400
-    // }}}
401
-    // {{{ popExpect()
402
-
403
-    /**
404
-     * This method pops one element off the expected error codes
405
-     * stack.
406
-     *
407
-     * @return array   the list of error codes that were popped
408
-     */
409
-    function popExpect()
410
-    {
411
-        return array_pop($this->_expected_errors);
412
-    }
413
-
414
-    // }}}
415
-    // {{{ _checkDelExpect()
416
-
417
-    /**
418
-     * This method checks unsets an error code if available
419
-     *
420
-     * @param mixed error code
421
-     * @return bool true if the error code was unset, false otherwise
422
-     * @access private
423
-     * @since PHP 4.3.0
424
-     */
425
-    function _checkDelExpect($error_code)
426
-    {
427
-        $deleted = false;
428
-
429
-        foreach ($this->_expected_errors AS $key => $error_array) {
430
-            if (in_array($error_code, $error_array)) {
431
-                unset($this->_expected_errors[$key][array_search($error_code, $error_array)]);
432
-                $deleted = true;
433
-            }
434
-
435
-            // clean up empty arrays
436
-            if (0 == count($this->_expected_errors[$key])) {
437
-                unset($this->_expected_errors[$key]);
438
-            }
439
-        }
440
-        return $deleted;
441
-    }
442
-
443
-    // }}}
444
-    // {{{ delExpect()
445
-
446
-    /**
447
-     * This method deletes all occurences of the specified element from
448
-     * the expected error codes stack.
449
-     *
450
-     * @param  mixed $error_code error code that should be deleted
451
-     * @return mixed list of error codes that were deleted or error
452
-     * @access public
453
-     * @since PHP 4.3.0
454
-     */
455
-    function delExpect($error_code)
456
-    {
457
-        $deleted = false;
458
-
459
-        if ((is_array($error_code) && (0 != count($error_code)))) {
460
-            // $error_code is a non-empty array here;
461
-            // we walk through it trying to unset all
462
-            // values
463
-            foreach($error_code as $key => $error) {
464
-                if ($this->_checkDelExpect($error)) {
465
-                    $deleted =  true;
466
-                } else {
467
-                    $deleted = false;
468
-                }
469
-            }
470
-            return $deleted ? true : PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
471
-        } elseif (!empty($error_code)) {
472
-            // $error_code comes alone, trying to unset it
473
-            if ($this->_checkDelExpect($error_code)) {
474
-                return true;
475
-            } else {
476
-                return PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
477
-            }
478
-        } else {
479
-            // $error_code is empty
480
-            return PEAR::raiseError("The expected error you submitted is empty"); // IMPROVE ME
481
-        }
482
-    }
483
-
484
-    // }}}
485
-    // {{{ raiseError()
486
-
487
-    /**
488
-     * This method is a wrapper that returns an instance of the
489
-     * configured error class with this object's default error
490
-     * handling applied.  If the $mode and $options parameters are not
491
-     * specified, the object's defaults are used.
492
-     *
493
-     * @param mixed $message a text error message or a PEAR error object
494
-     *
495
-     * @param int $code      a numeric error code (it is up to your class
496
-     *                  to define these if you want to use codes)
497
-     *
498
-     * @param int $mode      One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT,
499
-     *                  PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE,
500
-     *                  PEAR_ERROR_CALLBACK, PEAR_ERROR_EXCEPTION.
501
-     *
502
-     * @param mixed $options If $mode is PEAR_ERROR_TRIGGER, this parameter
503
-     *                  specifies the PHP-internal error level (one of
504
-     *                  E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR).
505
-     *                  If $mode is PEAR_ERROR_CALLBACK, this
506
-     *                  parameter specifies the callback function or
507
-     *                  method.  In other error modes this parameter
508
-     *                  is ignored.
509
-     *
510
-     * @param string $userinfo If you need to pass along for example debug
511
-     *                  information, this parameter is meant for that.
512
-     *
513
-     * @param string $error_class The returned error object will be
514
-     *                  instantiated from this class, if specified.
515
-     *
516
-     * @param bool $skipmsg If true, raiseError will only pass error codes,
517
-     *                  the error message parameter will be dropped.
518
-     *
519
-     * @access public
520
-     * @return object   a PEAR error object
521
-     * @see PEAR::setErrorHandling
522
-     * @since PHP 4.0.5
523
-     */
524
-    function &raiseError($message = null,
525
-                         $code = null,
526
-                         $mode = null,
527
-                         $options = null,
528
-                         $userinfo = null,
529
-                         $error_class = null,
530
-                         $skipmsg = false)
531
-    {
532
-        // The error is yet a PEAR error object
533
-        if (is_object($message)) {
534
-            $code        = $message->getCode();
535
-            $userinfo    = $message->getUserInfo();
536
-            $error_class = $message->getType();
537
-            $message->error_message_prefix = '';
538
-            $message     = $message->getMessage();
539
-        }
540
-
541
-        if (isset($this) && isset($this->_expected_errors) && sizeof($this->_expected_errors) > 0 && sizeof($exp = end($this->_expected_errors))) {
542
-            if ($exp[0] == "*" ||
543
-                (is_int(reset($exp)) && in_array($code, $exp)) ||
544
-                (is_string(reset($exp)) && in_array($message, $exp))) {
545
-                $mode = PEAR_ERROR_RETURN;
546
-            }
547
-        }
548
-        // No mode given, try global ones
549
-        if ($mode === null) {
550
-            // Class error handler
551
-            if (isset($this) && isset($this->_default_error_mode)) {
552
-                $mode    = $this->_default_error_mode;
553
-                $options = $this->_default_error_options;
554
-            // Global error handler
555
-            } elseif (isset($GLOBALS['_PEAR_default_error_mode'])) {
556
-                $mode    = $GLOBALS['_PEAR_default_error_mode'];
557
-                $options = $GLOBALS['_PEAR_default_error_options'];
558
-            }
559
-        }
560
-
561
-        if ($error_class !== null) {
562
-            $ec = $error_class;
563
-        } elseif (isset($this) && isset($this->_error_class)) {
564
-            $ec = $this->_error_class;
565
-        } else {
566
-            $ec = 'PEAR_Error';
567
-        }
568
-        if ($skipmsg) {
569
-            $a = &new $ec($code, $mode, $options, $userinfo);
570
-            return $a;
571
-        } else {
572
-            $a = &new $ec($message, $code, $mode, $options, $userinfo);
573
-            return $a;
574
-        }
575
-    }
576
-
577
-    // }}}
578
-    // {{{ throwError()
579
-
580
-    /**
581
-     * Simpler form of raiseError with fewer options.  In most cases
582
-     * message, code and userinfo are enough.
583
-     *
584
-     * @param string $message
585
-     *
586
-     */
587
-    function &throwError($message = null,
588
-                         $code = null,
589
-                         $userinfo = null)
590
-    {
591
-        if (isset($this) && is_a($this, 'PEAR')) {
592
-            $a = &$this->raiseError($message, $code, null, null, $userinfo);
593
-            return $a;
594
-        } else {
595
-            $a = &PEAR::raiseError($message, $code, null, null, $userinfo);
596
-            return $a;
597
-        }
598
-    }
599
-
600
-    // }}}
601
-    function staticPushErrorHandling($mode, $options = null)
602
-    {
603
-        $stack = &$GLOBALS['_PEAR_error_handler_stack'];
604
-        $def_mode    = &$GLOBALS['_PEAR_default_error_mode'];
605
-        $def_options = &$GLOBALS['_PEAR_default_error_options'];
606
-        $stack[] = array($def_mode, $def_options);
607
-        switch ($mode) {
608
-            case PEAR_ERROR_EXCEPTION:
609
-            case PEAR_ERROR_RETURN:
610
-            case PEAR_ERROR_PRINT:
611
-            case PEAR_ERROR_TRIGGER:
612
-            case PEAR_ERROR_DIE:
613
-            case null:
614
-                $def_mode = $mode;
615
-                $def_options = $options;
616
-                break;
617
-
618
-            case PEAR_ERROR_CALLBACK:
619
-                $def_mode = $mode;
620
-                // class/object method callback
621
-                if (is_callable($options)) {
622
-                    $def_options = $options;
623
-                } else {
624
-                    trigger_error("invalid error callback", E_USER_WARNING);
625
-                }
626
-                break;
627
-
628
-            default:
629
-                trigger_error("invalid error mode", E_USER_WARNING);
630
-                break;
631
-        }
632
-        $stack[] = array($mode, $options);
633
-        return true;
634
-    }
635
-
636
-    function staticPopErrorHandling()
637
-    {
638
-        $stack = &$GLOBALS['_PEAR_error_handler_stack'];
639
-        $setmode     = &$GLOBALS['_PEAR_default_error_mode'];
640
-        $setoptions  = &$GLOBALS['_PEAR_default_error_options'];
641
-        array_pop($stack);
642
-        list($mode, $options) = $stack[sizeof($stack) - 1];
643
-        array_pop($stack);
644
-        switch ($mode) {
645
-            case PEAR_ERROR_EXCEPTION:
646
-            case PEAR_ERROR_RETURN:
647
-            case PEAR_ERROR_PRINT:
648
-            case PEAR_ERROR_TRIGGER:
649
-            case PEAR_ERROR_DIE:
650
-            case null:
651
-                $setmode = $mode;
652
-                $setoptions = $options;
653
-                break;
654
-
655
-            case PEAR_ERROR_CALLBACK:
656
-                $setmode = $mode;
657
-                // class/object method callback
658
-                if (is_callable($options)) {
659
-                    $setoptions = $options;
660
-                } else {
661
-                    trigger_error("invalid error callback", E_USER_WARNING);
662
-                }
663
-                break;
664
-
665
-            default:
666
-                trigger_error("invalid error mode", E_USER_WARNING);
667
-                break;
668
-        }
669
-        return true;
670
-    }
671
-
672
-    // {{{ pushErrorHandling()
673
-
674
-    /**
675
-     * Push a new error handler on top of the error handler options stack. With this
676
-     * you can easily override the actual error handler for some code and restore
677
-     * it later with popErrorHandling.
678
-     *
679
-     * @param mixed $mode (same as setErrorHandling)
680
-     * @param mixed $options (same as setErrorHandling)
681
-     *
682
-     * @return bool Always true
683
-     *
684
-     * @see PEAR::setErrorHandling
685
-     */
686
-    function pushErrorHandling($mode, $options = null)
687
-    {
688
-        $stack = &$GLOBALS['_PEAR_error_handler_stack'];
689
-        if (isset($this) && is_a($this, 'PEAR')) {
690
-            $def_mode    = &$this->_default_error_mode;
691
-            $def_options = &$this->_default_error_options;
692
-        } else {
693
-            $def_mode    = &$GLOBALS['_PEAR_default_error_mode'];
694
-            $def_options = &$GLOBALS['_PEAR_default_error_options'];
695
-        }
696
-        $stack[] = array($def_mode, $def_options);
697
-
698
-        if (isset($this) && is_a($this, 'PEAR')) {
699
-            $this->setErrorHandling($mode, $options);
700
-        } else {
701
-            PEAR::setErrorHandling($mode, $options);
702
-        }
703
-        $stack[] = array($mode, $options);
704
-        return true;
705
-    }
706
-
707
-    // }}}
708
-    // {{{ popErrorHandling()
709
-
710
-    /**
711
-    * Pop the last error handler used
712
-    *
713
-    * @return bool Always true
714
-    *
715
-    * @see PEAR::pushErrorHandling
716
-    */
717
-    function popErrorHandling()
718
-    {
719
-        $stack = &$GLOBALS['_PEAR_error_handler_stack'];
720
-        array_pop($stack);
721
-        list($mode, $options) = $stack[sizeof($stack) - 1];
722
-        array_pop($stack);
723
-        if (isset($this) && is_a($this, 'PEAR')) {
724
-            $this->setErrorHandling($mode, $options);
725
-        } else {
726
-            PEAR::setErrorHandling($mode, $options);
727
-        }
728
-        return true;
729
-    }
730
-
731
-    // }}}
732
-    // {{{ loadExtension()
733
-
734
-    /**
735
-    * OS independant PHP extension load. Remember to take care
736
-    * on the correct extension name for case sensitive OSes.
737
-    *
738
-    * @param string $ext The extension name
739
-    * @return bool Success or not on the dl() call
740
-    */
741
-    function loadExtension($ext)
742
-    {
743
-        if (!extension_loaded($ext)) {
744
-            // if either returns true dl() will produce a FATAL error, stop that
745
-            if ((ini_get('enable_dl') != 1) || (ini_get('safe_mode') == 1)) {
746
-                return false;
747
-            }
748
-            if (OS_WINDOWS) {
749
-                $suffix = '.dll';
750
-            } elseif (PHP_OS == 'HP-UX') {
751
-                $suffix = '.sl';
752
-            } elseif (PHP_OS == 'AIX') {
753
-                $suffix = '.a';
754
-            } elseif (PHP_OS == 'OSX') {
755
-                $suffix = '.bundle';
756
-            } else {
757
-                $suffix = '.so';
758
-            }
759
-            return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix);
760
-        }
761
-        return true;
762
-    }
763
-
764
-    // }}}
104
+	// {{{ properties
105
+
106
+	/**
107
+	 * Whether to enable internal debug messages.
108
+	 *
109
+	 * @var     bool
110
+	 * @access  private
111
+	 */
112
+	var $_debug = false;
113
+
114
+	/**
115
+	 * Default error mode for this object.
116
+	 *
117
+	 * @var     int
118
+	 * @access  private
119
+	 */
120
+	var $_default_error_mode = null;
121
+
122
+	/**
123
+	 * Default error options used for this object when error mode
124
+	 * is PEAR_ERROR_TRIGGER.
125
+	 *
126
+	 * @var     int
127
+	 * @access  private
128
+	 */
129
+	var $_default_error_options = null;
130
+
131
+	/**
132
+	 * Default error handler (callback) for this object, if error mode is
133
+	 * PEAR_ERROR_CALLBACK.
134
+	 *
135
+	 * @var     string
136
+	 * @access  private
137
+	 */
138
+	var $_default_error_handler = '';
139
+
140
+	/**
141
+	 * Which class to use for error objects.
142
+	 *
143
+	 * @var     string
144
+	 * @access  private
145
+	 */
146
+	var $_error_class = 'PEAR_Error';
147
+
148
+	/**
149
+	 * An array of expected errors.
150
+	 *
151
+	 * @var     array
152
+	 * @access  private
153
+	 */
154
+	var $_expected_errors = array();
155
+
156
+	// }}}
157
+
158
+	// {{{ constructor
159
+
160
+	/**
161
+	 * Constructor.  Registers this object in
162
+	 * $_PEAR_destructor_object_list for destructor emulation if a
163
+	 * destructor object exists.
164
+	 *
165
+	 * @param string $error_class  (optional) which class to use for
166
+	 *        error objects, defaults to PEAR_Error.
167
+	 * @access public
168
+	 * @return void
169
+	 */
170
+	function PEAR($error_class = null)
171
+	{
172
+		$classname = strtolower(get_class($this));
173
+		if ($this->_debug) {
174
+			print "PEAR constructor called, class=$classname\n";
175
+		}
176
+		if ($error_class !== null) {
177
+			$this->_error_class = $error_class;
178
+		}
179
+		while ($classname && strcasecmp($classname, "pear")) {
180
+			$destructor = "_$classname";
181
+			if (method_exists($this, $destructor)) {
182
+				global $_PEAR_destructor_object_list;
183
+				$_PEAR_destructor_object_list[] = &$this;
184
+				if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) {
185
+					register_shutdown_function("_PEAR_call_destructors");
186
+					$GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true;
187
+				}
188
+				break;
189
+			} else {
190
+				$classname = get_parent_class($classname);
191
+			}
192
+		}
193
+	}
194
+
195
+	// }}}
196
+	// {{{ destructor
197
+
198
+	/**
199
+	 * Destructor (the emulated type of...).  Does nothing right now,
200
+	 * but is included for forward compatibility, so subclass
201
+	 * destructors should always call it.
202
+	 *
203
+	 * See the note in the class desciption about output from
204
+	 * destructors.
205
+	 *
206
+	 * @access public
207
+	 * @return void
208
+	 */
209
+	function _PEAR() {
210
+		if ($this->_debug) {
211
+			printf("PEAR destructor called, class=%s\n", strtolower(get_class($this)));
212
+		}
213
+	}
214
+
215
+	// }}}
216
+	// {{{ getStaticProperty()
217
+
218
+	/**
219
+	 * If you have a class that's mostly/entirely static, and you need static
220
+	 * properties, you can use this method to simulate them. Eg. in your method(s)
221
+	 * do this: $myVar = &PEAR::getStaticProperty('myclass', 'myVar');
222
+	 * You MUST use a reference, or they will not persist!
223
+	 *
224
+	 * @access public
225
+	 * @param  string $class  The calling classname, to prevent clashes
226
+	 * @param  string $var    The variable to retrieve.
227
+	 * @return mixed   A reference to the variable. If not set it will be
228
+	 *                 auto initialised to NULL.
229
+	 */
230
+	function &getStaticProperty($class, $var)
231
+	{
232
+		static $properties;
233
+		if (!isset($properties[$class])) {
234
+			$properties[$class] = array();
235
+		}
236
+		if (!array_key_exists($var, $properties[$class])) {
237
+			$properties[$class][$var] = null;
238
+		}
239
+		return $properties[$class][$var];
240
+	}
241
+
242
+	// }}}
243
+	// {{{ registerShutdownFunc()
244
+
245
+	/**
246
+	 * Use this function to register a shutdown method for static
247
+	 * classes.
248
+	 *
249
+	 * @access public
250
+	 * @param  mixed $func  The function name (or array of class/method) to call
251
+	 * @param  mixed $args  The arguments to pass to the function
252
+	 * @return void
253
+	 */
254
+	function registerShutdownFunc($func, $args = array())
255
+	{
256
+		// if we are called statically, there is a potential
257
+		// that no shutdown func is registered.  Bug #6445
258
+		if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) {
259
+			register_shutdown_function("_PEAR_call_destructors");
260
+			$GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true;
261
+		}
262
+		$GLOBALS['_PEAR_shutdown_funcs'][] = array($func, $args);
263
+	}
264
+
265
+	// }}}
266
+	// {{{ isError()
267
+
268
+	/**
269
+	 * Tell whether a value is a PEAR error.
270
+	 *
271
+	 * @param   mixed $data   the value to test
272
+	 * @param   int   $code   if $data is an error object, return true
273
+	 *                        only if $code is a string and
274
+	 *                        $obj->getMessage() == $code or
275
+	 *                        $code is an integer and $obj->getCode() == $code
276
+	 * @access  public
277
+	 * @return  bool    true if parameter is an error
278
+	 */
279
+	function isError($data, $code = null)
280
+	{
281
+		if (is_a($data, 'PEAR_Error')) {
282
+			if (is_null($code)) {
283
+				return true;
284
+			} elseif (is_string($code)) {
285
+				return $data->getMessage() == $code;
286
+			} else {
287
+				return $data->getCode() == $code;
288
+			}
289
+		}
290
+		return false;
291
+	}
292
+
293
+	// }}}
294
+	// {{{ setErrorHandling()
295
+
296
+	/**
297
+	 * Sets how errors generated by this object should be handled.
298
+	 * Can be invoked both in objects and statically.  If called
299
+	 * statically, setErrorHandling sets the default behaviour for all
300
+	 * PEAR objects.  If called in an object, setErrorHandling sets
301
+	 * the default behaviour for that object.
302
+	 *
303
+	 * @param int $mode
304
+	 *        One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT,
305
+	 *        PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE,
306
+	 *        PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION.
307
+	 *
308
+	 * @param mixed $options
309
+	 *        When $mode is PEAR_ERROR_TRIGGER, this is the error level (one
310
+	 *        of E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR).
311
+	 *
312
+	 *        When $mode is PEAR_ERROR_CALLBACK, this parameter is expected
313
+	 *        to be the callback function or method.  A callback
314
+	 *        function is a string with the name of the function, a
315
+	 *        callback method is an array of two elements: the element
316
+	 *        at index 0 is the object, and the element at index 1 is
317
+	 *        the name of the method to call in the object.
318
+	 *
319
+	 *        When $mode is PEAR_ERROR_PRINT or PEAR_ERROR_DIE, this is
320
+	 *        a printf format string used when printing the error
321
+	 *        message.
322
+	 *
323
+	 * @access public
324
+	 * @return void
325
+	 * @see PEAR_ERROR_RETURN
326
+	 * @see PEAR_ERROR_PRINT
327
+	 * @see PEAR_ERROR_TRIGGER
328
+	 * @see PEAR_ERROR_DIE
329
+	 * @see PEAR_ERROR_CALLBACK
330
+	 * @see PEAR_ERROR_EXCEPTION
331
+	 *
332
+	 * @since PHP 4.0.5
333
+	 */
334
+
335
+	function setErrorHandling($mode = null, $options = null)
336
+	{
337
+		if (isset($this) && is_a($this, 'PEAR')) {
338
+			$setmode     = &$this->_default_error_mode;
339
+			$setoptions  = &$this->_default_error_options;
340
+		} else {
341
+			$setmode     = &$GLOBALS['_PEAR_default_error_mode'];
342
+			$setoptions  = &$GLOBALS['_PEAR_default_error_options'];
343
+		}
344
+
345
+		switch ($mode) {
346
+			case PEAR_ERROR_EXCEPTION:
347
+			case PEAR_ERROR_RETURN:
348
+			case PEAR_ERROR_PRINT:
349
+			case PEAR_ERROR_TRIGGER:
350
+			case PEAR_ERROR_DIE:
351
+			case null:
352
+				$setmode = $mode;
353
+				$setoptions = $options;
354
+				break;
355
+
356
+			case PEAR_ERROR_CALLBACK:
357
+				$setmode = $mode;
358
+				// class/object method callback
359
+				if (is_callable($options)) {
360
+					$setoptions = $options;
361
+				} else {
362
+					trigger_error("invalid error callback", E_USER_WARNING);
363
+				}
364
+				break;
365
+
366
+			default:
367
+				trigger_error("invalid error mode", E_USER_WARNING);
368
+				break;
369
+		}
370
+	}
371
+
372
+	// }}}
373
+	// {{{ expectError()
374
+
375
+	/**
376
+	 * This method is used to tell which errors you expect to get.
377
+	 * Expected errors are always returned with error mode
378
+	 * PEAR_ERROR_RETURN.  Expected error codes are stored in a stack,
379
+	 * and this method pushes a new element onto it.  The list of
380
+	 * expected errors are in effect until they are popped off the
381
+	 * stack with the popExpect() method.
382
+	 *
383
+	 * Note that this method can not be called statically
384
+	 *
385
+	 * @param mixed $code a single error code or an array of error codes to expect
386
+	 *
387
+	 * @return int     the new depth of the "expected errors" stack
388
+	 * @access public
389
+	 */
390
+	function expectError($code = '*')
391
+	{
392
+		if (is_array($code)) {
393
+			array_push($this->_expected_errors, $code);
394
+		} else {
395
+			array_push($this->_expected_errors, array($code));
396
+		}
397
+		return sizeof($this->_expected_errors);
398
+	}
399
+
400
+	// }}}
401
+	// {{{ popExpect()
402
+
403
+	/**
404
+	 * This method pops one element off the expected error codes
405
+	 * stack.
406
+	 *
407
+	 * @return array   the list of error codes that were popped
408
+	 */
409
+	function popExpect()
410
+	{
411
+		return array_pop($this->_expected_errors);
412
+	}
413
+
414
+	// }}}
415
+	// {{{ _checkDelExpect()
416
+
417
+	/**
418
+	 * This method checks unsets an error code if available
419
+	 *
420
+	 * @param mixed error code
421
+	 * @return bool true if the error code was unset, false otherwise
422
+	 * @access private
423
+	 * @since PHP 4.3.0
424
+	 */
425
+	function _checkDelExpect($error_code)
426
+	{
427
+		$deleted = false;
428
+
429
+		foreach ($this->_expected_errors AS $key => $error_array) {
430
+			if (in_array($error_code, $error_array)) {
431
+				unset($this->_expected_errors[$key][array_search($error_code, $error_array)]);
432
+				$deleted = true;
433
+			}
434
+
435
+			// clean up empty arrays
436
+			if (0 == count($this->_expected_errors[$key])) {
437
+				unset($this->_expected_errors[$key]);
438
+			}
439
+		}
440
+		return $deleted;
441
+	}
442
+
443
+	// }}}
444
+	// {{{ delExpect()
445
+
446
+	/**
447
+	 * This method deletes all occurences of the specified element from
448
+	 * the expected error codes stack.
449
+	 *
450
+	 * @param  mixed $error_code error code that should be deleted
451
+	 * @return mixed list of error codes that were deleted or error
452
+	 * @access public
453
+	 * @since PHP 4.3.0
454
+	 */
455
+	function delExpect($error_code)
456
+	{
457
+		$deleted = false;
458
+
459
+		if ((is_array($error_code) && (0 != count($error_code)))) {
460
+			// $error_code is a non-empty array here;
461
+			// we walk through it trying to unset all
462
+			// values
463
+			foreach($error_code as $key => $error) {
464
+				if ($this->_checkDelExpect($error)) {
465
+					$deleted =  true;
466
+				} else {
467
+					$deleted = false;
468
+				}
469
+			}
470
+			return $deleted ? true : PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
471
+		} elseif (!empty($error_code)) {
472
+			// $error_code comes alone, trying to unset it
473
+			if ($this->_checkDelExpect($error_code)) {
474
+				return true;
475
+			} else {
476
+				return PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
477
+			}
478
+		} else {
479
+			// $error_code is empty
480
+			return PEAR::raiseError("The expected error you submitted is empty"); // IMPROVE ME
481
+		}
482
+	}
483
+
484
+	// }}}
485
+	// {{{ raiseError()
486
+
487
+	/**
488
+	 * This method is a wrapper that returns an instance of the
489
+	 * configured error class with this object's default error
490
+	 * handling applied.  If the $mode and $options parameters are not
491
+	 * specified, the object's defaults are used.
492
+	 *
493
+	 * @param mixed $message a text error message or a PEAR error object
494
+	 *
495
+	 * @param int $code      a numeric error code (it is up to your class
496
+	 *                  to define these if you want to use codes)
497
+	 *
498
+	 * @param int $mode      One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT,
499
+	 *                  PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE,
500
+	 *                  PEAR_ERROR_CALLBACK, PEAR_ERROR_EXCEPTION.
501
+	 *
502
+	 * @param mixed $options If $mode is PEAR_ERROR_TRIGGER, this parameter
503
+	 *                  specifies the PHP-internal error level (one of
504
+	 *                  E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR).
505
+	 *                  If $mode is PEAR_ERROR_CALLBACK, this
506
+	 *                  parameter specifies the callback function or
507
+	 *                  method.  In other error modes this parameter
508
+	 *                  is ignored.
509
+	 *
510
+	 * @param string $userinfo If you need to pass along for example debug
511
+	 *                  information, this parameter is meant for that.
512
+	 *
513
+	 * @param string $error_class The returned error object will be
514
+	 *                  instantiated from this class, if specified.
515
+	 *
516
+	 * @param bool $skipmsg If true, raiseError will only pass error codes,
517
+	 *                  the error message parameter will be dropped.
518
+	 *
519
+	 * @access public
520
+	 * @return object   a PEAR error object
521
+	 * @see PEAR::setErrorHandling
522
+	 * @since PHP 4.0.5
523
+	 */
524
+	function &raiseError($message = null,
525
+						 $code = null,
526
+						 $mode = null,
527
+						 $options = null,
528
+						 $userinfo = null,
529
+						 $error_class = null,
530
+						 $skipmsg = false)
531
+	{
532
+		// The error is yet a PEAR error object
533
+		if (is_object($message)) {
534
+			$code        = $message->getCode();
535
+			$userinfo    = $message->getUserInfo();
536
+			$error_class = $message->getType();
537
+			$message->error_message_prefix = '';
538
+			$message     = $message->getMessage();
539
+		}
540
+
541
+		if (isset($this) && isset($this->_expected_errors) && sizeof($this->_expected_errors) > 0 && sizeof($exp = end($this->_expected_errors))) {
542
+			if ($exp[0] == "*" ||
543
+				(is_int(reset($exp)) && in_array($code, $exp)) ||
544
+				(is_string(reset($exp)) && in_array($message, $exp))) {
545
+				$mode = PEAR_ERROR_RETURN;
546
+			}
547
+		}
548
+		// No mode given, try global ones
549
+		if ($mode === null) {
550
+			// Class error handler
551
+			if (isset($this) && isset($this->_default_error_mode)) {
552
+				$mode    = $this->_default_error_mode;
553
+				$options = $this->_default_error_options;
554
+			// Global error handler
555
+			} elseif (isset($GLOBALS['_PEAR_default_error_mode'])) {
556
+				$mode    = $GLOBALS['_PEAR_default_error_mode'];
557
+				$options = $GLOBALS['_PEAR_default_error_options'];
558
+			}
559
+		}
560
+
561
+		if ($error_class !== null) {
562
+			$ec = $error_class;
563
+		} elseif (isset($this) && isset($this->_error_class)) {
564
+			$ec = $this->_error_class;
565
+		} else {
566
+			$ec = 'PEAR_Error';
567
+		}
568
+		if ($skipmsg) {
569
+			$a = &new $ec($code, $mode, $options, $userinfo);
570
+			return $a;
571
+		} else {
572
+			$a = &new $ec($message, $code, $mode, $options, $userinfo);
573
+			return $a;
574
+		}
575
+	}
576
+
577
+	// }}}
578
+	// {{{ throwError()
579
+
580
+	/**
581
+	 * Simpler form of raiseError with fewer options.  In most cases
582
+	 * message, code and userinfo are enough.
583
+	 *
584
+	 * @param string $message
585
+	 *
586
+	 */
587
+	function &throwError($message = null,
588
+						 $code = null,
589
+						 $userinfo = null)
590
+	{
591
+		if (isset($this) && is_a($this, 'PEAR')) {
592
+			$a = &$this->raiseError($message, $code, null, null, $userinfo);
593
+			return $a;
594
+		} else {
595
+			$a = &PEAR::raiseError($message, $code, null, null, $userinfo);
596
+			return $a;
597
+		}
598
+	}
599
+
600
+	// }}}
601
+	function staticPushErrorHandling($mode, $options = null)
602
+	{
603
+		$stack = &$GLOBALS['_PEAR_error_handler_stack'];
604
+		$def_mode    = &$GLOBALS['_PEAR_default_error_mode'];
605
+		$def_options = &$GLOBALS['_PEAR_default_error_options'];
606
+		$stack[] = array($def_mode, $def_options);
607
+		switch ($mode) {
608
+			case PEAR_ERROR_EXCEPTION:
609
+			case PEAR_ERROR_RETURN:
610
+			case PEAR_ERROR_PRINT:
611
+			case PEAR_ERROR_TRIGGER:
612
+			case PEAR_ERROR_DIE:
613
+			case null:
614
+				$def_mode = $mode;
615
+				$def_options = $options;
616
+				break;
617
+
618
+			case PEAR_ERROR_CALLBACK:
619
+				$def_mode = $mode;
620
+				// class/object method callback
621
+				if (is_callable($options)) {
622
+					$def_options = $options;
623
+				} else {
624
+					trigger_error("invalid error callback", E_USER_WARNING);
625
+				}
626
+				break;
627
+
628
+			default:
629
+				trigger_error("invalid error mode", E_USER_WARNING);
630
+				break;
631
+		}
632
+		$stack[] = array($mode, $options);
633
+		return true;
634
+	}
635
+
636
+	function staticPopErrorHandling()
637
+	{
638
+		$stack = &$GLOBALS['_PEAR_error_handler_stack'];
639
+		$setmode     = &$GLOBALS['_PEAR_default_error_mode'];
640
+		$setoptions  = &$GLOBALS['_PEAR_default_error_options'];
641
+		array_pop($stack);
642
+		list($mode, $options) = $stack[sizeof($stack) - 1];
643
+		array_pop($stack);
644
+		switch ($mode) {
645
+			case PEAR_ERROR_EXCEPTION:
646
+			case PEAR_ERROR_RETURN:
647
+			case PEAR_ERROR_PRINT:
648
+			case PEAR_ERROR_TRIGGER:
649
+			case PEAR_ERROR_DIE:
650
+			case null:
651
+				$setmode = $mode;
652
+				$setoptions = $options;
653
+				break;
654
+
655
+			case PEAR_ERROR_CALLBACK:
656
+				$setmode = $mode;
657
+				// class/object method callback
658
+				if (is_callable($options)) {
659
+					$setoptions = $options;
660
+				} else {
661
+					trigger_error("invalid error callback", E_USER_WARNING);
662
+				}
663
+				break;
664
+
665
+			default:
666
+				trigger_error("invalid error mode", E_USER_WARNING);
667
+				break;
668
+		}
669
+		return true;
670
+	}
671
+
672
+	// {{{ pushErrorHandling()
673
+
674
+	/**
675
+	 * Push a new error handler on top of the error handler options stack. With this
676
+	 * you can easily override the actual error handler for some code and restore
677
+	 * it later with popErrorHandling.
678
+	 *
679
+	 * @param mixed $mode (same as setErrorHandling)
680
+	 * @param mixed $options (same as setErrorHandling)
681
+	 *
682
+	 * @return bool Always true
683
+	 *
684
+	 * @see PEAR::setErrorHandling
685
+	 */
686
+	function pushErrorHandling($mode, $options = null)
687
+	{
688
+		$stack = &$GLOBALS['_PEAR_error_handler_stack'];
689
+		if (isset($this) && is_a($this, 'PEAR')) {
690
+			$def_mode    = &$this->_default_error_mode;
691
+			$def_options = &$this->_default_error_options;
692
+		} else {
693
+			$def_mode    = &$GLOBALS['_PEAR_default_error_mode'];
694
+			$def_options = &$GLOBALS['_PEAR_default_error_options'];
695
+		}
696
+		$stack[] = array($def_mode, $def_options);
697
+
698
+		if (isset($this) && is_a($this, 'PEAR')) {
699
+			$this->setErrorHandling($mode, $options);
700
+		} else {
701
+			PEAR::setErrorHandling($mode, $options);
702
+		}
703
+		$stack[] = array($mode, $options);
704
+		return true;
705
+	}
706
+
707
+	// }}}
708
+	// {{{ popErrorHandling()
709
+
710
+	/**
711
+	 * Pop the last error handler used
712
+	 *
713
+	 * @return bool Always true
714
+	 *
715
+	 * @see PEAR::pushErrorHandling
716
+	 */
717
+	function popErrorHandling()
718
+	{
719
+		$stack = &$GLOBALS['_PEAR_error_handler_stack'];
720
+		array_pop($stack);
721
+		list($mode, $options) = $stack[sizeof($stack) - 1];
722
+		array_pop($stack);
723
+		if (isset($this) && is_a($this, 'PEAR')) {
724
+			$this->setErrorHandling($mode, $options);
725
+		} else {
726
+			PEAR::setErrorHandling($mode, $options);
727
+		}
728
+		return true;
729
+	}
730
+
731
+	// }}}
732
+	// {{{ loadExtension()
733
+
734
+	/**
735
+	 * OS independant PHP extension load. Remember to take care
736
+	 * on the correct extension name for case sensitive OSes.
737
+	 *
738
+	 * @param string $ext The extension name
739
+	 * @return bool Success or not on the dl() call
740
+	 */
741
+	function loadExtension($ext)
742
+	{
743
+		if (!extension_loaded($ext)) {
744
+			// if either returns true dl() will produce a FATAL error, stop that
745
+			if ((ini_get('enable_dl') != 1) || (ini_get('safe_mode') == 1)) {
746
+				return false;
747
+			}
748
+			if (OS_WINDOWS) {
749
+				$suffix = '.dll';
750
+			} elseif (PHP_OS == 'HP-UX') {
751
+				$suffix = '.sl';
752
+			} elseif (PHP_OS == 'AIX') {
753
+				$suffix = '.a';
754
+			} elseif (PHP_OS == 'OSX') {
755
+				$suffix = '.bundle';
756
+			} else {
757
+				$suffix = '.so';
758
+			}
759
+			return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix);
760
+		}
761
+		return true;
762
+	}
763
+
764
+	// }}}
765 765
 }
766 766
 
767 767
 // {{{ _PEAR_call_destructors()
768 768
 
769 769
 function _PEAR_call_destructors()
770 770
 {
771
-    global $_PEAR_destructor_object_list;
772
-    if (is_array($_PEAR_destructor_object_list) &&
773
-        sizeof($_PEAR_destructor_object_list))
774
-    {
775
-        reset($_PEAR_destructor_object_list);
776
-        if (PEAR::getStaticProperty('PEAR', 'destructlifo')) {
777
-            $_PEAR_destructor_object_list = array_reverse($_PEAR_destructor_object_list);
778
-        }
779
-        while (list($k, $objref) = each($_PEAR_destructor_object_list)) {
780
-            $classname = get_class($objref);
781
-            while ($classname) {
782
-                $destructor = "_$classname";
783
-                if (method_exists($objref, $destructor)) {
784
-                    $objref->$destructor();
785
-                    break;
786
-                } else {
787
-                    $classname = get_parent_class($classname);
788
-                }
789
-            }
790
-        }
791
-        // Empty the object list to ensure that destructors are
792
-        // not called more than once.
793
-        $_PEAR_destructor_object_list = array();
794
-    }
795
-
796
-    // Now call the shutdown functions
797
-    if (is_array($GLOBALS['_PEAR_shutdown_funcs']) AND !empty($GLOBALS['_PEAR_shutdown_funcs'])) {
798
-        foreach ($GLOBALS['_PEAR_shutdown_funcs'] as $value) {
799
-            call_user_func_array($value[0], $value[1]);
800
-        }
801
-    }
771
+	global $_PEAR_destructor_object_list;
772
+	if (is_array($_PEAR_destructor_object_list) &&
773
+		sizeof($_PEAR_destructor_object_list))
774
+	{
775
+		reset($_PEAR_destructor_object_list);
776
+		if (PEAR::getStaticProperty('PEAR', 'destructlifo')) {
777
+			$_PEAR_destructor_object_list = array_reverse($_PEAR_destructor_object_list);
778
+		}
779
+		while (list($k, $objref) = each($_PEAR_destructor_object_list)) {
780
+			$classname = get_class($objref);
781
+			while ($classname) {
782
+				$destructor = "_$classname";
783
+				if (method_exists($objref, $destructor)) {
784
+					$objref->$destructor();
785
+					break;
786
+				} else {
787
+					$classname = get_parent_class($classname);
788
+				}
789
+			}
790
+		}
791
+		// Empty the object list to ensure that destructors are
792
+		// not called more than once.
793
+		$_PEAR_destructor_object_list = array();
794
+	}
795
+
796
+	// Now call the shutdown functions
797
+	if (is_array($GLOBALS['_PEAR_shutdown_funcs']) AND !empty($GLOBALS['_PEAR_shutdown_funcs'])) {
798
+		foreach ($GLOBALS['_PEAR_shutdown_funcs'] as $value) {
799
+			call_user_func_array($value[0], $value[1]);
800
+		}
801
+	}
802 802
 }
803 803
 
804 804
 // }}}
@@ -821,281 +821,281 @@  discard block
 block discarded – undo
821 821
  */
822 822
 class PEAR_Error
823 823
 {
824
-    // {{{ properties
825
-
826
-    var $error_message_prefix = '';
827
-    var $mode                 = PEAR_ERROR_RETURN;
828
-    var $level                = E_USER_NOTICE;
829
-    var $code                 = -1;
830
-    var $message              = '';
831
-    var $userinfo             = '';
832
-    var $backtrace            = null;
833
-
834
-    // }}}
835
-    // {{{ constructor
836
-
837
-    /**
838
-     * PEAR_Error constructor
839
-     *
840
-     * @param string $message  message
841
-     *
842
-     * @param int $code     (optional) error code
843
-     *
844
-     * @param int $mode     (optional) error mode, one of: PEAR_ERROR_RETURN,
845
-     * PEAR_ERROR_PRINT, PEAR_ERROR_DIE, PEAR_ERROR_TRIGGER,
846
-     * PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION
847
-     *
848
-     * @param mixed $options   (optional) error level, _OR_ in the case of
849
-     * PEAR_ERROR_CALLBACK, the callback function or object/method
850
-     * tuple.
851
-     *
852
-     * @param string $userinfo (optional) additional user/debug info
853
-     *
854
-     * @access public
855
-     *
856
-     */
857
-    function PEAR_Error($message = 'unknown error', $code = null,
858
-                        $mode = null, $options = null, $userinfo = null)
859
-    {
860
-        if ($mode === null) {
861
-            $mode = PEAR_ERROR_RETURN;
862
-        }
863
-        $this->message   = $message;
864
-        $this->code      = $code;
865
-        $this->mode      = $mode;
866
-        $this->userinfo  = $userinfo;
867
-        if (!PEAR::getStaticProperty('PEAR_Error', 'skiptrace')) {
868
-            $this->backtrace = debug_backtrace();
869
-            if (isset($this->backtrace[0]) && isset($this->backtrace[0]['object'])) {
870
-                unset($this->backtrace[0]['object']);
871
-            }
872
-        }
873
-        if ($mode & PEAR_ERROR_CALLBACK) {
874
-            $this->level = E_USER_NOTICE;
875
-            $this->callback = $options;
876
-        } else {
877
-            if ($options === null) {
878
-                $options = E_USER_NOTICE;
879
-            }
880
-            $this->level = $options;
881
-            $this->callback = null;
882
-        }
883
-        if ($this->mode & PEAR_ERROR_PRINT) {
884
-            if (is_null($options) || is_int($options)) {
885
-                $format = "%s";
886
-            } else {
887
-                $format = $options;
888
-            }
889
-            printf($format, $this->getMessage());
890
-        }
891
-        if ($this->mode & PEAR_ERROR_TRIGGER) {
892
-            trigger_error($this->getMessage(), $this->level);
893
-        }
894
-        if ($this->mode & PEAR_ERROR_DIE) {
895
-            $msg = $this->getMessage();
896
-            if (is_null($options) || is_int($options)) {
897
-                $format = "%s";
898
-                if (substr($msg, -1) != "\n") {
899
-                    $msg .= "\n";
900
-                }
901
-            } else {
902
-                $format = $options;
903
-            }
904
-            die(sprintf($format, $msg));
905
-        }
906
-        if ($this->mode & PEAR_ERROR_CALLBACK) {
907
-            if (is_callable($this->callback)) {
908
-                call_user_func($this->callback, $this);
909
-            }
910
-        }
911
-        if ($this->mode & PEAR_ERROR_EXCEPTION) {
912
-            trigger_error("PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_Exception for exceptions", E_USER_WARNING);
913
-            eval('$e = new Exception($this->message, $this->code);throw($e);');
914
-        }
915
-    }
916
-
917
-    // }}}
918
-    // {{{ getMode()
919
-
920
-    /**
921
-     * Get the error mode from an error object.
922
-     *
923
-     * @return int error mode
924
-     * @access public
925
-     */
926
-    function getMode() {
927
-        return $this->mode;
928
-    }
929
-
930
-    // }}}
931
-    // {{{ getCallback()
932
-
933
-    /**
934
-     * Get the callback function/method from an error object.
935
-     *
936
-     * @return mixed callback function or object/method array
937
-     * @access public
938
-     */
939
-    function getCallback() {
940
-        return $this->callback;
941
-    }
942
-
943
-    // }}}
944
-    // {{{ getMessage()
945
-
946
-
947
-    /**
948
-     * Get the error message from an error object.
949
-     *
950
-     * @return  string  full error message
951
-     * @access public
952
-     */
953
-    function getMessage()
954
-    {
955
-        return ($this->error_message_prefix . $this->message);
956
-    }
957
-
958
-
959
-    // }}}
960
-    // {{{ getCode()
961
-
962
-    /**
963
-     * Get error code from an error object
964
-     *
965
-     * @return int error code
966
-     * @access public
967
-     */
968
-     function getCode()
969
-     {
970
-        return $this->code;
971
-     }
972
-
973
-    // }}}
974
-    // {{{ getType()
975
-
976
-    /**
977
-     * Get the name of this error/exception.
978
-     *
979
-     * @return string error/exception name (type)
980
-     * @access public
981
-     */
982
-    function getType()
983
-    {
984
-        return get_class($this);
985
-    }
986
-
987
-    // }}}
988
-    // {{{ getUserInfo()
989
-
990
-    /**
991
-     * Get additional user-supplied information.
992
-     *
993
-     * @return string user-supplied information
994
-     * @access public
995
-     */
996
-    function getUserInfo()
997
-    {
998
-        return $this->userinfo;
999
-    }
1000
-
1001
-    // }}}
1002
-    // {{{ getDebugInfo()
1003
-
1004
-    /**
1005
-     * Get additional debug information supplied by the application.
1006
-     *
1007
-     * @return string debug information
1008
-     * @access public
1009
-     */
1010
-    function getDebugInfo()
1011
-    {
1012
-        return $this->getUserInfo();
1013
-    }
1014
-
1015
-    // }}}
1016
-    // {{{ getBacktrace()
1017
-
1018
-    /**
1019
-     * Get the call backtrace from where the error was generated.
1020
-     * Supported with PHP 4.3.0 or newer.
1021
-     *
1022
-     * @param int $frame (optional) what frame to fetch
1023
-     * @return array Backtrace, or NULL if not available.
1024
-     * @access public
1025
-     */
1026
-    function getBacktrace($frame = null)
1027
-    {
1028
-        if (defined('PEAR_IGNORE_BACKTRACE')) {
1029
-            return null;
1030
-        }
1031
-        if ($frame === null) {
1032
-            return $this->backtrace;
1033
-        }
1034
-        return $this->backtrace[$frame];
1035
-    }
1036
-
1037
-    // }}}
1038
-    // {{{ addUserInfo()
1039
-
1040
-    function addUserInfo($info)
1041
-    {
1042
-        if (empty($this->userinfo)) {
1043
-            $this->userinfo = $info;
1044
-        } else {
1045
-            $this->userinfo .= " ** $info";
1046
-        }
1047
-    }
1048
-
1049
-    // }}}
1050
-    // {{{ toString()
1051
-
1052
-    /**
1053
-     * Make a string representation of this object.
1054
-     *
1055
-     * @return string a string with an object summary
1056
-     * @access public
1057
-     */
1058
-    function toString() {
1059
-        $modes = array();
1060
-        $levels = array(E_USER_NOTICE  => 'notice',
1061
-                        E_USER_WARNING => 'warning',
1062
-                        E_USER_ERROR   => 'error');
1063
-        if ($this->mode & PEAR_ERROR_CALLBACK) {
1064
-            if (is_array($this->callback)) {
1065
-                $callback = (is_object($this->callback[0]) ?
1066
-                    strtolower(get_class($this->callback[0])) :
1067
-                    $this->callback[0]) . '::' .
1068
-                    $this->callback[1];
1069
-            } else {
1070
-                $callback = $this->callback;
1071
-            }
1072
-            return sprintf('[%s: message="%s" code=%d mode=callback '.
1073
-                           'callback=%s prefix="%s" info="%s"]',
1074
-                           strtolower(get_class($this)), $this->message, $this->code,
1075
-                           $callback, $this->error_message_prefix,
1076
-                           $this->userinfo);
1077
-        }
1078
-        if ($this->mode & PEAR_ERROR_PRINT) {
1079
-            $modes[] = 'print';
1080
-        }
1081
-        if ($this->mode & PEAR_ERROR_TRIGGER) {
1082
-            $modes[] = 'trigger';
1083
-        }
1084
-        if ($this->mode & PEAR_ERROR_DIE) {
1085
-            $modes[] = 'die';
1086
-        }
1087
-        if ($this->mode & PEAR_ERROR_RETURN) {
1088
-            $modes[] = 'return';
1089
-        }
1090
-        return sprintf('[%s: message="%s" code=%d mode=%s level=%s '.
1091
-                       'prefix="%s" info="%s"]',
1092
-                       strtolower(get_class($this)), $this->message, $this->code,
1093
-                       implode("|", $modes), $levels[$this->level],
1094
-                       $this->error_message_prefix,
1095
-                       $this->userinfo);
1096
-    }
1097
-
1098
-    // }}}
824
+	// {{{ properties
825
+
826
+	var $error_message_prefix = '';
827
+	var $mode                 = PEAR_ERROR_RETURN;
828
+	var $level                = E_USER_NOTICE;
829
+	var $code                 = -1;
830
+	var $message              = '';
831
+	var $userinfo             = '';
832
+	var $backtrace            = null;
833
+
834
+	// }}}
835
+	// {{{ constructor
836
+
837
+	/**
838
+	 * PEAR_Error constructor
839
+	 *
840
+	 * @param string $message  message
841
+	 *
842
+	 * @param int $code     (optional) error code
843
+	 *
844
+	 * @param int $mode     (optional) error mode, one of: PEAR_ERROR_RETURN,
845
+	 * PEAR_ERROR_PRINT, PEAR_ERROR_DIE, PEAR_ERROR_TRIGGER,
846
+	 * PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION
847
+	 *
848
+	 * @param mixed $options   (optional) error level, _OR_ in the case of
849
+	 * PEAR_ERROR_CALLBACK, the callback function or object/method
850
+	 * tuple.
851
+	 *
852
+	 * @param string $userinfo (optional) additional user/debug info
853
+	 *
854
+	 * @access public
855
+	 *
856
+	 */
857
+	function PEAR_Error($message = 'unknown error', $code = null,
858
+						$mode = null, $options = null, $userinfo = null)
859
+	{
860
+		if ($mode === null) {
861
+			$mode = PEAR_ERROR_RETURN;
862
+		}
863
+		$this->message   = $message;
864
+		$this->code      = $code;
865
+		$this->mode      = $mode;
866
+		$this->userinfo  = $userinfo;
867
+		if (!PEAR::getStaticProperty('PEAR_Error', 'skiptrace')) {
868
+			$this->backtrace = debug_backtrace();
869
+			if (isset($this->backtrace[0]) && isset($this->backtrace[0]['object'])) {
870
+				unset($this->backtrace[0]['object']);
871
+			}
872
+		}
873
+		if ($mode & PEAR_ERROR_CALLBACK) {
874
+			$this->level = E_USER_NOTICE;
875
+			$this->callback = $options;
876
+		} else {
877
+			if ($options === null) {
878
+				$options = E_USER_NOTICE;
879
+			}
880
+			$this->level = $options;
881
+			$this->callback = null;
882
+		}
883
+		if ($this->mode & PEAR_ERROR_PRINT) {
884
+			if (is_null($options) || is_int($options)) {
885
+				$format = "%s";
886
+			} else {
887
+				$format = $options;
888
+			}
889
+			printf($format, $this->getMessage());
890
+		}
891
+		if ($this->mode & PEAR_ERROR_TRIGGER) {
892
+			trigger_error($this->getMessage(), $this->level);
893
+		}
894
+		if ($this->mode & PEAR_ERROR_DIE) {
895
+			$msg = $this->getMessage();
896
+			if (is_null($options) || is_int($options)) {
897
+				$format = "%s";
898
+				if (substr($msg, -1) != "\n") {
899
+					$msg .= "\n";
900
+				}
901
+			} else {
902
+				$format = $options;
903
+			}
904
+			die(sprintf($format, $msg));
905
+		}
906
+		if ($this->mode & PEAR_ERROR_CALLBACK) {
907
+			if (is_callable($this->callback)) {
908
+				call_user_func($this->callback, $this);
909
+			}
910
+		}
911
+		if ($this->mode & PEAR_ERROR_EXCEPTION) {
912
+			trigger_error("PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_Exception for exceptions", E_USER_WARNING);
913
+			eval('$e = new Exception($this->message, $this->code);throw($e);');
914
+		}
915
+	}
916
+
917
+	// }}}
918
+	// {{{ getMode()
919
+
920
+	/**
921
+	 * Get the error mode from an error object.
922
+	 *
923
+	 * @return int error mode
924
+	 * @access public
925
+	 */
926
+	function getMode() {
927
+		return $this->mode;
928
+	}
929
+
930
+	// }}}
931
+	// {{{ getCallback()
932
+
933
+	/**
934
+	 * Get the callback function/method from an error object.
935
+	 *
936
+	 * @return mixed callback function or object/method array
937
+	 * @access public
938
+	 */
939
+	function getCallback() {
940
+		return $this->callback;
941
+	}
942
+
943
+	// }}}
944
+	// {{{ getMessage()
945
+
946
+
947
+	/**
948
+	 * Get the error message from an error object.
949
+	 *
950
+	 * @return  string  full error message
951
+	 * @access public
952
+	 */
953
+	function getMessage()
954
+	{
955
+		return ($this->error_message_prefix . $this->message);
956
+	}
957
+
958
+
959
+	// }}}
960
+	// {{{ getCode()
961
+
962
+	/**
963
+	 * Get error code from an error object
964
+	 *
965
+	 * @return int error code
966
+	 * @access public
967
+	 */
968
+	 function getCode()
969
+	 {
970
+		return $this->code;
971
+	 }
972
+
973
+	// }}}
974
+	// {{{ getType()
975
+
976
+	/**
977
+	 * Get the name of this error/exception.
978
+	 *
979
+	 * @return string error/exception name (type)
980
+	 * @access public
981
+	 */
982
+	function getType()
983
+	{
984
+		return get_class($this);
985
+	}
986
+
987
+	// }}}
988
+	// {{{ getUserInfo()
989
+
990
+	/**
991
+	 * Get additional user-supplied information.
992
+	 *
993
+	 * @return string user-supplied information
994
+	 * @access public
995
+	 */
996
+	function getUserInfo()
997
+	{
998
+		return $this->userinfo;
999
+	}
1000
+
1001
+	// }}}
1002
+	// {{{ getDebugInfo()
1003
+
1004
+	/**
1005
+	 * Get additional debug information supplied by the application.
1006
+	 *
1007
+	 * @return string debug information
1008
+	 * @access public
1009
+	 */
1010
+	function getDebugInfo()
1011
+	{
1012
+		return $this->getUserInfo();
1013
+	}
1014
+
1015
+	// }}}
1016
+	// {{{ getBacktrace()
1017
+
1018
+	/**
1019
+	 * Get the call backtrace from where the error was generated.
1020
+	 * Supported with PHP 4.3.0 or newer.
1021
+	 *
1022
+	 * @param int $frame (optional) what frame to fetch
1023
+	 * @return array Backtrace, or NULL if not available.
1024
+	 * @access public
1025
+	 */
1026
+	function getBacktrace($frame = null)
1027
+	{
1028
+		if (defined('PEAR_IGNORE_BACKTRACE')) {
1029
+			return null;
1030
+		}
1031
+		if ($frame === null) {
1032
+			return $this->backtrace;
1033
+		}
1034
+		return $this->backtrace[$frame];
1035
+	}
1036
+
1037
+	// }}}
1038
+	// {{{ addUserInfo()
1039
+
1040
+	function addUserInfo($info)
1041
+	{
1042
+		if (empty($this->userinfo)) {
1043
+			$this->userinfo = $info;
1044
+		} else {
1045
+			$this->userinfo .= " ** $info";
1046
+		}
1047
+	}
1048
+
1049
+	// }}}
1050
+	// {{{ toString()
1051
+
1052
+	/**
1053
+	 * Make a string representation of this object.
1054
+	 *
1055
+	 * @return string a string with an object summary
1056
+	 * @access public
1057
+	 */
1058
+	function toString() {
1059
+		$modes = array();
1060
+		$levels = array(E_USER_NOTICE  => 'notice',
1061
+						E_USER_WARNING => 'warning',
1062
+						E_USER_ERROR   => 'error');
1063
+		if ($this->mode & PEAR_ERROR_CALLBACK) {
1064
+			if (is_array($this->callback)) {
1065
+				$callback = (is_object($this->callback[0]) ?
1066
+					strtolower(get_class($this->callback[0])) :
1067
+					$this->callback[0]) . '::' .
1068
+					$this->callback[1];
1069
+			} else {
1070
+				$callback = $this->callback;
1071
+			}
1072
+			return sprintf('[%s: message="%s" code=%d mode=callback '.
1073
+						   'callback=%s prefix="%s" info="%s"]',
1074
+						   strtolower(get_class($this)), $this->message, $this->code,
1075
+						   $callback, $this->error_message_prefix,
1076
+						   $this->userinfo);
1077
+		}
1078
+		if ($this->mode & PEAR_ERROR_PRINT) {
1079
+			$modes[] = 'print';
1080
+		}
1081
+		if ($this->mode & PEAR_ERROR_TRIGGER) {
1082
+			$modes[] = 'trigger';
1083
+		}
1084
+		if ($this->mode & PEAR_ERROR_DIE) {
1085
+			$modes[] = 'die';
1086
+		}
1087
+		if ($this->mode & PEAR_ERROR_RETURN) {
1088
+			$modes[] = 'return';
1089
+		}
1090
+		return sprintf('[%s: message="%s" code=%d mode=%s level=%s '.
1091
+					   'prefix="%s" info="%s"]',
1092
+					   strtolower(get_class($this)), $this->message, $this->code,
1093
+					   implode("|", $modes), $levels[$this->level],
1094
+					   $this->error_message_prefix,
1095
+					   $this->userinfo);
1096
+	}
1097
+
1098
+	// }}}
1099 1099
 }
1100 1100
 
1101 1101
 /*
Please login to merge, or discard this patch.
Spacing   +15 added lines, -16 removed lines patch added patch discarded remove patch
@@ -28,11 +28,11 @@  discard block
 block discarded – undo
28 28
 /**#@+
29 29
  * ERROR constants
30 30
  */
31
-define('PEAR_ERROR_RETURN',     1);
32
-define('PEAR_ERROR_PRINT',      2);
33
-define('PEAR_ERROR_TRIGGER',    4);
34
-define('PEAR_ERROR_DIE',        8);
35
-define('PEAR_ERROR_CALLBACK',  16);
31
+define('PEAR_ERROR_RETURN', 1);
32
+define('PEAR_ERROR_PRINT', 2);
33
+define('PEAR_ERROR_TRIGGER', 4);
34
+define('PEAR_ERROR_DIE', 8);
35
+define('PEAR_ERROR_CALLBACK', 16);
36 36
 /**
37 37
  * WARNING: obsolete
38 38
  * @deprecated
@@ -44,12 +44,12 @@  discard block
 block discarded – undo
44 44
 
45 45
 if (substr(PHP_OS, 0, 3) == 'WIN') {
46 46
     define('OS_WINDOWS', true);
47
-    define('OS_UNIX',    false);
48
-    define('PEAR_OS',    'Windows');
47
+    define('OS_UNIX', false);
48
+    define('PEAR_OS', 'Windows');
49 49
 } else {
50 50
     define('OS_WINDOWS', false);
51
-    define('OS_UNIX',    true);
52
-    define('PEAR_OS',    'Unix'); // blatant assumption
51
+    define('OS_UNIX', true);
52
+    define('PEAR_OS', 'Unix'); // blatant assumption
53 53
 }
54 54
 
55 55
 // instant backwards compatibility
@@ -460,9 +460,9 @@  discard block
 block discarded – undo
460 460
             // $error_code is a non-empty array here;
461 461
             // we walk through it trying to unset all
462 462
             // values
463
-            foreach($error_code as $key => $error) {
463
+            foreach ($error_code as $key => $error) {
464 464
                 if ($this->_checkDelExpect($error)) {
465
-                    $deleted =  true;
465
+                    $deleted = true;
466 466
                 } else {
467 467
                     $deleted = false;
468 468
                 }
@@ -756,7 +756,7 @@  discard block
 block discarded – undo
756 756
             } else {
757 757
                 $suffix = '.so';
758 758
             }
759
-            return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix);
759
+            return @dl('php_' . $ext . $suffix) || @dl($ext . $suffix);
760 760
         }
761 761
         return true;
762 762
     }
@@ -1063,13 +1063,12 @@  discard block
 block discarded – undo
1063 1063
         if ($this->mode & PEAR_ERROR_CALLBACK) {
1064 1064
             if (is_array($this->callback)) {
1065 1065
                 $callback = (is_object($this->callback[0]) ?
1066
-                    strtolower(get_class($this->callback[0])) :
1067
-                    $this->callback[0]) . '::' .
1066
+                    strtolower(get_class($this->callback[0])) : $this->callback[0]) . '::' .
1068 1067
                     $this->callback[1];
1069 1068
             } else {
1070 1069
                 $callback = $this->callback;
1071 1070
             }
1072
-            return sprintf('[%s: message="%s" code=%d mode=callback '.
1071
+            return sprintf('[%s: message="%s" code=%d mode=callback ' .
1073 1072
                            'callback=%s prefix="%s" info="%s"]',
1074 1073
                            strtolower(get_class($this)), $this->message, $this->code,
1075 1074
                            $callback, $this->error_message_prefix,
@@ -1087,7 +1086,7 @@  discard block
 block discarded – undo
1087 1086
         if ($this->mode & PEAR_ERROR_RETURN) {
1088 1087
             $modes[] = 'return';
1089 1088
         }
1090
-        return sprintf('[%s: message="%s" code=%d mode=%s level=%s '.
1089
+        return sprintf('[%s: message="%s" code=%d mode=%s level=%s ' .
1091 1090
                        'prefix="%s" info="%s"]',
1092 1091
                        strtolower(get_class($this)), $this->message, $this->code,
1093 1092
                        implode("|", $modes), $levels[$this->level],
Please login to merge, or discard this patch.
libs/idna_convert/example.php 2 patches
Indentation   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -8,24 +8,24 @@
 block discarded – undo
8 8
 
9 9
 $version_select = '<select size="1" name="idn_version"><option value="2003">IDNA 2003</option><option value="2008"';
10 10
 if ($idn_version == 2008) {
11
-    $version_select .= ' selected="selected"';
11
+	$version_select .= ' selected="selected"';
12 12
 }
13 13
 $version_select .= '>IDNA 2008</option></select>';
14 14
 
15 15
 if (isset($_REQUEST['encode'])) {
16
-    $decoded = isset($_REQUEST['decoded']) ? stripslashes($_REQUEST['decoded']) : '';
17
-    $encoded = $IDN->encode($decoded);
16
+	$decoded = isset($_REQUEST['decoded']) ? stripslashes($_REQUEST['decoded']) : '';
17
+	$encoded = $IDN->encode($decoded);
18 18
 }
19 19
 if (isset($_REQUEST['decode'])) {
20
-    $encoded = isset($_REQUEST['encoded']) ? stripslashes($_REQUEST['encoded']) : '';
21
-    $decoded = $IDN->decode($encoded);
20
+	$encoded = isset($_REQUEST['encoded']) ? stripslashes($_REQUEST['encoded']) : '';
21
+	$decoded = $IDN->decode($encoded);
22 22
 }
23 23
 $lang = 'en';
24 24
 if (isset($_REQUEST['lang'])) {
25
-    if ('de' == $_REQUEST['lang'] || 'en' == $_REQUEST['lang']) {
26
-        $lang = $_REQUEST['lang'];
27
-        $add .= '<input type="hidden" name="lang" value="'.$lang.'" />'."\n";
28
-    }
25
+	if ('de' == $_REQUEST['lang'] || 'en' == $_REQUEST['lang']) {
26
+		$lang = $_REQUEST['lang'];
27
+		$add .= '<input type="hidden" name="lang" value="'.$lang.'" />'."\n";
28
+	}
29 29
 }
30 30
 ?>
31 31
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -24,7 +24,7 @@
 block discarded – undo
24 24
 if (isset($_REQUEST['lang'])) {
25 25
     if ('de' == $_REQUEST['lang'] || 'en' == $_REQUEST['lang']) {
26 26
         $lang = $_REQUEST['lang'];
27
-        $add .= '<input type="hidden" name="lang" value="'.$lang.'" />'."\n";
27
+        $add .= '<input type="hidden" name="lang" value="' . $lang . '" />' . "\n";
28 28
     }
29 29
 }
30 30
 ?>
Please login to merge, or discard this patch.