2017-08-21 4 views
0

Ich habe ein Problem mit dem Download pdf von lokalen Server. Ich habe eine URL zu einer Dokumentdatei (Beispiel: \ 10.10.10.10 \ directory \ 123_ABC.pdf). Ich muss PHP-Funktion machen, die Datei von der URL herunterladen und im Webbrowser anzeigen. Der Zugriff auf dieses Verzeichnis ist geschützt (Benutzername und Passwort). Ich weiß nicht, wie ich diese Datei herunterladen kann. Vielleicht locken? Das ist möglich?PHP und Download-PDF-Datei vom lokalen Server

Ich versuchte dies:

$login = 'LOGIN'; 
$password = 'PASSOWRD'; 
$host = "http://10.10.10.10/directory/123_ABC.pdf"; 
$CurlConnect = curl_init(); 
curl_setopt($CurlConnect, CURLOPT_URL, $host); 
curl_setopt($CurlConnect, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($CurlConnect, CURLOPT_USERPWD, $login.':'.$password); 
$Result = curl_exec($CurlConnect); 

header('Cache-Control: public'); 
header('Content-type: application/pdf'); 
header('Content-Disposition: attachment; filename="new.pdf"'); 
header('Content-Length: '.strlen($Result)); 
v($Result) ; 

Die Datei new.pdf im Browser angezeigt wird, aber es ist gebrochen.

EDIT: Ich löste Problem. Ich konnte die PDF-Datei nicht herunterladen, weil ich ein schlechtes Protokoll verwendet habe. Dieser Code ist korrekt:

$login = 'LOGIN'; 
$password = 'PASSOWRD'; 
$host = "ftp://10.10.10.10/directory/123_ABC.pdf"; 
$CurlConnect = curl_init(); 
curl_setopt($CurlConnect, CURLOPT_URL, $host); 
curl_setopt($CurlConnect, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($CurlConnect, CURLOPT_USERPWD, $login.':'.$password); 
$Result = curl_exec($CurlConnect); 
curl_close ($ch); 
header('Cache-Control: public'); 
header('Content-type: application/pdf'); 
header('Content-Disposition: attachment; filename="new.pdf"'); 
header('Content-Length: '.strlen($Result)); 
echo $Result; 
+0

Welche Methode wird verwendet, um diese Datei mit einem Passwort zu schützen? HTTP-Authentifizierung? – Nima

+0

Setzen Sie die Kopfdaten auf application/pdf und verwenden Sie echo file_get_contents(); und stirb(); – Bernhard

Antwort

-1

Sie file_put_contents verwenden können Sie die Datei von URL zu Ihrem Server zum Download bereit.

file_put_contents("example.pdf", fopen("http://10.10.10.10\directory\123_ABC.pdf","rb")); 
+0

die fopen ist nur eine Verschwendung, vorausgesetzt, dass 'allow_url_fopen' ist, file_put_contents holt http urls genauso gut wie fopen, aber wenn es deaktiviert ist, wird keiner von ihnen funktionieren. und wie man es mit einem Benutzernamen und einem Passwort herunterladen kann, hängt von der verwendeten Authentifizierungsmethode ab, aber in allen Fällen ist dies der falsche Ansatz, Sie geben nirgendwo in diesem Snippet Benutzername/Passwort ein – hanshenrik

+0

@hanshenrik fopen öffnet die URL mit der Attribute und file_put_contents streamen die geöffnete Datei. Ja die Bedingungen werden beide offen gehalten werden. –

0

Zitat: The file new.pdf is displayed in the browser, but it is broken -, die falsch ist, wird die PDF-Datei im Browser nicht angezeigt, sondern weil man den Header header('Content-Disposition: attachment; filename="new.pdf"');, den Browser zu sagen gesendet, dass Sie ihm eine PDF-Datei senden, versucht der Browser Rendern Sie Ihre ausgeloggte Fehlerseite als PDF, und weil HTML (aus dem Ihre ausgeloggte Fehlerseite wahrscheinlich besteht) und PDF zwei völlig unterschiedliche Formate sind, kann der PDF-Parser das nicht rendern (der drastischste Unterschied ist, dass HTML textbasiert ist , und PDF ist ein binäres Format)

wie man sich anmeldet, hängt davon ab, welches Anmeldesystem der Server benutzt. Curl hat eingebaute Unterstützung für einige Arten, nämlich HTTP Basic authentication und HTTP Digest authentication und HTTP NTLM authentication, von denen die meisten standardisiert sind, aber keiner von denen weit verbreitet sind. höchstwahrscheinlich verwenden sie ein benutzerdefiniertes Login-Schema, das Sie selbst implementieren müssen. Das gängigste Schema umfasst das Senden des Benutzernamens und des Kennworts an eine Anmeldeseite, dann stellt die Anmeldeseite in einem Cookie eine session id bereit und Sie müssen dieses Cookie verwenden, um auf alle Seiten zuzugreifen, für die Sie angemeldet sein müssen (z. B. stackoverflow. com, wikipedia.com und facebook.com haben alle ihre eigene Version dieses Cookie-Session-ID-Schemas - Sie müssen herausfinden, welches Login-Schema der Server verwendet, bevor jemand hier Ihnen sagen kann, wie Sie sich einloggen. wenn Sie Glück haben, benutzen sie eines der (seltenen) eingebauten Schemata, um sich einzuloggen. In diesem Fall müssen Sie CURLOPT_HTTPAUTH zusammen mit CURLOPT_USERPWD verwenden, um sich anzumelden. Die Methode, die für die Anmeldung verwendet wird, wird am besten durch Studieren der Login-Seite. Welche http-Header und Body erhalten Sie, wenn Sie auf die Login-Seite in Ihrem Browser gehen? In Google Chrome können Sie dies sehen, indem Sie Strg + Umschalt + I drücken, dann zur Registerkarte "Netzwerk" gehen, bevor Sie zur Anmeldeseite navigieren, dann zur Seite navigieren, dann sollten Sie die Anfrage auf der Registerkarte "Netzwerk" sehen kann die empfangenen und gesendeten Header und den Antworttext (normalerweise html) sehen

Verwandte Themen