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 |
Command.php
001 <?php
002
003 /*
004 * This file is part of the Symfony package.
005 *
006 * (c) Fabien Potencier <fabien@symfony.com>
007 *
008 * For the full copyright and license information, please view the LICENSE
009 * file that was distributed with this source code.
010 */
011
012 namespace Symfony\Component\Finder\Shell;
013
014 @trigger_error('The '.__NAMESPACE__.'\Command class is deprecated since version 2.8 and will be removed in 3.0.', E_USER_DEPRECATED);
015
016 /**
017 * @author Jean-François Simon <contact@jfsimon.fr>
018 *
019 * @deprecated since 2.8, to be removed in 3.0.
020 */
021 class Command
022 {
023 /**
024 * @var Command|null
025 */
026 private $parent;
027
028 /**
029 * @var array
030 */
031 private $bits = array();
032
033 /**
034 * @var array
035 */
036 private $labels = array();
037
038 /**
039 * @var \Closure|null
040 */
041 private $errorHandler;
042
043 /**
044 * Constructor.
045 *
046 * @param Command|null $parent Parent command
047 */
048 public function __construct(Command $parent = null)
049 {
050 $this->parent = $parent;
051 }
052
053 /**
054 * Returns command as string.
055 *
056 * @return string
057 */
058 public function __toString()
059 {
060 return $this->join();
061 }
062
063 /**
064 * Creates a new Command instance.
065 *
066 * @param Command|null $parent Parent command
067 *
068 * @return Command New Command instance
069 */
070 public static function create(Command $parent = null)
071 {
072 return new self($parent);
073 }
074
075 /**
076 * Escapes special chars from input.
077 *
078 * @param string $input A string to escape
079 *
080 * @return string The escaped string
081 */
082 public static function escape($input)
083 {
084 return escapeshellcmd($input);
085 }
086
087 /**
088 * Quotes input.
089 *
090 * @param string $input An argument string
091 *
092 * @return string The quoted string
093 */
094 public static function quote($input)
095 {
096 return escapeshellarg($input);
097 }
098
099 /**
100 * Appends a string or a Command instance.
101 *
102 * @param string|Command $bit
103 *
104 * @return Command The current Command instance
105 */
106 public function add($bit)
107 {
108 $this->bits[] = $bit;
109
110 return $this;
111 }
112
113 /**
114 * Prepends a string or a command instance.
115 *
116 * @param string|Command $bit
117 *
118 * @return Command The current Command instance
119 */
120 public function top($bit)
121 {
122 array_unshift($this->bits, $bit);
123
124 foreach ($this->labels as $label => $index) {
125 $this->labels[$label] += 1;
126 }
127
128 return $this;
129 }
130
131 /**
132 * Appends an argument, will be quoted.
133 *
134 * @param string $arg
135 *
136 * @return Command The current Command instance
137 */
138 public function arg($arg)
139 {
140 $this->bits[] = self::quote($arg);
141
142 return $this;
143 }
144
145 /**
146 * Appends escaped special command chars.
147 *
148 * @param string $esc
149 *
150 * @return Command The current Command instance
151 */
152 public function cmd($esc)
153 {
154 $this->bits[] = self::escape($esc);
155
156 return $this;
157 }
158
159 /**
160 * Inserts a labeled command to feed later.
161 *
162 * @param string $label The unique label
163 *
164 * @return Command The current Command instance
165 *
166 * @throws \RuntimeException If label already exists
167 */
168 public function ins($label)
169 {
170 if (isset($this->labels[$label])) {
171 throw new \RuntimeException(sprintf('Label "%s" already exists.', $label));
172 }
173
174 $this->bits[] = self::create($this);
175 $this->labels[$label] = count($this->bits) - 1;
176
177 return $this->bits[$this->labels[$label]];
178 }
179
180 /**
181 * Retrieves a previously labeled command.
182 *
183 * @param string $label
184 *
185 * @return Command The labeled command
186 *
187 * @throws \RuntimeException
188 */
189 public function get($label)
190 {
191 if (!isset($this->labels[$label])) {
192 throw new \RuntimeException(sprintf('Label "%s" does not exist.', $label));
193 }
194
195 return $this->bits[$this->labels[$label]];
196 }
197
198 /**
199 * Returns parent command (if any).
200 *
201 * @return Command Parent command
202 *
203 * @throws \RuntimeException If command has no parent
204 */
205 public function end()
206 {
207 if (null === $this->parent) {
208 throw new \RuntimeException('Calling end on root command doesn\'t make sense.');
209 }
210
211 return $this->parent;
212 }
213
214 /**
215 * Counts bits stored in command.
216 *
217 * @return int The bits count
218 */
219 public function length()
220 {
221 return count($this->bits);
222 }
223
224 /**
225 * @param \Closure $errorHandler
226 *
227 * @return Command
228 */
229 public function setErrorHandler(\Closure $errorHandler)
230 {
231 $this->errorHandler = $errorHandler;
232
233 return $this;
234 }
235
236 /**
237 * @return \Closure|null
238 */
239 public function getErrorHandler()
240 {
241 return $this->errorHandler;
242 }
243
244 /**
245 * Executes current command.
246 *
247 * @return array The command result
248 *
249 * @throws \RuntimeException
250 */
251 public function execute()
252 {
253 if (null === $errorHandler = $this->errorHandler) {
254 exec($this->join(), $output);
255 } else {
256 $process = proc_open($this->join(), array(0 => array('pipe', 'r'), 1 => array('pipe', 'w'), 2 => array('pipe', 'w')), $pipes);
257 $output = preg_split('~(\r\n|\r|\n)~', stream_get_contents($pipes[1]), -1, PREG_SPLIT_NO_EMPTY);
258
259 if ($error = stream_get_contents($pipes[2])) {
260 $errorHandler($error);
261 }
262
263 proc_close($process);
264 }
265
266 return $output ?: array();
267 }
268
269 /**
270 * Joins bits.
271 *
272 * @return string
273 */
274 public function join()
275 {
276 return implode(' ', array_filter(
277 array_map(function ($bit) {
278 return $bit instanceof Command ? $bit->join() : ($bit ?: null);
279 }, $this->bits),
280 function ($bit) { return null !== $bit; }
281 ));
282 }
283
284 /**
285 * Insert a string or a Command instance before the bit at given position $index (index starts from 0).
286 *
287 * @param string|Command $bit
288 * @param int $index
289 *
290 * @return Command The current Command instance
291 */
292 public function addAtIndex($bit, $index)
293 {
294 array_splice($this->bits, $index, 0, $bit instanceof self ? array($bit) : $bit);
295
296 return $this;
297 }
298 }
299