• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

PHP Variable Übergabe falsch an ZIP-Script

BigSanch

New member
Moin :)

Ich hab da ma ne Frage :)

Ich versuche in ein Script eine Variable einzubaun, die vorher per Link übergeben wird. Die Variable an und für sich wird auch übertragen, wenn ich einen einfachen echo Test mache bekomme ich den Wert, der übertragen wurde.

Nun zum Deteil:
Ich habe einige Dateien, die ich zum Download freigeben will. Die Dateien liegen einzeln auf dem Server, welche ich im gesamten Verlauf der Seiten über ein Array benutze.

Ich habe eine Seite, auf der alle Dateien aus dem Array, dann zu sehen sind (foreach) und dazu einen download Link eingebaut, der auf ein Zip-Script verweist, welches die zusammenghörenden Dateien zippt und dann zum Download freigibt.

Im Zip-Script benutze ich die weitergeleite Variable per _GET, um einen Dateinamen für das Archiv zu haben, was auch funktioniert.

Beim Einbinden der einzelenen Dateien hingegen, gibt es irgendeinen Fehler, auf welchen ich nicht komme, da ich dort auch eine Variable einbauen muss, um die Dateien nach dem Dateinamen zu bekommen.
Und da geht nichts mehr:

baue ich die Variable mit . $var . ein, downloadet er mir die zip, welche aber nicht verwendet werden kann, da diese als defekt deklariert wird.

baue ich die Variable mit + $var + ein, downloadet er mir eine komplett Fehlerfreie aber LEERE zip Datei

baue ich hingegen die einzelnen Dateinamen anstatt der Variablen ein, gehts, warum nicht mit Variablen

Hier der Code zum Anschaun:
(Die einzelnen Dateien sind beschreiben, wie ichs schon probiert habe)

PHP:
<?
 $n= $_GET["map"]; //Variable wird richtig eingelesen

 ob_start();
 require('zip.lib.php');

 $zipfile = new zipfile($n.'.zip'); //Variable wird richtig übergeben und erstellt den richtigen Dateinamen
   $zipfile->addFileAndRead('./pf/' + $n + '.dat'); //geht net, leere zip
   $zipfile->addFileAndRead('./pf/' . $n . '.dat'); //geht net, kaputte zip
   $zipfile->addFileAndRead('./pf/$n.dat'); //erstellt logisch nur $n Dateien :-)
   $zipfile->addFileAndRead('./pf/file.dat'); //geht

 echo $zipfile->file();
?>


Wer kann mir sagen wie ich das umsetzten muss, damit dies auch mit Variablen geht

Danke schon mal im Voraus

MfG BigSanch
 
Kann net funzen, "+" ist JavaScript, nicht PHP.
Weis ich :) aber wenn mal was net funzt probiert man schon mal alles aus :-D


$n entspricht den nackten existierenden FileName?
Also in deinem Beispiel ist $n=="file"? Ohne Slash, Leerzeichen, oder sonstiges?
Ja, die Variable n stimmt ist auch ohne Leerzeichen und so, also daran dürfte es net liegen, habs auch probiert mit echo "test".n."test", daran seh ich ja wenn ein Leerzeichen oder sonst was ist oder net stimmt.

Ich hab echt kein Plan warum das net geht
 
lass dir doch mal mit "or die()" die Fehlermeldung ausgeben, vielleicht hilft das weiter...

und probiere es mal bitte so:
PHP:
 $zipfile->addFileAndRead("./pf/$n.dat");
oder so:
PHP:
 $zipfile->addFileAndRead("./pf/".$n.".dat");

sollte eigentlich beides gehen, bei deinen Varianten hast du immer Leerzeichen rein gemacht, die da nicht hingehören, bzw. singel-Quotes genommen wo man double-Quotes braucht
 
Hi :)

Erst mal meine Antworten auf Eure :)

lass dir doch mal mit "or die()" die Fehlermeldung ausgeben, vielleicht hilft das weiter...

Das problem ist ja das, dass das Script ja eigendlich geht, es funtz ja der gezippte Download, wie ich oben geschrieben habe. Es ist ja nur, dass entweder nichts drin ist, oder die zip Datei als falsches Archiev erkannt wird, und nicht entpackt werden kann. Das heisst, egal an welcher Stelle ich ein or die einbauen würde, kämesowie so keine Fehlermeldung.



und probiere es mal bitte so:
$zipfile->addFileAndRead("./pf/$n.dat");
oder so:
$zipfile->addFileAndRead("./pf/".$n.".dat");

Sorry mein Fehler, ist mir schon klar, dass es mit Leerzeichen dazwischen net funtzt, habe es nur getestet, und hier falsch eingetragen!
Aber auch richtig besteht das Problem



sollte eigentlich beides gehen, bei deinen Varianten hast du immer Leerzeichen rein gemacht, die da nicht hingehören, bzw. singel-Quotes genommen wo man double-Quotes braucht

Macht ja eigendlich net wirklich nen unterschied, da soweit ich das mal verstanden habe, es nur um die Abfrage Art von PHP geht ob man single oder double nimmt. Aber es geht ja auch mit single, daran liegts ja net.



So nun zum Weiteren Verlauf des Problems:
Ich hab mir mal die Mühe gemacht, jede einzelne Datei zu downloaden und hab entdeckt, dass einige gedownloadet werden und einige nicht mit meiner Variante.

Mein Verdacht: Kann es sein, dass für son Script, welches Dateien online packt eine Dateigörßenbeschränkung gibt? Ich kann es mir net anders erklären, dass einige Dateien funzen und einige net, wobei der Dateigrößenunterschied bei denen die gehen zu denen die net gehen immens ist.
Zum Verstehen: Bei meinen Dateien geht es um zwischen 8 und 30 MB (alle hab ich noch net nachgeschaut, obs auch mehr ist)

Wenn dem der Fall ist, dass es eine Begrenzung für sowas gibt, hat einer ne Lösung, wie ich das Problem in den Griff bekomme? Es sind standartmäßig 4 Dateien, die in diese ZipDatei integriert werden sollen.

MfG BigSanch
 
dann schau doch mal in die error_log des Apache, da sollte eine entsprechende Meldung stehen

vielleicht verbietet dein Hoster entsprechende Operationen... hast du es mal lokal getestet? vielleicht musst du auch die Standardeinstellung für das memory_limit ändern (findest du in der php.ini)

aber wie gesagt, studiere mal die error_log des Servers... da wirst du bestimmt fündig
 
Überschreiten des memory_limit sollte allerdings für eine Fehlermeldung sorgen. Die kann dann natürlich auch Schuld daran sein, dass das Zip korrupt ist.
Setzt mal error_reporting(E_ALL); zu beginn und kommentier mal die Ausgabe des Archivs aus. Dann solltest du auch die Fehlermeldungen sehen. So wie es jetzt ist, werden die nämlich als Teil des zips betrachtet
 
Hi an alle und danke an alle Antworten, aber das Problem hat sich erledigt :)

Es liegt an der Einstellung des Servers, den ich da habe, die unterstützen so großen Datenaustausch net, das war das Problem die ganze Zeit, bin jetzt dran dass die die PHP.ini für mich ändern :) mal sehen was die sagen :)

MfG BigSanch
 
Zurück
Oben