예제 #1
0
 function check()
 {
     if (isset($_FILES[$this->ref])) {
         $this->fileInfo = $_FILES[$this->ref];
     } else {
         $this->fileInfo = array('name' => '', 'type' => '', 'size' => 0, 'tmp_name' => '', 'error' => UPLOAD_ERR_NO_FILE);
     }
     if ($this->fileInfo['error'] == UPLOAD_ERR_NO_FILE) {
         if ($this->required) {
             return $this->container->errors[$this->ref] = jForms::ERRDATA_REQUIRED;
         }
     } else {
         if ($this->fileInfo['error'] == UPLOAD_ERR_NO_TMP_DIR || $this->fileInfo['error'] == UPLOAD_ERR_CANT_WRITE) {
             return $this->container->errors[$this->ref] = jForms::ERRDATA_FILE_UPLOAD_ERROR;
         }
         if ($this->fileInfo['error'] == UPLOAD_ERR_INI_SIZE || $this->fileInfo['error'] == UPLOAD_ERR_FORM_SIZE || $this->maxsize && $this->fileInfo['size'] > $this->maxsize) {
             return $this->container->errors[$this->ref] = jForms::ERRDATA_INVALID_FILE_SIZE;
         }
         if ($this->fileInfo['error'] == UPLOAD_ERR_PARTIAL || !is_uploaded_file($this->fileInfo['tmp_name'])) {
             return $this->container->errors[$this->ref] = jForms::ERRDATA_INVALID;
         }
         if (count($this->mimetype)) {
             $this->fileInfo['type'] = \Jelix\FileUtilities\File::getMimeType($this->fileInfo['tmp_name']);
             if ($this->fileInfo['type'] == 'application/octet-stream') {
                 // let's try with the name
                 $this->fileInfo['type'] = \Jelix\FileUtilities\File::getMimeTypeFromFilename($this->fileInfo['name']);
             }
             if (!in_array($this->fileInfo['type'], $this->mimetype)) {
                 return $this->container->errors[$this->ref] = jForms::ERRDATA_INVALID_FILE_TYPE;
             }
         }
     }
     return null;
 }
예제 #2
0
 public function getfile()
 {
     $module = $this->param('targetmodule');
     if (!jApp::isModuleEnabled($module) || jApp::config()->modules[$module . '.access'] < 2) {
         throw new jException('jelix~errors.module.untrusted', $module);
     }
     $dir = jApp::getModulePath($module) . 'www/';
     $filename = realpath($dir . str_replace('..', '', $this->param('file')));
     if (!is_file($filename)) {
         $rep = $this->getResponse('html', true);
         $rep->bodyTpl = 'jelix~404.html';
         $rep->setHttpStatus('404', 'Not Found');
         return $rep;
     }
     $rep = $this->getResponse('binary');
     $dateModif = new DateTime();
     $dateModif->setTimestamp(filemtime($fileName));
     if ($rep->isValidCache($dateModif)) {
         return $rep;
     }
     $rep->doDownload = false;
     $rep->fileName = $filename;
     $rep->mimeType = \Jelix\FileUtilities\File::getMimeTypeFromFilename($rep->fileName);
     return $rep;
 }
예제 #3
0
 /**
  * get the MIME Type of a file, only with its name
  *
  * @param string $fileName the file name
  * @return string the MIME type of the file
  * @since 1.1.10
  */
 public static function getMimeTypeFromFilename($fileName)
 {
     $mimetype = File::getMimeTypeFromFilename($fileName);
     if ($mimetype == 'application/octet-stream' && jApp::config() && isset(jApp::config()->mimeTypes[$ext])) {
         return jApp::config()->mimeTypes[$ext];
     }
     return $mimetype;
 }