Zum Inhalt springen

Datei vom Dateisystem löschen - t3lib_extFileFunctions::func_delete erwartet mehr Parameter als dokumentert?

Erstellt am 12. Januar 2012 · 3 Antworten · letzte Antwort am 19. Januar 2012

Tags: Extbase, Dateien & FAL, Frage

tobla ·

Hallo zusammen

Wir arbeiten an einer Extension mit Extbase. Da Extbase noch kein File-Handling besitzt, müssen wir dies manuel machen.
Der angemeldete User kann Bilder hochladen. Diese werden im Ordner uploads/myExt/userImage/ abgelegt. Dies funktioniert bereits so, wie es soll.

Der Benutzer kann die Bilder natürlich wieder löschen. Während der Datensatz dabei, wie bei Typo3 üblich, bestehen bleibt und deleted=1 erhält, soll das Bild auch tatsächlich vom Server gelöscht werden, da hier der Speicherplatzverbrauch ab einer gewissen Usermenge ins Gewicht fallen wird.

Die Klasse "t3lib_extFileFunctions" bringt die Funktion "func_delete" mit. Sie erwartet einen Parameter, nämlich ein Array mit dem Pfad zur löschenden Datei.

Auszug aus t3lib_extFileFunctions http://doxygen.frozenkiwi.com/typo3/html/d2/d3f/class_8t3lib__extfilefunc_8php_source.html#l00384:

00378     /**
00379      * Deleting files and folders (action=4)
00380      *
00381      * @param   array       $cmds['data'] is the file/folder to delete
00382      * @return  boolean     Returns true upon success
00383      */
00384     function func_delete($cmds) {

Führe ich die Funktion aus, wirft Typo3 eine Exception:

Core: Error handler (FE): PHP Warning: Missing argument 2 for ux_t3lib_extFileFunctions::func_delete(), called in myServer/public_html/typo3conf/ext/myExt/Classes/Domain/Model/File.php on line 176 and defined in myServer/public_html/typo3conf/ext/dam/binding/tce/class.tx_dam_tce_extfilefunc.php line 201

Weiss jemand von euch, warum Typo3 hier nach einem zweiten Parameter schreit, den es gemäss Klasse nicht gibt?

Aufgerufen habe ich die Funktion mit der von mir definierten Funktion deleteFileFromFilesystem():

public function deleteFileFromFilesystem() {
	$extFileFunctions = t3lib_div::makeInstance('t3lib_extFileFunctions');
	$path = t3lib_div::getFileAbsFileName($this->getPath());
	$state = $extFileFunctions->func_delete(Array('data'=>$path));
	return $state;
}

$path gibt übrigens etwas vernünftiges zurück, an einem fehlerhaften Pfad wird es also eher nicht liegen.

aemka ·

hi, du hast dam installiert, das xclasst die Klasse t3lib_extFileFunctions und redfiniert die Methode wohl mit mehr Parametern noch mal. Die Fehlermeldung sagt eigentlich schon alles - schau mal in typo3conf/ext/dam/binding/tce/class.tx_dam_tce_extfilefunc.php.

tobla ·

Danke. Das war der Grund für die Fehlermeldung. Leider funktioniert es immer noch nicht. Nach genauerem Anschauen habe ich festgestellt, dass die Funktion in der ersten Zeile (logischerweise ohne Fehlermeldung) auf die Nase fällt:

00199      * @return  boolean     Returns true upon success
00200      */
00201     function func_delete($cmds, $id) {
00202	        if (!$this->isInit) return FALSE;

Offenbar gibt es ein Problem mit der Initialisierung. Ich führe allerdings mit

$extFileFunctions = t3lib_div::makeInstance('t3lib_extFileFunctions');

Eine Initialisierung durch.

Woran könnte dies liegen?

aemka ·

Du instanziierst mit makeInstance, aber unter Umständen initialisierst du aber nicht alles das, was die Klasse sonst noch braucht und mit dem Flag isInit abfragt. Geh doch der Sache mal nach, was da geprüft wird.