Verzeichnisstruktur phpBB-3.2.0
- Veröffentlicht
- 06.01.2017
So funktioniert es
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
Utils.php
001 <?php
002 namespace GuzzleHttp;
003
004 use GuzzleHttp\Ring\Client\CurlHandler;
005 use GuzzleHttp\Ring\Client\CurlMultiHandler;
006 use GuzzleHttp\Ring\Client\StreamHandler;
007 use GuzzleHttp\Ring\Client\Middleware;
008
009 /**
010 * Utility methods used throughout Guzzle.
011 */
012 final class Utils
013 {
014 /**
015 * Gets a value from an array using a path syntax to retrieve nested data.
016 *
017 * This method does not allow for keys that contain "/". You must traverse
018 * the array manually or using something more advanced like JMESPath to
019 * work with keys that contain "/".
020 *
021 * // Get the bar key of a set of nested arrays.
022 * // This is equivalent to $collection['foo']['baz']['bar'] but won't
023 * // throw warnings for missing keys.
024 * GuzzleHttp\get_path($data, 'foo/baz/bar');
025 *
026 * @param array $data Data to retrieve values from
027 * @param string $path Path to traverse and retrieve a value from
028 *
029 * @return mixed|null
030 */
031 public static function getPath($data, $path)
032 {
033 $path = explode('/', $path);
034
035 while (null !== ($part = array_shift($path))) {
036 if (!is_array($data) || !isset($data[$part])) {
037 return null;
038 }
039 $data = $data[$part];
040 }
041
042 return $data;
043 }
044
045 /**
046 * Set a value in a nested array key. Keys will be created as needed to set
047 * the value.
048 *
049 * This function does not support keys that contain "/" or "[]" characters
050 * because these are special tokens used when traversing the data structure.
051 * A value may be prepended to an existing array by using "[]" as the final
052 * key of a path.
053 *
054 * GuzzleHttp\get_path($data, 'foo/baz'); // null
055 * GuzzleHttp\set_path($data, 'foo/baz/[]', 'a');
056 * GuzzleHttp\set_path($data, 'foo/baz/[]', 'b');
057 * GuzzleHttp\get_path($data, 'foo/baz');
058 * // Returns ['a', 'b']
059 *
060 * @param array $data Data to modify by reference
061 * @param string $path Path to set
062 * @param mixed $value Value to set at the key
063 *
064 * @throws \RuntimeException when trying to setPath using a nested path
065 * that travels through a scalar value.
066 */
067 public static function setPath(&$data, $path, $value)
068 {
069 $queue = explode('/', $path);
070 // Optimization for simple sets.
071 if (count($queue) === 1) {
072 $data[$path] = $value;
073 return;
074 }
075
076 $current =& $data;
077 while (null !== ($key = array_shift($queue))) {
078 if (!is_array($current)) {
079 throw new \RuntimeException("Trying to setPath {$path}, but "
080 . "{$key} is set and is not an array");
081 } elseif (!$queue) {
082 if ($key == '[]') {
083 $current[] = $value;
084 } else {
085 $current[$key] = $value;
086 }
087 } elseif (isset($current[$key])) {
088 $current =& $current[$key];
089 } else {
090 $current[$key] = [];
091 $current =& $current[$key];
092 }
093 }
094 }
095
096 /**
097 * Expands a URI template
098 *
099 * @param string $template URI template
100 * @param array $variables Template variables
101 *
102 * @return string
103 */
104 public static function uriTemplate($template, array $variables)
105 {
106 if (function_exists('\\uri_template')) {
107 return \uri_template($template, $variables);
108 }
109
110 static $uriTemplate;
111 if (!$uriTemplate) {
112 $uriTemplate = new UriTemplate();
113 }
114
115 return $uriTemplate->expand($template, $variables);
116 }
117
118 /**
119 * Wrapper for JSON decode that implements error detection with helpful
120 * error messages.
121 *
122 * @param string $json JSON data to parse
123 * @param bool $assoc When true, returned objects will be converted
124 * into associative arrays.
125 * @param int $depth User specified recursion depth.
126 * @param int $options Bitmask of JSON decode options.
127 *
128 * @return mixed
129 * @throws \InvalidArgumentException if the JSON cannot be parsed.
130 * @link http://www.php.net/manual/en/function.json-decode.php
131 */
132 public static function jsonDecode($json, $assoc = false, $depth = 512, $options = 0)
133 {
134 static $jsonErrors = [
135 JSON_ERROR_DEPTH => 'JSON_ERROR_DEPTH - Maximum stack depth exceeded',
136 JSON_ERROR_STATE_MISMATCH => 'JSON_ERROR_STATE_MISMATCH - Underflow or the modes mismatch',
137 JSON_ERROR_CTRL_CHAR => 'JSON_ERROR_CTRL_CHAR - Unexpected control character found',
138 JSON_ERROR_SYNTAX => 'JSON_ERROR_SYNTAX - Syntax error, malformed JSON',
139 JSON_ERROR_UTF8 => 'JSON_ERROR_UTF8 - Malformed UTF-8 characters, possibly incorrectly encoded'
140 ];
141
142 $data = \json_decode($json, $assoc, $depth, $options);
143
144 if (JSON_ERROR_NONE !== json_last_error()) {
145 $last = json_last_error();
146 throw new \InvalidArgumentException(
147 'Unable to parse JSON data: '
148 . (isset($jsonErrors[$last])
149 ? $jsonErrors[$last]
150 : 'Unknown error')
151 );
152 }
153
154 return $data;
155 }
156
157 /**
158 * Get the default User-Agent string to use with Guzzle
159 *
160 * @return string
161 */
162 public static function getDefaultUserAgent()
163 {
164 static $defaultAgent = '';
165 if (!$defaultAgent) {
166 $defaultAgent = 'Guzzle/' . ClientInterface::VERSION;
167 if (extension_loaded('curl')) {
168 $defaultAgent .= ' curl/' . curl_version()['version'];
169 }
170 $defaultAgent .= ' PHP/' . PHP_VERSION;
171 }
172
173 return $defaultAgent;
174 }
175
176 /**
177 * Create a default handler to use based on the environment
178 *
179 * @throws \RuntimeException if no viable Handler is available.
180 */
181 public static function getDefaultHandler()
182 {
183 $default = $future = null;
184
185 if (extension_loaded('curl')) {
186 $config = [
187 'select_timeout' => getenv('GUZZLE_CURL_SELECT_TIMEOUT') ?: 1
188 ];
189 if ($maxHandles = getenv('GUZZLE_CURL_MAX_HANDLES')) {
190 $config['max_handles'] = $maxHandles;
191 }
192 if (function_exists('curl_reset')) {
193 $default = new CurlHandler();
194 $future = new CurlMultiHandler($config);
195 } else {
196 $default = new CurlMultiHandler($config);
197 }
198 }
199
200 if (ini_get('allow_url_fopen')) {
201 $default = !$default
202 ? new StreamHandler()
203 : Middleware::wrapStreaming($default, new StreamHandler());
204 } elseif (!$default) {
205 throw new \RuntimeException('Guzzle requires cURL, the '
206 . 'allow_url_fopen ini setting, or a custom HTTP handler.');
207 }
208
209 return $future ? Middleware::wrapFuture($default, $future) : $default;
210 }
211 }
212