Frage

Ich habe eine PHP-Add die Anrufe LaTeX übergibt dann die PDF an den Browser. Da meine Nutzer für diesen Service zahlen wird, möchte ich sicherstellen, dass sie die Möglichkeit gegeben, um die PDF-Datei zu speichern, anstatt schlagen mein Server immer wieder.

exec("cd tex && latex {$_SESSION['sen_id']}.tex && pdflatex {$_SESSION['sen_id']}.tex", $output);
$pdf = substr($file,0,-3).'pdf';
if (file_exists($pdf)) {
  //header('Content-Description: File Transfer');
  header('Content-Type: application/pdf');
  //header('Content-Length: ' . filesize($pdf));
  header('Content-Disposition: attachment;filename='.date('Ymd-His').'-'.basename($pdf));
  header('Content-Transfer-Encoding: binary');
  header('Expires: 0');
  header('Cache-Control: no-cache');
  header('Pragma: no-cache');
  ob_clean();
  flush();
  readfile($pdf);
  exit;
} else {
  echo '<h1>No PDF Produced</h1>';
  echo nl2br(print_r($output,true));
}

Mit Wireshark habe ich festgestellt, dass der Content-Disposition-Header wird entweder nicht eingestellt oder erreicht nicht die Kunden.

HTTP/1.1 200 OK\r\n
Date: Tue, 22 Jun 2010 14:15:10 GMT\r\n
Server: Apache/2.0.55 (Ubuntu) mod_jk/1.2.14 mod_python/3.1.4 Python/2.4.3 PHP/5.1.2 mod_ssl/2.0.55 OpenSSL/0.9.8a mod_perl/2.0.2 Perl/v5.8.7\r\n
X-Powered-By: PHP/5.1.2\r\n
Set-Cookie: SESS0d6c65b0599f5b70f6bbc50cfc5b2f94=2b23ba1f74f5f1f641365e9fbb45870d; expires=Thu, 15 Jul 2010 17:48:30 GMT; path=/; domain=.<domain removed>\r\n
Content-Transfer-Encoding: binary\r\n
Expires: 0\r\n
Cache-Control: no-cache\r\n
Pragma: no-cache\r\n
Connection: close\r\n
Transfer-Encoding: chunked\r\n
Content-Type: application/pdf\r\n
\r\n

Bisher sind die Tipps, die ich habe festgestellt, sagen wir „Verwendung Oktett-Dampf“, „setzen Räume nach den Doppelpunkte“, „Capitalize jedes Wort“ und „wickeln Sie den Dateinamen in Anführungszeichen„nicht Octet-Stream verwenden“ “. Ich denke, es gibt eine Menge von Fehlinformationen von Menschen löschte die hatte Glück.

War es hilfreich?

Lösung

Ich weiß nicht, warum der Header abgestreift, aber diese Seite wie können Sie beschreibt codieren die Dateinamen in der Content-Disposition-Header und ihre Auswirkungen auf den Browser Interoperabilität.

In diesen Fällen ließ ich mich für die Lösung, die ich in der PHP-Handbuch Seite geschrieben hier (das erste Beispiel).

Ihrem Fall , werden Sie einen ungültigen Header verwenden, die jedoch sollte mit allen gängigen Browsern funktionieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top