撤消内容处理并将内容输出到服务器上的文件?

时间:2014-08-21 13:08:46

标签: php file-io true-type-fonts

以下代码是原始的,取自DOMPDF库:FontLib。它可以处理.ttf字体的子设置,我一直在努力使这段代码适应我的基本需求,不幸的是我无法运行代码,因为我想...我有以下问题可以帮助我继续!

如何编辑这段代码,以便它不会强制下载,而是将其保存到服务器?

我已尝试以下操作来禁用强制下载,

禁用标题内容处置不会完全禁用其操作,它将触发带有二进制代码的实际内容的新下载,为什么会这样做?也许函数readfile()必须对这个问题做一些事情,在我的理解中它会将内容输出到输出缓冲区并显示它。我怎样才能阻止这样做并将其与file_put_contents()一起存储?

if (isset($_POST["subset"])) {  
  $subset = $_POST["subset"];  

  ob_start();

  require_once "../src/FontLib/Autoloader.php";

  $font = Font::load($fontfile);  
  $font->parse();

  $font->setSubset($subset);  
  $font->reduce();

  $new_filename = basename($fontfile);  
  $dot = strpos($new_filename, ".");  
  $new_filename = substr($new_filename, 0, $dot)."-subset".substr($new_filename, $dot);

  header("Content-Type: font/truetype");  
  header("Content-Disposition: attachment; filename=\"$new_filename\"");

  $tmp = tempnam(sys_get_temp_dir(), "fnt");  
  $font->open($tmp, Binary_Stream::modeWrite);  
  $font->encode(array("OS/2"));  
  $font->close();

  ob_end_clean();

  readfile($tmp);  
  unlink($tmp);

  return;
}

1 个答案:

答案 0 :(得分:1)

你应该注意的事情:

readfile - 读取文件并将其写入输出缓冲区。 unlink - 用于删除文件。

上面的代码创建了一个临时文件,使用readline函数将该文件的内容发送到输出缓冲区,然后在整个文件缓冲后立即删除文件。如果您不想为该文件提供服务,请删除对标题,readline和取消链接的调用。您想要的文件路径已存储在$ tmp变量中,因此您可以根据需要对其进行操作。