ZIP Ordner mit Uploads erstellen aus einer bestimmten User ID

Guten Abend,

ja ich habe die DB-zugangsdaten eingefügt.
Ich habe nun auch den Ratschlag von alxy befolgt aber scheint immer noch nicht zu laufen.
Ich erhalte nun folgende Meldungen:
Warning: ZipArchive::addFile() [ziparchive.addfile]: Invalid or unitialized Zip object in /var/www/vhosts/sexy-wallpaper-area.ch/httpdocs/UserWallpapers.php on line 36

Warning: ZipArchive::addFile() [ziparchive.addfile]: Invalid or unitialized Zip object in /var/www/vhosts/sexy-wallpaper-area.ch/httpdocs/UserWallpapers.php on line 36

Warning: ZipArchive::close() [ziparchive.close]: Invalid or unitialized Zip object in /var/www/vhosts/sexy-wallpaper-area.ch/httpdocs/UserWallpapers.php on line 41
Ich habe leider keinerlei Ahnung von PHP-Programmierungen, darum danke ich Euch zwei herzlichst für Eure Hilfe.
 
Tausche $zip->open('bilder.' . time() . '.zip');

mit

$zip->open('bilder.' . time() . '.zip', ZIPARCHIVE::CREATE);

Falls es immernoch nicht geht, könnte ein echo $zip; helfen.

PS: Eigntl bin ich gegen solche Kleinschrittigen Hilfestellungen ;)
 
Guten Abend alxy,

irgendwie klappt es nicht, ich habe zwar keine Fehler-Meldungen mehr, aber finde den Zip-Ordner nirgendwas im Root?

Den echo $zip; ergabe folgende Meldung:
Catchable fatal error: Object of class ZipArchive could not be converted to string in /var/www/vhosts/wallpaper/httpdocs/UserWallpapers.php on line 46
 
Das ist ja auch kein Zip-Ordner, sondern eine Zip-Datei, die da ensteht. Im Zweifelsfall sollte sie im gleichen Pfad liegen wie dein Script und der Dateiname fängt mit "bilder" an und endet mit ".zip".

Objekte kann man nicht mit echo ausgeben. Verwende statt dessen die Funktion var_dump(). Aber das ist hier auch gar nicht nötig.

EDIT: Ich korrigiere die echo-Aussage auf "Objekte, die keine __toString()-Methode implementieren". :) Nur der Vollständigkeit halber.
 
Zuletzt bearbeitet:
Ich meinte auch eigntl echo $zip->open('bilder.' . time() . '.zip', ZIPARCHIVE::CREATE); ;)
laut Manual findet sich da nämlich die entsprechende Fehlerbeschreibung.
 
Sorry alxy und saftmeister,

was mache ich nun Falsch? Also im Ordner wo diese PHP-Datei liegt ist keine Zip-Datei mit den Bildern drinnen. :(
Verstehe absolut nichts an euren zwei letzten Posts. :(
 
Ändere mal die Zeile hier ab:

PHP:
$zip->close();

in

PHP:
if( !$zip->close() )
{
  die("Zip-Datei konnte nicht gespeichert werden!");
}
 
Guten Morgen saftmeister,

vorerst möchte ich mich bedanken für deine geduldige Hilfe mit mir.
Leider erhalte ich nun einfach die Meldung die du im if hinterlegt hast.
Also: «Zip-Datei konnte nicht gespeichert werden!»

Hier nochmals den gesamten PHP-Code:
PHP:
<?php

//TODO: User-ID setzen
$uid = 0000;
$limitPerRun = 1000;

//TODO: Connect the DB anpassen
mysql_connect('123', '456', '789');
mysql_select_db('einedatenbank');

/*
echo "<h1>Dateien von User {$uid}</h1>";
echo "<p>Die id kann im Script auf Zeile 4 angepasst werden. Aktuelle User-ID: {$uid}</p>";
*/
 
/**
 * id_uploads    -> Die eigentliche Bild-ID
 * user_id         -> 0000 ist die ID des Users
 * bildpfad 
 */
$start_id = 0;
if(isset($_GET['start_id']))
    $start_id = intval($_GET['start_id']);
$sql = "SELECT bildpfad, id_uploads FROM tbl_uploads WHERE id_user={$uid} AND id_uploads > {$start_id} ORDER BY id_uploads LIMIT {$limitPerRun};";
 
$zip = new ZipArchive();
$zip->open('bilder.' . time() . '.zip', ZIPARCHIVE::CREATE);
 
/* Sende query und hole result */
$result = mysql_query($sql) or die(mysql_error());
/* Über die Ergebnisse laufen */
$new_start_id = 0;
while($row = mysql_fetch_array($result))
{
    /* Bild hinzufügen */
    $zip->addFile($row['bildpfad']);
    /* Aktuell gelesene ID auslesen und merken */
    $new_start_id = $row['id_uploads'];
}
/* Zip speichern und schließen */
if( !$zip->close() )
{
  die("Zip-Datei konnte nicht gespeichert werden!"); }
 
/* Mein Script-Dateiname */
$my_script_name = __FILE__;
 
/* HTML-Ausgabe mit JS zum automatischen weiterleiten... */
echo <<<EOT
<html>
    <head>
        <title>Irgendein cooler Titel</title>
    </head>
    <body onload="document.location.href={$my_script_name}?start_id={$new_start_id};">
    </body>
</html>
EOT;
?>
Leider muss ich heute Geschäftlich weg bis am Mittwochabend, also nicht Böse werden wenn ich nicht Antworten werde bis dorthin. ;)
 
Guten Morgen,

da die close()-Methode anscheinend keine Fehlermeldungen liefert, muss man sich rantasten. Laut einem Eintrag bei Stackoverflow kann das passieren, wenn die Datei, die hinzugefügt werden soll, keine reguläre Datei ist. Also prüfen wir, ob die Datei eine reguläre ist. Ändere das hier ab:

PHP:
/* Über die Ergebnisse laufen */
$new_start_id = 0;
while($row = mysql_fetch_array($result))
{
    /* Bild hinzufügen */
    $zip->addFile($row['bildpfad']);
    /* Aktuell gelesene ID auslesen und merken */
    $new_start_id = $row['id_uploads'];
}

in

PHP:
/* Über die Ergebnisse laufen */
$new_start_id = 0;
while($row = mysql_fetch_array($result))
{
    /* Prüfen, ob das Bild existiert und eine reguläre Datei ist */
    if( !file_exists($row['bildpfad']) or !is_file($row['bildpfad']) )
    {
      // TODO: Loggen, dass das Bild nicht archiviert werden konnte
      continue;
    }
    /* Bild hinzufügen */
    if( !$zip->addFile($row['bildpfad']) )
    {
      /* Bild konnte nicht hinzugefügt werden! */
      die ("Konnte {$row['bildpfad']} nicht der Zip-Datei hinzufügen.");
    }
    /* Aktuell gelesene ID auslesen und merken */
    $new_start_id = $row['id_uploads'];
}
 
Hallo saftmeister,

mit dem neuen Code kommt nur eine reine weisse Seite. Mir ist noch was im Sinn gekommen.
Der Bildpfad ist nur der Dateiname in der Datenbank, also zum Beispiel: «Photografie 01.jpg».
Das eigentliche Bild oder die Datei liegt jedoch im Ordner "wallpaper" im Root der Homepage!
Hat dies möglicherweise einen Einfluss das es deswegen bisher nicht funktionierte/klappte?
Danke vielmals für deine Geduld mit mir, ich muss in 30 Minuten weg und melde mich dann...
 

Neue Beiträge

Zurück