[GastForen Programmierung/Entwicklung PHP und MySQL Übertragung von PDF Serverseitig

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Übertragung von PDF Serverseitig

Intermedia
Beiträge gesamt: 1287

11. Dez 2006, 20:32
Beitrag # 1 von 7
Bewertung:
(1854 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo an Alle,

ich muß ein PDF per CURL und einige Formularfelder per POST übertragen.

Auf meinem eigenen Server funktioniert das gut (PHP - Version 4.0.x).
Folgender Maßen geh ich vor, per Upload wird das PDF in ein Verzeichnis kopiert,
dann wird es base64_encode umgewandelt und übertragen.

Nun hab ich das Problem, dass die Daten auf der anderen Seite nicht so ankommen wie sie sollen, es werden bestimmte Zeichen umgewandelt und damit wird das PDF nicht mehr lesbar.

Hier mal ein paar Quellen zur Vorgehensweise:

Auslesen der PDF nach Upload:
Code
$ft = fopen($tmp_verzeichnis.$_FILES['datei']['name'],"r"); 
while($zeile = fread($ft,filesize($tmp_verzeichnis.$_FILES['datei']['name']))){

$daten .= $zeile;
}

fclose($ft);


Übertragen der Daten:

Code
$senden = "bn=".$bn."&pw=".$pw."&empfaenger=".$_POST[empfaenger]."&abs_nr=".$_POST[abs_nr]."&abs_name=".$_POST[abs_name]."&datei=".base64_encode($daten); 

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.zielurl.de/inbound.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $senden);
$empfangen = curl_exec($ch);
curl_close($ch);


Auslesen auf der anderen Seite:

Code
$datein = base64_decode($_POST[datei]); 

$datnam = "test.pdf";

$ft = fopen($datnam,"w");
fputs($ft,$datein);
fclose($ft);


Also wie gesagt, auf meinem lokalen Server funktioniert es problemlos, nur auf dem Live-Server mit PHP-Version 4.4.4 funktioniert es nicht.

Hatte jemand schonmal so ein ähnliches Problem und könnte mir helfen?

Gruß Sven
X

Übertragung von PDF Serverseitig

ganesh
Beiträge gesamt: 1981

13. Dez 2006, 18:21
Beitrag # 2 von 7
Beitrag ID: #266801
Bewertung:
(1835 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich kann mir vorstellen, dass es ab einer gewissen PHP-Version eine Aenderung in der base64_decode / encode Funktion gegeben hat. Manchmal verhalten sich auch Windows- und *nix Versionen von PHP in gewissen Details anders. Hast du schon mal die User-Kommentare angeschaut auf http://ch2.php.net/base64_decode ?


als Antwort auf: [#266458]

Übertragung von PDF Serverseitig

Intermedia
Beiträge gesamt: 1287

13. Dez 2006, 19:09
Beitrag # 3 von 7
Beitrag ID: #266806
Bewertung:
(1833 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi,

erstmal danke für die Antwort.

Ich konnte jetzt das Problem etwas eingrenzen, und zwar liegt es am öffnen der Datei, das dürfte relativ sicher sein.

Wenn ich die Datei öffne und gleich wieder in eine Datei schreibe, ohne das ich irgendwelche Umwandlungen vornehme, gehen mir einige Zeichen verloren, d.h. die geschriebene Datei ist kleiner als die vom Upload.

Etliche Varianten für das lesen von Dateien hab ich schon ausprobiert, bisher leider erfolglos.

Bin für jeden Ansatz offen. Aber ich such selber mal fleißig weiter.

Gruß Sven


als Antwort auf: [#266801]

Übertragung von PDF Serverseitig

ganesh
Beiträge gesamt: 1981

14. Dez 2006, 00:27
Beitrag # 4 von 7
Beitrag ID: #266865
Bewertung:
(1823 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
curl_setopt($ch, CURLOPT_URL, "http://www.zielurl.de/inbound.php");

ist zielurl = derselbe Server / dieselbe Site, oder eine andere?


als Antwort auf: [#266806]
(Dieser Beitrag wurde von ganesh am 14. Dez 2006, 00:27 geändert)

Übertragung von PDF Serverseitig

ganesh
Beiträge gesamt: 1981

14. Dez 2006, 00:35
Beitrag # 5 von 7
Beitrag ID: #266866
Bewertung:
(1818 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hast du FTP-Zugriff auf den Ziel-Server? Falls ja, gibt's ja auch PHP-FTP Funktionen:
http://ch2.php.net/...function.ftp-put.php
dort gibt's dann auch eine Option für den Dateimodus: ascii oder binary.

Schau sonst auch noch diesen User-Kommentar an bzgl. form-upload mit CURL:
http://ch2.php.net/...url-setopt.php#24709


als Antwort auf: [#266458]

Übertragung von PDF Serverseitig

Intermedia
Beiträge gesamt: 1287

14. Dez 2006, 07:30
Beitrag # 6 von 7
Beitrag ID: #266875
Bewertung:
(1805 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

FTP kommt erstmal nicht in Frage, diese Funktion soll ein Muster sein um eine Schnittstelle anzusprechen und soll ca. 4000 Kunden (z.Z.) zur Verfügung gestellt werden.

Aber die curl Option für ein File werde ich mir mal näher ansehen.

Eigenartiger Weise hab ich das schon für Bilddateien seit fast 2 Jahren im Einsatz und es funktioniert problemlos.

Danke erstmal!

Gruß Sven


als Antwort auf: [#266866]

Übertragung von PDF Serverseitig

Intermedia
Beiträge gesamt: 1287

19. Dez 2006, 10:00
Beitrag # 7 von 7
Beitrag ID: #267519
Bewertung:
(1773 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
So, die Lösung ist gefunden, es liegt wirklich an der base64_encode - Umwandlung, diese ist bei verschiedenen PHP Versionen etwas unterschiedlich.

Mit Hilfe eines Kollegen wurde eine Lösung gefunden.

Auslesen der Datei und Umwandlung nach dem Upload:
Code
$ft = fopen($tmp_verzeichnis."file.pdf","r"); 
while($zeile = fread($ft,$file_size)){
$daten .= $zeile;
}
fclose($ft);

function urlsafe_b64encode($string) {
$data = base64_encode($string);
$data = str_replace(array('+','/','='),array('-','_',''),$data);
return $data;
}

$string = urlsafe_b64encode($daten);


Auf der anderen Seite wieder einlesen:

Code
 
function urlsafe_b64decode($string) {
$data = str_replace(array('-','_'),array('+','/'),$string);
$mod4 = strlen($data) % 4;
if ($mod4) {
$data .= substr('====', $mod4);
}
return base64_decode($data);
}

$datnam = "test.pdf";
$ft = fopen($datnam,"w");
fputs($ft,urlsafe_b64decode($_POST[datei]));
fclose($ft);


Dank an Ganesh für den richtigen Weg.

Gruß Sven


als Antwort auf: [#266875]
X