コード例 #1
0
 /**
  * Function always use provided $filename. In cases when it's empty, for string content or when name cannot be
  * automatically discovered the $filename will be set to attachment name.
  * If attachment name is not provided, it will be randomly generated.
  * @param resource|string|StreamInterface $content  StreamInterface/resource/string to send
  * @param string                          $filename Optional. Filename of attachment, can't be empty if content is string
  * @param array                           $headers  Optional. Associative array of custom headers
  * @param string                          $name     Optional. Form field name
  * @return $this
  */
 public function addAttachment($content, $filename = '', array $headers = array(), $name = '')
 {
     $uri = null;
     if (!empty($filename)) {
         $uri = $filename;
     } elseif ($content instanceof StreamInterface) {
         $meta = $content->getMetadata('uri');
         if (substr($meta, 0, 6) !== 'php://') {
             $uri = $meta;
         }
     } elseif (is_resource($content)) {
         $meta = stream_get_meta_data($content);
         $uri = $meta['uri'];
     }
     $basename = basename($uri);
     if (empty($basename)) {
         throw new \InvalidArgumentException('File name was not provided and cannot be auto-discovered');
     }
     $name = !empty($name) ? $name : $basename;
     $element = array('contents' => $content, 'name' => $name);
     // always set as defined or else it will be auto-discovered by Guzzle
     if (!empty($filename)) {
         $element['filename'] = $filename;
     }
     if (!empty($headers)) {
         $element['headers'] = $headers;
     }
     $contentKey = null;
     foreach ($headers as $k => $v) {
         if (strtolower($k) == 'content-type') {
             $contentKey = $k;
         }
     }
     if (empty($contentKey)) {
         if (is_string($content)) {
             // Automatically set
             $element['headers']['Content-Type'] = 'application/octet-stream';
         } elseif ($content instanceof StreamInterface) {
             $type = \GuzzleHttp\Psr7\mimetype_from_filename($basename);
             if (!$type) {
                 throw new \InvalidArgumentException('Content-Type header was not provided and cannot be auto-discovered');
             }
         }
     }
     $this->elements[] = $element;
     return $this;
 }
コード例 #2
0
ファイル: cms.php プロジェクト: web-feet/coasterframework
<?php

// Files override to enable hosting secure docs
Route::get('uploads/{file_path}', ['middleware' => ['web', 'auth'], function ($file_path) {
    $file_full_path = storage_path() . '/uploads/' . $file_path;
    if (file_exists($file_full_path)) {
        $size = filesize($file_full_path);
        $type = \GuzzleHttp\Psr7\mimetype_from_filename($file_path);
        return response()->download($file_full_path, null, ['size' => $size, 'Content-Type' => $type], null);
    } else {
        return response('upload not found', 404);
    }
}])->where('file_path', '.*');
// catch all (rest must be cms pages)
Route::any('{other}', ['middleware' => ['web'], 'uses' => 'CoasterCms\\Http\\Controllers\\CmsController@generatePage'])->where('other', '.*');
コード例 #3
0
ファイル: AmazonServer.php プロジェクト: jwdeitch/components
 /**
  * Generate object headers.
  *
  * @param BucketInterface $bucket
  * @param string          $name
  * @param mixed           $source
  * @return array
  */
 private function createHeaders(BucketInterface $bucket, $name, $source)
 {
     if (empty($mimetype = \GuzzleHttp\Psr7\mimetype_from_filename($name))) {
         $mimetype = self::DEFAULT_MIMETYPE;
     }
     $headers = $bucket->getOption('headers', []);
     if (!empty($maxAge = $bucket->getOption('maxAge', 0))) {
         //Shortcut
         $headers['Cache-control'] = 'max-age=' . $bucket->getOption('maxAge', 0) . ', public';
         $headers['Expires'] = gmdate('D, d M Y H:i:s T', time() + $bucket->getOption('maxAge', 0));
     }
     return $headers + ['Content-MD5' => base64_encode(md5_file($this->castFilename($source), true)), 'Content-Type' => $mimetype];
 }
コード例 #4
0
ファイル: run.php プロジェクト: mpcmf/mpcmf-web
 public function prepare(reactRequest $request, reactResponse $response, $output)
 {
     static $serverSoftware, $settings;
     if ($serverSoftware === null) {
         $serverSoftware = 'MPCMF Async PHP ' . phpversion();
         $settings = ['document_root' => APP_ROOT . '/htdocs'];
     }
     $_SERVER = [];
     $now = microtime(true);
     $_SERVER['REQUEST_TIME'] = (int) $now;
     $_SERVER['REQUEST_TIME_FLOAT'] = $now;
     $GLOBALS['MPCMF_START_TIME'] = $now;
     /** @var Uri $requestUrl */
     $requestUrl = $request->getUrl();
     $path = $requestUrl->getPath();
     if ($path === '/favicon.ico') {
         $response->writeHead(404);
         $response->end('FAVICON NOT FOUND! :)');
         //MPCMF_DEBUG && $output->writeln("<info>[CHILD:{$this->port}]</info> Connection closed by favicon catch");
         return false;
     }
     $realpath = realpath($settings['document_root'] . $path);
     if ($realpath !== false && strpos($realpath, $settings['document_root']) !== false && (file_exists($realpath) && !is_dir($realpath))) {
         $response->writeHead(200, ['Content-type' => \GuzzleHttp\Psr7\mimetype_from_filename($realpath), 'Content-length' => filesize($realpath)]);
         $response->end(file_get_contents($realpath));
         //MPCMF_DEBUG && $output->writeln("<info>[CHILD:{$this->port}]</info> Connection closed by static");
         return false;
     }
     $_FILES = [];
     foreach ($request->getFiles() as $filename => $fileData) {
         $tmpname = tempnam('/tmp/mpcmf/', 'upl');
         file_put_contents($tmpname, stream_get_contents($fileData['stream']));
         $_FILES[$filename] = ['name' => $filename, 'type' => $fileData['type'], 'tmp_name' => $tmpname, 'error' => $fileData['error'], 'size' => $fileData['size']];
     }
     $_SERVER['DOCUMENT_ROOT'] = $settings['document_root'];
     $_SERVER['REMOTE_ADDR'] = $request->getRemoteAddress();
     $_SERVER['REMOTE_PORT'] = 0;
     $_SERVER['SERVER_SOFTWARE'] = $serverSoftware;
     $_SERVER['SERVER_PROTOCOL'] = "HTTP/{$request->getHttpVersion()}";
     $_SERVER['SERVER_NAME'] = $this->childHost;
     $_SERVER['SERVER_PORT'] = $this->port;
     $path = $requestUrl->getPath();
     $queryString = $requestUrl->getQuery();
     $_SERVER['REQUEST_URI'] = $path . (!empty($queryString) ? "?{$queryString}" : '');
     $_SERVER['REQUEST_METHOD'] = mb_strtoupper($request->getMethod());
     $_SERVER['SCRIPT_NAME'] = '/';
     $_SERVER['SCRIPT_FILENAME'] = __FILE__;
     $_SERVER['PATH_INFO'] = $path;
     $_SERVER['PHP_SELF'] = $path;
     $headers = $request->getHeaders();
     foreach ($headers as $headerKey => $headerValue) {
         $_SERVER['HTTP_' . strtoupper(preg_replace('/[\\-\\s]/', '_', $headerKey))] = $headerValue;
     }
     if (isset($_SERVER['HTTP_X_REAL_IP'])) {
         $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_REAL_IP'];
     }
     $_SERVER['QUERY_STRING'] = $queryString;
     //@todo remove on pull request merge https://github.com/reactphp/http/pull/34
     $_GET = $request->getQuery();
     $_POST = $request->getPost();
     parse_str($queryString, $parsedGET);
     parse_str($request->getBody(), $parsedPOST);
     $_GET = array_replace($_GET, $parsedGET);
     $_POST = array_replace($_POST, $parsedPOST);
     if (isset($_SERVER['HTTP_COOKIE'])) {
         parse_str($_SERVER['HTTP_COOKIE'], $_COOKIE);
     } else {
         $_COOKIE = [];
     }
     $_REQUEST = array_merge($_GET, $_POST);
     return true;
 }
コード例 #5
0
ファイル: RackspaceServer.php プロジェクト: spiral/components
 /**
  * {@inheritdoc}
  */
 public function put(BucketInterface $bucket, $name, $source)
 {
     if (empty($mimetype = \GuzzleHttp\Psr7\mimetype_from_filename($name))) {
         $mimetype = self::DEFAULT_MIMETYPE;
     }
     try {
         $request = $this->buildRequest('PUT', $bucket, $name, ['Content-Type' => $mimetype, 'Etag' => md5_file($this->castFilename($source))]);
         $this->client->send($request->withBody($this->castStream($source)));
     } catch (ClientException $exception) {
         if ($exception->getCode() == 401) {
             $this->reconnect();
             return $this->put($bucket, $name, $source);
         }
         //Some unexpected error
         throw new ServerException($exception->getMessage(), $exception->getCode(), $exception);
     }
     return true;
 }
コード例 #6
0
ファイル: S3.php プロジェクト: arkadedigital/magento2-s3
 public function saveFile($filename)
 {
     $file = $this->mediaHelper->collectFileInfo($this->getMediaBaseDirectory(), $filename);
     try {
         $this->client->putObject(['ACL' => 'public-read', 'Body' => $file['content'], 'Bucket' => $this->getBucket(), 'ContentType' => \GuzzleHttp\Psr7\mimetype_from_filename($file['filename']), 'Key' => $filename]);
     } catch (\Exception $e) {
     }
     return $this;
 }
コード例 #7
0
 /**
  * Get mimetype of the file
  *
  * @return string
  */
 public function getMimetype()
 {
     return \GuzzleHttp\Psr7\mimetype_from_filename($this->path) ?: 'text/plain';
 }