Verzeichnisstruktur phpBB-3.1.0


Veröffentlicht
27.10.2014

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.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

(Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

FileBag.php

Zuletzt modifiziert: 09.10.2024, 12:58 - Dateigröße: 3.94 KiB


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\HttpFoundation;
013   
014  use Symfony\Component\HttpFoundation\File\UploadedFile;
015   
016  /**
017   * FileBag is a container for uploaded files.
018   *
019   * @author Fabien Potencier <fabien@symfony.com>
020   * @author Bulat Shakirzyanov <mallluhuct@gmail.com>
021   *
022   * @api
023   */
024  class FileBag extends ParameterBag
025  {
026      private static $fileKeys = array('error', 'name', 'size', 'tmp_name', 'type');
027   
028      /**
029       * Constructor.
030       *
031       * @param array $parameters An array of HTTP files
032       *
033       * @api
034       */
035      public function __construct(array $parameters = array())
036      {
037          $this->replace($parameters);
038      }
039   
040      /**
041       * {@inheritdoc}
042       *
043       * @api
044       */
045      public function replace(array $files = array())
046      {
047          $this->parameters = array();
048          $this->add($files);
049      }
050   
051      /**
052       * {@inheritdoc}
053       *
054       * @api
055       */
056      public function set($key, $value)
057      {
058          if (!is_array($value) && !$value instanceof UploadedFile) {
059              throw new \InvalidArgumentException('An uploaded file must be an array or an instance of UploadedFile.');
060          }
061   
062          parent::set($key, $this->convertFileInformation($value));
063      }
064   
065      /**
066       * {@inheritdoc}
067       *
068       * @api
069       */
070      public function add(array $files = array())
071      {
072          foreach ($files as $key => $file) {
073              $this->set($key, $file);
074          }
075      }
076   
077      /**
078       * Converts uploaded files to UploadedFile instances.
079       *
080       * @param array|UploadedFile $file A (multi-dimensional) array of uploaded file information
081       *
082       * @return array A (multi-dimensional) array of UploadedFile instances
083       */
084      protected function convertFileInformation($file)
085      {
086          if ($file instanceof UploadedFile) {
087              return $file;
088          }
089   
090          $file = $this->fixPhpFilesArray($file);
091          if (is_array($file)) {
092              $keys = array_keys($file);
093              sort($keys);
094   
095              if ($keys == self::$fileKeys) {
096                  if (UPLOAD_ERR_NO_FILE == $file['error']) {
097                      $file = null;
098                  } else {
099                      $file = new UploadedFile($file['tmp_name'], $file['name'], $file['type'], $file['size'], $file['error']);
100                  }
101              } else {
102                  $file = array_map(array($this, 'convertFileInformation'), $file);
103              }
104          }
105   
106          return $file;
107      }
108   
109      /**
110       * Fixes a malformed PHP $_FILES array.
111       *
112       * PHP has a bug that the format of the $_FILES array differs, depending on
113       * whether the uploaded file fields had normal field names or array-like
114       * field names ("normal" vs. "parent[child]").
115       *
116       * This method fixes the array to look like the "normal" $_FILES array.
117       *
118       * It's safe to pass an already converted array, in which case this method
119       * just returns the original array unmodified.
120       *
121       * @param array $data
122       *
123       * @return array
124       */
125      protected function fixPhpFilesArray($data)
126      {
127          if (!is_array($data)) {
128              return $data;
129          }
130   
131          $keys = array_keys($data);
132          sort($keys);
133   
134          if (self::$fileKeys != $keys || !isset($data['name']) || !is_array($data['name'])) {
135              return $data;
136          }
137   
138          $files = $data;
139          foreach (self::$fileKeys as $k) {
140              unset($files[$k]);
141          }
142   
143          foreach (array_keys($data['name']) as $key) {
144              $files[$key] = $this->fixPhpFilesArray(array(
145                  'error'    => $data['error'][$key],
146                  'name'     => $data['name'][$key],
147                  'type'     => $data['type'][$key],
148                  'tmp_name' => $data['tmp_name'][$key],
149                  'size'     => $data['size'][$key],
150              ));
151          }
152   
153          return $files;
154      }
155  }
156