Esempio n. 1
0
 /**
  * Loads an HTML file
  * Parse errors are stored in the global array _dompdf_warnings.
  *
  * @param string $file a filename or url to load
  *
  * @throws Exception
  */
 public function loadHtmlFile($file)
 {
     $this->saveLocale();
     // Store parsing warnings as messages (this is to prevent output to the
     // browser if the html is ugly and the dom extension complains,
     // preventing the pdf from being streamed.)
     if (!$this->protocol && !$this->baseHost && !$this->basePath) {
         list($this->protocol, $this->baseHost, $this->basePath) = Helpers::explode_url($file);
     }
     if (!$this->options->isRemoteEnabled() && ($this->protocol != "" && $this->protocol !== "file://")) {
         throw new Exception("Remote file requested, but remote file download is disabled.");
     }
     if ($this->protocol == "" || $this->protocol === "file://") {
         // Get the full path to $file, returns false if the file doesn't exist
         $realfile = realpath($file);
         if (!$realfile) {
             throw new Exception("File '{$file}' not found.");
         }
         $chroot = $this->options->getChroot();
         if (strpos($realfile, $chroot) !== 0) {
             throw new Exception("Permission denied on {$file}. The file could not be found under the directory specified by Options::chroot.");
         }
         // Exclude dot files (e.g. .htaccess)
         if (substr(basename($realfile), 0, 1) === ".") {
             throw new Exception("Permission denied on {$file}.");
         }
         $file = $realfile;
     }
     $contents = file_get_contents($file, null, $this->httpContext);
     $encoding = null;
     // See http://the-stickman.com/web-development/php/getting-http-response-headers-when-using-file_get_contents/
     if (isset($http_response_header)) {
         foreach ($http_response_header as $_header) {
             if (preg_match("@Content-Type:\\s*[\\w/]+;\\s*?charset=([^\\s]+)@i", $_header, $matches)) {
                 $encoding = strtoupper($matches[1]);
                 break;
             }
         }
     }
     $this->restoreLocale();
     $this->loadHtml($contents, $encoding);
 }
Esempio n. 2
0
 /**
  * Loads an HTML file
  * Parse errors are stored in the global array _dompdf_warnings.
  *
  * @param string $file a filename or url to load
  *
  * @throws Exception
  */
 public function loadHtmlFile($file)
 {
     $this->saveLocale();
     if (!$this->protocol && !$this->baseHost && !$this->basePath) {
         list($this->protocol, $this->baseHost, $this->basePath) = Helpers::explode_url($file);
     }
     if (!in_array($this->protocol, $this->allowedProtocols)) {
         throw new Exception("Permission denied on {$file}. The communication protocol is not supported.");
     }
     if (!$this->options->isRemoteEnabled() && ($this->protocol != "" && $this->protocol !== "file://")) {
         throw new Exception("Remote file requested, but remote file download is disabled.");
     }
     if ($this->protocol == "" || $this->protocol === "file://") {
         // Get the full path to $file, returns false if the file doesn't exist
         $realfile = realpath($file);
         $chroot = $this->options->getChroot();
         if (strpos($realfile, $chroot) !== 0) {
             throw new Exception("Permission denied on {$file}. The file could not be found under the directory specified by Options::chroot.");
         }
         $ext = pathinfo($realfile, PATHINFO_EXTENSION);
         if (!in_array($ext, $this->allowedLocalFileExtensions)) {
             throw new Exception("Permission denied on {$file}.");
         }
         if (!$realfile) {
             throw new Exception("File '{$file}' not found.");
         }
         $file = $realfile;
     }
     $contents = file_get_contents($file, null, $this->httpContext);
     $encoding = null;
     // See http://the-stickman.com/web-development/php/getting-http-response-headers-when-using-file_get_contents/
     if (isset($http_response_header)) {
         foreach ($http_response_header as $_header) {
             if (preg_match("@Content-Type:\\s*[\\w/]+;\\s*?charset=([^\\s]+)@i", $_header, $matches)) {
                 $encoding = strtoupper($matches[1]);
                 break;
             }
         }
     }
     $this->restoreLocale();
     $this->loadHtml($contents, $encoding);
 }