B
Bgag
Guten Abend!
Ich stehe mal wieder vor einem kleinen Problem. Ich sitze schon seit längerem an einer Klasse zur Verwaltung von Repositories. Einige Fuktionen stehen bereits ein Konzept ist ausgearbeitet. Zum besseren Verständnis gehe ich kurz auf das Konzept und den momentanen Stand ein.
Vorgesehene Funktionen:
Ich denke das gibt schon einen guten Einblick. Wir haben also nur drei Dateien und zwei Ordner. Es gibt die Klasse Repository.php, den Ordner Temp und die Datei repos.csv, die die Repository-Server enthält auf dem Client. Auf jedem Repository-Server liegt eine Datei control.csv, die die Package-Informationen enthält. Soweit ist denke ich alles klar. Wo liegen nun noch meine Probleme?
Zum einen Funktioniert zwar die Methode untar(), die die Packages (Tarballs) entpackt, allerdings werden Bilder nicht wieder richtig hergestellt. Lustigerweise funktioniert dies bei *.ico-Dateien, aber eben bei so ziemlich allen anderen image-Dateien nicht. Andere nicht voll textbasierte Formate (*.doc / *.pdf / *.mp3) werden auch nicht richtig entpackt, aber das war ja zu erwarten und macht auch nichts, da ja so oder so nur Image-, *.css-, *.html und *.php-Dateien entpackt werden müssen. Meine Frge wie kann ich es jetzt anstellen, dass auch image-Dateien korrekt entpackt werden. Die Methode habe ich unten angehängt.
Zum anderen habe ich ein Problem mit dem Download eines Packages auf den Client-Server. Wie kann ich einen Download gestalten ohne dass eine Frage an den Client gestellt wird, ob diese Datei wirklich heruntergeladen werden soll. Zur verfügung stehen mir unter anderem eine FTP- als auch eine Http-Klasse.
Wäre euch echt sehr dankbar, wenn ihr mir bei meinen Problemen helfen könntet.
MfG, Andy
PS: Hoffe, dass das die neuste Version ist. Sitze leider gerade mit meinem eee-PC in einem Cafè. Zudem hoffe ich, dass sie übersichtlich und verständlich genug ist.
//EDIT: Kurze Anmerkung noch zur untar()-Methode. Ich greife absichtlich auf die Datei-Informationen im ersten Teil des erten Blocks (Bit 1 bis 257) einer Datei zu und nicht auf die hinter USTAR. USTAR steht nämlich nur bei neueren Archiven zur Verfügung die anderen Informationen allerdings immer.
//EDIT: Hervorangende Informationen zu dem Thema Tarballs findet man übrigens im englischen Wikipedia.
Ich stehe mal wieder vor einem kleinen Problem. Ich sitze schon seit längerem an einer Klasse zur Verwaltung von Repositories. Einige Fuktionen stehen bereits ein Konzept ist ausgearbeitet. Zum besseren Verständnis gehe ich kurz auf das Konzept und den momentanen Stand ein.
Vorgesehene Funktionen:
- *.csv-Datei auslesen, die die Repository-Server enthält
- von diesen Servern die control.csv mit den Package-Informationen auslesen
- die Package-Informationen zerlegen und als Array zurückgeben
- einen Download auf den eigenen Server von ungeschützten Packages ermöglichen
- einen Download auf den eigenen Server von geschützten Packages ermöglichen
- Package (Tarball) in temporäres Verzeichnis entpacken
- install.php ausführen danach temporären Ordner löschen
- uninstall_packagename.php ausführen danach Datei löschen
Ich denke das gibt schon einen guten Einblick. Wir haben also nur drei Dateien und zwei Ordner. Es gibt die Klasse Repository.php, den Ordner Temp und die Datei repos.csv, die die Repository-Server enthält auf dem Client. Auf jedem Repository-Server liegt eine Datei control.csv, die die Package-Informationen enthält. Soweit ist denke ich alles klar. Wo liegen nun noch meine Probleme?
Zum einen Funktioniert zwar die Methode untar(), die die Packages (Tarballs) entpackt, allerdings werden Bilder nicht wieder richtig hergestellt. Lustigerweise funktioniert dies bei *.ico-Dateien, aber eben bei so ziemlich allen anderen image-Dateien nicht. Andere nicht voll textbasierte Formate (*.doc / *.pdf / *.mp3) werden auch nicht richtig entpackt, aber das war ja zu erwarten und macht auch nichts, da ja so oder so nur Image-, *.css-, *.html und *.php-Dateien entpackt werden müssen. Meine Frge wie kann ich es jetzt anstellen, dass auch image-Dateien korrekt entpackt werden. Die Methode habe ich unten angehängt.
Zum anderen habe ich ein Problem mit dem Download eines Packages auf den Client-Server. Wie kann ich einen Download gestalten ohne dass eine Frage an den Client gestellt wird, ob diese Datei wirklich heruntergeladen werden soll. Zur verfügung stehen mir unter anderem eine FTP- als auch eine Http-Klasse.
Wäre euch echt sehr dankbar, wenn ihr mir bei meinen Problemen helfen könntet.
MfG, Andy
PHP:
/**
* untar() - Unpacks a tar-archiv
*
* @access public
* @param Str $tar path to tar-archiv
* @param Str $to relativ path
* @return Boolean
*/
public function untar($tar, $to)
{
// does the tar-archiv exists
if (file_exists($tar))
{
$to = realpath($to);
if(substr($to, -1) != '/')
{
$to .= '/';
}
if(false == is_dir($to))
{
// create relativ dir
mkdir($to, 0777);
}
// open tarball
$tar = fopen($tar, 'r');
// do until reaching end of tar-archiv
while (!feof($tar))
{
// read info-block
$info = fread($tar, 512);
$name = trim(substr($info, 0, 100));
$size = octdec(trim(substr($info, 124, 12)));
// if $name is a dir create it
if($size == 0 && false == is_dir($name))
{
mkdir($to . $name, 0777);
}
else
{
// read content-block
$content = '';
for ($rec = 0; $rec < $size; $rec+=512)
{
$content .= trim(fread($tar, 512));
}
// write content into file
$file = fopen($to . $name, 'a');
fwrite($file, $content);
fclose($file);
}
}
// close tar-file
fclose($tar);
}
else
{
throw new Exception('Tarball does not exist.');
}
}
PS: Hoffe, dass das die neuste Version ist. Sitze leider gerade mit meinem eee-PC in einem Cafè. Zudem hoffe ich, dass sie übersichtlich und verständlich genug ist.
//EDIT: Kurze Anmerkung noch zur untar()-Methode. Ich greife absichtlich auf die Datei-Informationen im ersten Teil des erten Blocks (Bit 1 bis 257) einer Datei zu und nicht auf die hinter USTAR. USTAR steht nämlich nur bei neueren Archiven zur Verfügung die anderen Informationen allerdings immer.
//EDIT: Hervorangende Informationen zu dem Thema Tarballs findet man übrigens im englischen Wikipedia.
Zuletzt bearbeitet von einem Moderator: