TYPO3-Testaccount
Testen Sie die aktuellste TYPO3-Version kostenlos und unverbindlich für einen Monat!

Jetzt testen!

Schulungen

jetzt buchen

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


Autor Nachricht
Verfasst am: 12. 01. 2012 [15:43]
tobla
Themenersteller
Dabei seit: 01.09.2011
Beiträge: 32
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:
PHP
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():
PHP
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.
Profil
Verfasst am: 12. 01. 2012 [21:22]
aemka
Dabei seit: 23.07.2009
Beiträge: 255
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.

[Dieser Beitrag wurde 1mal bearbeitet, zuletzt am 12.01.2012 um 21:23.]

ProfilWWWSkype
Verfasst am: 19. 01. 2012 [10:59]
tobla
Themenersteller
Dabei seit: 01.09.2011
Beiträge: 32
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:
PHP
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
PHP
$extFileFunctions = t3lib_div::makeInstance('t3lib_extFileFunctions');
Eine Initialisierung durch.

Woran könnte dies liegen?
Profil
Verfasst am: 19. 01. 2012 [11:44]
aemka
Dabei seit: 23.07.2009
Beiträge: 255
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.

ProfilWWWSkype