Inpakken en downloaden met PHP

Status
Niet open voor verdere reacties.

Atwist

Terugkerende gebruiker
Lid geworden
24 jan 2006
Berichten
1.076
Besturingssysteem
Wndows 11
Office versie
2016
Ja ik weet het ik haal mij weer wat op de hals, afgelopen dagen is gebleken dat mijn kennis van PHP niet al te best is maar om mijn website voor mijn microcontroller klaar te maken moet ik toch weer op PHP terug grijpen en helaas ook weer op jullie hulp.
Het volgende, ik heb op de SD-kaart van mijn microcontroller een website staan zodat ik deze kan besturen en/of wijzigen indien nodig ook word er een log bij gehouden deze kan ik op mijn site uitlezen (dankzij de mensen hier), maar nu wil ik deze ook graag downloaden naar mijn pc zodat ik deze verder kan bewerken.

Onderstaand script heb ik gevonden op het web deze al netjes in mijn site ingebouwd, krijg het script ook werkend zoals ik hier heb geleerd het maakt netjes een link aan om te download.
Het bestand blijft leeg en ik krijg de beide functie niet onder 1 knop.
Ik wil graag dat ik met 1 druk op de knop het bestand word gezipt en dat het gelijk gaat downloaden naar mijn PC.

Graag jullie tips, raad of oplossing.:o

Is van een Duitse site gehaald.
PHP:
	<form>
<?php
$verzeichnis = "logbuch.txt/";
$zip_name = "logbuch.zip";

// Verzeichnis auslesen
$dateien = array_slice(scanDir($verzeichnis), 2);

// Neue Instanz der ZipArchive Klasse erzeugen
$zip = new ZipArchive;

// Überprüfen ob die Datei bereits existiert
if (!file_exists($zip_name)) {
 // Zip-Archiv erstellen
 $status = $zip->open($zip_name, ZipArchive::CREATE);
}
else {
 // Zip-Archiv überschreiben
 $status = $zip->open($zip_name, ZipArchive::OVERWRITE);
}

if ($status) {

 // Dateien ins Zip-Archiv einfügen
 foreach ($dateien as $datei) {
  $zip->addFile($verzeichnis . $datei, $datei);
 }

// Zip-Archiv schließen
 $zip->close();

 if (file_exists($zip_name)) {

  // Dateigröße ermitteln
  $info = stat($zip_name);
  echo '<p><a href="' . $zip_name . '">' . $zip_name . '</a> - ' .
  number_format(round($info["size"] / 1024 ,1), 2, ",", ".") .' KB</p>';
 }
}
?>
</form>
<button onclick="href='config.zip'"> inpakken en download</button>
 
echo dit eens?
$verzeichnis . $datei

Bestaat dit path wel?
 
Hallo

Ik heb er een echo voor gezet zie screenshot
Het bestaand staat trouwens gewoon in dezelfde map als de website.
Schermafdruk van 2016-01-31 09:14:19.png
 
In de webroot dus? Waar ook je index-file in staat? Gebruik anders eens vooraf $_SERVER['DOCUMENT_ROOT'] om het volledige pad aan te geven.
 
Hier het resultaat, er wordt nog wel op mijn PC geprogrammeerd en nog niet op de SD-kaart

Schermafdruk van 2016-01-31 11:30:14.png
 
Klopt dat pad?
En staat er wel data in dat textbestand?
 
Het pad klopt (werk met Linux)

Er staat meer als 100 regels tekst in het document.

Schermafdruk van 2016-01-31 12:02:24.png
 
Kom je script uberhaupt wel in de foreach-loop? Zet daar eens voor de verandering een tijdelijke echo in.
En waarom Duitse variabelen, terwijl Engels het meeste gangbaar is?
 
Laatst bewerkt:
Daar heb je gelijk in, ik kijk erover heen daar ik in het Duitstalig gebied woon.

Maar heb het in het Engels gezet.

PHP:
<form>
<?php
echo $_SERVER['DOCUMENT_ROOT'];
$directory = "/logbuch.txt";
$zip_name = "logbuch.zip";

// Read file
$files = array_slice(scanDir($directory), 2);

// Create a new instance of the ZipArchive class
$zip = new ZipArchive;

// Check of the file already exists
if (!file_exists($zip_name)) {
 // make ZIP file
 $status = $zip->open($zip_name, ZipArchive::CREATE);
}
else {
 // overwrite ZIP file
 $status = $zip->open($zip_name, ZipArchive::OVERWRITE);
}

if ($status) {

 // Insert files into Zip archive
 foreach ($files as $file) {
  $zip->addFile($directory . $file, $file);
	 
 }

// close Zip file
 $zip->close();

 if (file_exists($zip_name)) {

  // Calculate file size
  $info = stat($zip_name);
	 echo $directory . $file;
  echo '<p><a href="' . $zip_name . '">' . $zip_name . '</a> - ' .
  number_format(round($info["size"] / 1024 ,1), 2, ",", ".") .' KB</p>';
 }
}
?>
</form>
 
En die foreach, zoals ik al zei?
 
Waar zet ik deze echo neer????
 
Zoals ik al zei:

Komt je script uberhaupt wel in de foreach-loop? Zet daar eens voor de verandering een tijdelijke echo in.
 
Sorry keek erover heen.

PHP:
echo foreach ($files as $file);
 {
  $zip->addFile($directory . $file, $file);
	 
 }

Maar dan krijg ik een leeg wit scherm.
 
Nee, in je foreach-loop, niet ervoor.
 
Oke
PHP:
 foreach ($files as $file);
 {
 echo $zip->addFile($directory . $file, $file);
	 
 }

krijg wel mijn site weer maar verder krijg ik niets te zien.

Schermafdruk van 2016-01-31 14:10:06.png
 
Laatst bewerkt:
Code:
foreach ($files as $file);
 {
 echo "Werkt dit?";
 $zip->addFile($directory . $file, $file);
 }
Dit gewoon dus ;).

Wordt die tekst uitgevoerd en getoond? Zo niet, dan zal er iets met $status zijn.
 
Ja nu krijg ik de tekst te zien
Schermafdruk van 2016-01-31 14:12:47.png
 
Bizar, het bestand is fysiek ook 0 byte?

Probeer anders dit eens, als test, met een gevuld textbestand:

<?php
$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {
$zip->addFile('index.txt', 'newname.txt');
$zip->close();
echo 'ok';
} else {
echo 'failed';
}
?>
 
De fout is gevonden :o:o:o:o

Een document met de naam "test.zip" is niet het zelfde als een ZIP file met de naam "test.zip"

Nu werkt het goed.
 
Ah, okee :) Nice!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan