private function prepareMultiPartContent(array $content)
    {
        static $disallowedChars = ["\0", '"', "\r", "\n"];

        $contentParts = [];

        $data = $this->getData();
        if (!empty($data)) {
            foreach ($this->composeFormInputs($data) as $name => $value) {
                $name = str_replace($disallowedChars, '_', $name);
                $contentDisposition = 'Content-Disposition: form-data; name="' . $name . '"';
                $contentParts[] = implode("\r\n", [$contentDisposition, '', $value]);
            }
        }

        // process content parts :
        foreach ($content as $name => $contentParams) {
            $headers = [];
            $name = $this->getNameByAlias($name);
            $name = str_replace($disallowedChars, '_', $name);
            $contentDisposition = 'Content-Disposition: form-data; name="' . $name . '"';
            if (isset($contentParams['fileName'])) {
                $fileName = str_replace($disallowedChars, '_', $contentParams['fileName']);
                $contentDisposition .= '; filename="' . $fileName . '"';
            }
            $headers[] = $contentDisposition;
            if (isset($contentParams['contentType'])) {
                $headers[] = 'Content-Type: ' . $contentParams['contentType'];
            } elseif (isset($contentParams['mimeType'])) {
                $headers[] = 'Content-Type: ' . $contentParams['mimeType'];
            }
            $contentParts[] = implode("\r\n", [implode("\r\n", $headers), '', $contentParams['content']]);
        }

        // generate safe boundary :
        do {
            $boundary = '---------------------' . md5(mt_rand() . microtime());
        } while (preg_grep("/{$boundary}/", $contentParts));

        // add boundary for each part :
        array_walk($contentParts, function (&$part) use ($boundary) {
            $part = "--{$boundary}\r\n{$part}";
        });

        // add final boundary :
        $contentParts[] = "--{$boundary}--";
        $contentParts[] = '';

        $this->getHeaders()->set('content-type', "multipart/form-data; boundary={$boundary}");
        $this->setContent(implode("\r\n", $contentParts));
    }
private function prepareMultiPartContent(array $content)
    {
        static $disallowedChars = ["\0", '"', "\r", "\n"];

        $contentParts = [];

        $data = $this->getData();
        if (!empty($data)) {
            foreach ($this->composeFormInputs($data) as $name => $value) {
                $name = str_replace($disallowedChars, '_', $name);
                $contentDisposition = 'Content-Disposition: form-data; name="' . $name . '"';
                $contentParts[] = implode("\r\n", [$contentDisposition, '', $value]);
            }
        }

        // process content parts :
        foreach ($content as $name => $contentParams) {
            $headers = [];
            $name = $this->getNameByAlias($name);
            $name = str_replace($disallowedChars, '_', $name);
            $contentDisposition = 'Content-Disposition: form-data; name="' . $name . '"';
            if (isset($contentParams['fileName'])) {
                $fileName = str_replace($disallowedChars, '_', $contentParams['fileName']);
                $contentDisposition .= '; filename="' . $fileName . '"';
            }
            $headers[] = $contentDisposition;
            if (isset($contentParams['contentType'])) {
                $headers[] = 'Content-Type: ' . $contentParams['contentType'];
            } elseif (isset($contentParams['mimeType'])) {
                $headers[] = 'Content-Type: ' . $contentParams['mimeType'];
            }
            $contentParts[] = implode("\r\n", [implode("\r\n", $headers), '', $contentParams['content']]);
        }

        // generate safe boundary :
        do {
            $boundary = '---------------------' . md5(mt_rand() . microtime());
        } while (preg_grep("/{$boundary}/", $contentParts));

        // add boundary for each part :
        array_walk($contentParts, function (&$part) use ($boundary) {
            $part = "--{$boundary}\r\n{$part}";
        });

        // add final boundary :
        $contentParts[] = "--{$boundary}--";
        $contentParts[] = '';

        $this->getHeaders()->set('content-type', "multipart/form-data; boundary={$boundary}");
        $this->setContent(implode("\r\n", $contentParts));
    }
private function prepareMultiPartContent ( array $ content ) { static $ disallowedChars = [ "\0" , '"' , "\r" , "\n" ] ; $ contentParts = [ ] ; $ data = $ this -> getData ( ) ; if ( ! empty ( $ data ) ) { foreach ( $ this -> composeFormInputs ( $ data ) as $ name => $ value ) { $ name = str_replace ( $ disallowedChars , '_' , $ name ) ; $ contentDisposition = 'Content-Disposition: form-data; name="' . $ name . '"' ; $ contentParts [ ] = implode ( "\r\n" , [ $ contentDisposition , '' , $ value ] ) ; } } // process content parts : foreach ( $ content as $ name => $ contentParams ) { $ headers = [ ] ; $ name = $ this -> getNameByAlias ( $ name ) ; $ name = str_replace ( $ disallowedChars , '_' , $ name ) ; $ contentDisposition = 'Content-Disposition: form-data; name="' . $ name . '"' ; if ( isset ( $ contentParams [ 'fileName' ] ) ) { $ fileName = str_replace ( $ disallowedChars , '_' , $ contentParams [ 'fileName' ] ) ; $ contentDisposition .= '; filename="' . $ fileName . '"' ; } $ headers [ ] = $ contentDisposition ; if ( isset ( $ contentParams [ 'contentType' ] ) ) { $ headers [ ] = 'Content-Type: ' . $ contentParams [ 'contentType' ] ; } elseif ( isset ( $ contentParams [ 'mimeType' ] ) ) { $ headers [ ] = 'Content-Type: ' . $ contentParams [ 'mimeType' ] ; } $ contentParts [ ] = implode ( "\r\n" , [ implode ( "\r\n" , $ headers ) , '' , $ contentParams [ 'content' ] ] ) ; } // generate safe boundary : do { $ boundary = '---------------------' . md5 ( mt_rand ( ) . microtime ( ) ) ; } while ( preg_grep ( "/{$boundary}/" , $ contentParts ) ) ; // add boundary for each part : array_walk ( $ contentParts , function ( & $ part ) use ( $ boundary ) { $ part = "--{$boundary}\r\n{$part}" ; } ) ; // add final boundary : $ contentParts [ ] = "--{$boundary}--" ; $ contentParts [ ] = '' ; $ this -> getHeaders ( ) -> set ( 'content-type' , "multipart/form-data; boundary={$boundary}" ) ; $ this -> setContent ( implode ( "\r\n" , $ contentParts ) ) ; }
Prepares multi-part content.
@param array $content multi part content.
@see https://tools.ietf.org/html/rfc7578
@see https://tools.ietf.org/html/rfc2616#section-19.5.1 for the Content-Disposition header
@see https://tools.ietf.org/html/rfc6266 for more details on the Content-Disposition header
Prepares multi - part content .