Bug in der Datei contenido/classes/code_generator/class.code.generator.standard.php!
Fehlermeldung im errorlog:
Der Grund liegt in der Methode _generate() des CodeGenerators. Dort wird ab Zeile 132 ff der Modul-Code mit Hilfe einer temporären Datei bereinigt. Dabei wird diese Datei im temp-Verzeichnis von Contenido erstellt, bearbeitet eingelesen und soll im Anschluss wieder gelöscht werden. Es wird zwar in einer if-Bedingung geprüft ob die Datei erstellt wurde, nur dann wird auch die Bearbeitung gemacht, jedoch wird auch wenn die Datei nicht erstellt wurde versucht, diese zu löschen. Bei nicht vorhandener temporärer Datei erfolgt daher ein entsprechender Eintrag im errorlog.[29-Jun-2017 07:50:04 UTC] PHP Fatal error: Uncaught exception 'cInvalidArgumentException' with message 'The file /var/www/.../html/data/temp/code_gen_5954b12c25e37.php could not be accessed because it does not exist.' in /var/www/.../html/contenido/classes/class.filehandler.php:233
Stack trace:
#0 /var/www/.../html/contenido/classes/code_generator/class.code.generator.standard.php(141): cFileHandler::remove('/var/www/...')
#1 /var/www/.../html/contenido/classes/code_generator/class.code.generator.abstract.php(215): cCodeGeneratorStandard->_generate(true, false, NULL)
#2 /var/www/.../html/contenido/includes/functions.con2.php(57): cCodeGeneratorAbstract->generate(73, '1430', 1, 1, false, true, true, false, NULL)
#3 /var/www/.../html/contenido/includes/frontend/include.front_content.php(537): conGenerateCode(73, '1430', 1, 1)
#4 /var/www/.../html/cms/front_content.php(82): include('/var/www/...')
#5 {main}
thrown in /var/www/.../html/contenido/classes/class.filehandler.php on line 233
Code: Alles auswählen
// CON-1536 strip comments from module code
// regex is not enough to correctly remove comments
// use php_strip_whitespace instead of writing own parser
// downside: php_strip_whitespace requires a file as parameter
$tmpFile = dirname(cRegistry::getBackendPath()) . '/' . $cfg['path']['temp'] . uniqid('code_gen_') . '.php';
if (cFileHandler::exists(dirname($tmpFile))
&& cFileHandler::readable(dirname($tmpFile))
&& cFileHandler::writeable(dirname($tmpFile))) {
if (false !== cFileHandler::write($tmpFile, $this->_moduleCode)) {
$this->_moduleCode = php_strip_whitespace($tmpFile);
}
// delete file
cFileHandler::remove($tmpFile);
}
Am einfachsten ist es den Löschversuch nur bei erfolgreichem Schreiben der Datei zu machen, sprich, der remove-Befehl des DirHandlers sollte ebenfalls mit in die if-Abfrage rein.
Gruß aus Franken
Ortwin