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 |
MultipartBody.php
001 <?php
002 namespace GuzzleHttp\Post;
003
004 use GuzzleHttp\Stream\AppendStream;
005 use GuzzleHttp\Stream\Stream;
006 use GuzzleHttp\Stream\StreamDecoratorTrait;
007 use GuzzleHttp\Stream\StreamInterface;
008
009 /**
010 * Stream that when read returns bytes for a streaming multipart/form-data body
011 */
012 class MultipartBody implements StreamInterface
013 {
014 use StreamDecoratorTrait;
015
016 private $boundary;
017
018 /**
019 * @param array $fields Associative array of field names to values where
020 * each value is a string or array of strings.
021 * @param array $files Associative array of PostFileInterface objects
022 * @param string $boundary You can optionally provide a specific boundary
023 * @throws \InvalidArgumentException
024 */
025 public function __construct(
026 array $fields = [],
027 array $files = [],
028 $boundary = null
029 ) {
030 $this->boundary = $boundary ?: uniqid();
031 $this->stream = $this->createStream($fields, $files);
032 }
033
034 /**
035 * Get the boundary
036 *
037 * @return string
038 */
039 public function getBoundary()
040 {
041 return $this->boundary;
042 }
043
044 public function isWritable()
045 {
046 return false;
047 }
048
049 /**
050 * Get the string needed to transfer a POST field
051 */
052 private function getFieldString($name, $value)
053 {
054 return sprintf(
055 "--%s\r\nContent-Disposition: form-data; name=\"%s\"\r\n\r\n%s\r\n",
056 $this->boundary,
057 $name,
058 $value
059 );
060 }
061
062 /**
063 * Get the headers needed before transferring the content of a POST file
064 */
065 private function getFileHeaders(PostFileInterface $file)
066 {
067 $headers = '';
068 foreach ($file->getHeaders() as $key => $value) {
069 $headers .= "{$key}: {$value}\r\n";
070 }
071
072 return "--{$this->boundary}\r\n" . trim($headers) . "\r\n\r\n";
073 }
074
075 /**
076 * Create the aggregate stream that will be used to upload the POST data
077 */
078 protected function createStream(array $fields, array $files)
079 {
080 $stream = new AppendStream();
081
082 foreach ($fields as $name => $fieldValues) {
083 foreach ((array) $fieldValues as $value) {
084 $stream->addStream(
085 Stream::factory($this->getFieldString($name, $value))
086 );
087 }
088 }
089
090 foreach ($files as $file) {
091
092 if (!$file instanceof PostFileInterface) {
093 throw new \InvalidArgumentException('All POST fields must '
094 . 'implement PostFieldInterface');
095 }
096
097 $stream->addStream(
098 Stream::factory($this->getFileHeaders($file))
099 );
100 $stream->addStream($file->getContent());
101 $stream->addStream(Stream::factory("\r\n"));
102 }
103
104 // Add the trailing boundary with CRLF
105 $stream->addStream(Stream::factory("--{$this->boundary}--\r\n"));
106
107 return $stream;
108 }
109 }
110