Seite 1 von 2

[4.9.2] Import/Export von Modulen (ZIP)

Verfasst: Fr 25. Okt 2013, 08:21
von Dalamar
Hallo,

ich wollte gestern ein Modul aus einer Contenido 4.9.2 Instanz exportieren, um es in einer anderen 4.9.2 Instanz zu importieren. Dies hat leider nicht funktioniert, da dass Zip-File leer ist bzw. 0 Byte hat.
Auch der Import eines Moduls (Artikelliste Reloade als ZIP) hier aus dem Forum funktioniert nicht.

Muss ein spezielles Apache Modul auf dem Server installiert werden?

Folgende Erweiterungen sind auf meinem Rootserver installiert:

Code: Alles auswählen

Geladene Erweiterungen:
Core, PDO, Phar, Reflection, SPL, SimpleXML, apache2handler, bcmath, bz2, calendar, ctype, curl, date, dba, dom, ereg, exif, fileinfo, filter, ftp, gd, gettext, hash, iconv, imap, ionCube Loader, json, libxml, mbstring, mhash, mysql, mysqli, openssl, pcre, pdo_mysql, pdo_sqlite, posix, session, shmop, soap, sockets, sqlite3, standard, sysvmsg, sysvsem, sysvshm, tokenizer, wddx, xml, xmlreader, xmlwriter, xsl, zip, zlib
NACHTRAG: Im errorlog taucht folgender Fehler auf:

Code: Alles auswählen

[24-Oct-2013 13:47:23 UTC] PHP Warning:  ZipArchive::extractTo(): Permission denied in /var/www/vhosts/foo.de/httpdocs/cms/contenido/classes/contenido/class.module.php on line 625
Danke für Eure Hilfe,
Christian

Re: [4.9.2] Import/Export von Modulen (ZIP)

Verfasst: Fr 25. Okt 2013, 08:53
von dominik.ziegler
Permission denied bedeutet, dass die ZipArchive Funktion extractTo keine Rechte hat, in den Ordner data/temp/ das Paket zu extrahieren. Kannst du bitte prüfen, ob der Ordner korrekte Berechtigungen hat?

Re: [4.9.2] Import/Export von Modulen (ZIP)

Verfasst: Fr 25. Okt 2013, 09:05
von Dalamar
0777

drwxrwxrwx 2 foo psacln 4096 Okt 24 14:20 temp

Re: [4.9.2] Import/Export von Modulen (ZIP)

Verfasst: Fr 25. Okt 2013, 09:07
von Dalamar
Beim Export erscheint übrigens folgender Fehler.

Code: Alles auswählen

[25-Oct-2013 08:06:19 UTC] PHP Warning:  filesize(): stat failed for bild.zip in /var/www/vhosts/foo.de/httpdocs/cms/contenido/classes/contenido/class.module.php on line 779
[25-Oct-2013 08:06:19 UTC] PHP Warning:  readfile(bild.zip): failed to open stream: No such file or directory in /var/www/vhosts/foo.de/httpdocs/cms/contenido/classes/contenido/class.module.php on line 781
[25-Oct-2013 08:06:19 UTC] PHP Warning:  unlink(bild.zip): No such file or directory in /var/www/vhosts/foo.de/httpdocs/cms/contenido/classes/contenido/class.module.php on line 784

Re: [4.9.2] Import/Export von Modulen (ZIP)

Verfasst: Fr 25. Okt 2013, 09:51
von Dalamar
Systemintegrität

Re: [4.9.2] Import/Export von Modulen (ZIP)

Verfasst: Fr 25. Okt 2013, 10:29
von Dalamar
Scheinbar stimmt irgendein Pfad nicht. Folgendes habe ich in der Apache Errorlog-Datei gefunden:

Code: Alles auswählen

[Tue Oct 22 03:19:25 2013] [error] [client 65.55.215.83] File does not exist: /var/www/vhosts/foo.de/httpdocs/temp
[Tue Oct 22 05:48:59 2013] [error] [client 188.154.57.130] File does not exist: /var/www/vhosts/foo.de/httpdocs/temp
[Tue Oct 22 06:36:31 2013] [error] [client 66.249.78.191] File does not exist: /var/www/vhosts/foo.de/httpdocs/images
[Tue Oct 22 08:16:43 2013] [error] [client 199.30.20.144] File does not exist: /var/www/vhosts/foo.de/httpdocs/temp
[Wed Oct 23 07:12:41 2013] [error] [client 65.55.215.92] File does not exist: /var/www/vhosts/foo.de/httpdocs/temp
[Wed Oct 23 08:25:35 2013] [error] [client 65.55.215.34] File does not exist: /var/www/vhosts/foo.de/httpdocs/temp
Richtig müsste aber folgende Pfade sein:

Code: Alles auswählen

/var/www/vhosts/foo.de/httpdocs/cms/data/temp
/var/www/vhosts/foo.de/httpdocs/cms/frontend/images
In der Config taucht folgender Pfad auf, der imho auch richtig ist:

Code: Alles auswählen

$cfg['path']['frontend']                = '/var/www/vhosts/foo.de/httpdocs/cms';
Der Serverpfad für das Frontend wie folgt

Code: Alles auswählen

/var/www/vhosts/foo.de/httpdocs/cms/frontend/
So, jetzt bin ich mit meinem Latein am Ende. Könnte der Fehler vielleicht wirklich von der open_basedir-Direktive herrühren?

Re: [4.9.2] Import/Export von Modulen (ZIP)

Verfasst: Fr 25. Okt 2013, 11:22
von xmurrix
Hallo Dalamar,

der Modulexport verwendet vermutlich nicht das temporäre Verzeichnis des Mandanten oder des Backends, sondern das temporäre Verzeichnis des Systems.

Prüfe doch mal mit der Funktion sys_get_temp_dir(), wo dein Temp-Verzeichnis liegt und ob PHP Schreibrechte darin hat.

Wenn die Funktion sys_get_temp_dir() nicht geht, kannst du auch in der globalen $_ENV nachsehen.

Gruß
xmurrix

Re: [4.9.2] Import/Export von Modulen (ZIP)

Verfasst: Fr 25. Okt 2013, 11:34
von Dalamar
xmurrix hat geschrieben:Hallo Dalamar,

der Modulexport verwendet vermutlich nicht das temporäre Verzeichnis des Mandanten oder des Backends, sondern das temporäre Verzeichnis des Systems.

Prüfe doch mal mit der Funktion sys_get_temp_dir(), wo dein Temp-Verzeichnis liegt und ob PHP Schreibrechte darin hat.

Wenn die Funktion sys_get_temp_dir() nicht geht, kannst du auch in der globalen $_ENV nachsehen.

Gruß
xmurrix
/tmp

Re: [4.9.2] Import/Export von Modulen (ZIP)

Verfasst: Fr 25. Okt 2013, 11:36
von dominik.ziegler
Wenn open basedir verwendet wird, liegt der Ordner dann in diesem "Berechtigungsbereich"?

Re: [4.9.2] Import/Export von Modulen (ZIP)

Verfasst: Fr 25. Okt 2013, 11:41
von xmurrix
Das ist der Code im Modulexport:

Code: Alles auswählen

...
$zip = new ZipArchive();
$zipName = $this->get('alias') . '.zip';
...
Es verwendet den Modulalias, um das Zip zu generieren, also foobar.zip. Wenn man da explizit keinen Pfad angibt, was hier der Fall ist, kann es sein, dass es das Temp-Verzeichnis des Sytems verwendet.

Woher kommt der Pfad "/var/www/vhosts/foo.de/httpdocs/temp", das ist meines Wissens nirgends in CONTENIDO so konfiguriert.

Re: [4.9.2] Import/Export von Modulen (ZIP)

Verfasst: Fr 25. Okt 2013, 11:53
von Dalamar
dominik.ziegler_4fb hat geschrieben:Wenn open basedir verwendet wird, liegt der Ordner dann in diesem "Berechtigungsbereich"?
Nein, der Ordner liegt nicht im Zugriffsbereich.

Re: [4.9.2] Import/Export von Modulen (ZIP)

Verfasst: Fr 25. Okt 2013, 11:55
von dominik.ziegler
Dalamar hat geschrieben:
dominik.ziegler_4fb hat geschrieben:Wenn open basedir verwendet wird, liegt der Ordner dann in diesem "Berechtigungsbereich"?
Nein, der Ordner liegt nicht im Zugriffsbereich.
Dann wird das wohl das Problem sein. Der Webserver darf dort nicht rein, deswegen kann er dorthin auch nicht entpacken.

Re: [4.9.2] Import/Export von Modulen (ZIP)

Verfasst: Fr 25. Okt 2013, 11:56
von Dalamar
xmurrix hat geschrieben:Das ist der Code im Modulexport:

Code: Alles auswählen

...
$zip = new ZipArchive();
$zipName = $this->get('alias') . '.zip';
...
Es verwendet den Modulalias, um das Zip zu generieren, also foobar.zip. Wenn man da explizit keinen Pfad angibt, was hier der Fall ist, kann es sein, dass es das Temp-Verzeichnis des Sytems verwendet.

Woher kommt der Pfad "/var/www/vhosts/foo.de/httpdocs/temp", das ist meines Wissens nirgends in CONTENIDO so konfiguriert.
Das weiß ich nicht... die Probleme traten, so das Log, auch bereits in Contenido 4.8.x auf. Eventuell haben irgendwelche Bots oder Spiders diesen Ordner aufrufen wollen... ich weiß es nicht. Wahrscheinlich hat das Problem mit dem Apache-Log nicht zwingend etwas mit Contenido zu tun.

Re: [4.9.2] Import/Export von Modulen (ZIP)

Verfasst: Fr 25. Okt 2013, 11:58
von Dalamar
dominik.ziegler_4fb hat geschrieben:
Dalamar hat geschrieben:
dominik.ziegler_4fb hat geschrieben:Wenn open basedir verwendet wird, liegt der Ordner dann in diesem "Berechtigungsbereich"?
Nein, der Ordner liegt nicht im Zugriffsbereich.
Dann wird das wohl das Problem sein. Der Webserver darf dort nicht rein, deswegen kann er dorthin auch nicht entpacken.
Ja, wahrscheinlich. Wäre es aber nicht sinnvoll der Export- und Importroutine den expliziten Pfad zum temporären Verzeichnis von Contenido zu geben... also /data/temp ?

Re: [4.9.2] Import/Export von Modulen (ZIP)

Verfasst: Fr 25. Okt 2013, 12:11
von dominik.ziegler
Das wird ja so gemacht.

Code: Alles auswählen

$sTempPath = $cfg['path']['temp'] . 'module_import_' . $modulName;
[..]
if ($zip->open($tempName)) {
  if ($zip->extractTo($sTempPath)) {