Fal::deleteSysFile() 

\nn\t3::Fal()->deleteSysFile($uidOrObject = NULL); 

Deletes a SysFile (data record from table sys_file) and all associated SysFileReferences. A radical way to completely remove an image from the Typo3 indexing.

The physical file is not deleted from the server! See \nn\t3::File()->unlink() to delete the physical file. See \nn\t3::Fal()->detach( $model, $field ); to delete from a model.

\nn\t3::Fal()->deleteSysFile( 1201 );
\nn\t3::Fal()->deleteSysFile( 'fileadmin/path/to/image.jpg' );
\nn\t3::Fal()->deleteSysFile( \TYPO3\CMS\Core\Resource\File );
\nn\t3::Fal()->deleteSysFile( \TYPO3\CMS\Core\Resource\FileReference );
Copied!

| @param $uidOrObject

| @return integer

Source Code 

public function deleteSysFile( $uidOrObject = null )
{
	$resourceFactory = \nn\t3::injectClass( \TYPO3\CMS\Core\Resource\ResourceFactory::class );
	if (!$uidOrObject) return false;
	if (is_string($uidOrObject) && !is_numeric($uidOrObject)) {
		// Pfad wurde übergeben
		$uidOrObject = \nn\t3::File()->relPath( $uidOrObject );
		$storage = \nn\t3::File()->getStorage($uidOrObject, false);
		if (!$storage) return false;
		$basePath = $storage->getConfiguration()['basePath'];
		$filepathInStorage = substr( $uidOrObject, strlen($basePath) );
		$identifier = '/'.ltrim($filepathInStorage, '/');
		$entry = \nn\t3::Db()->findOneByValues('sys_file', [
			'storage' => $storage->getUid(),
			'identifier' => $identifier,
		]);
		if ($entry) {
			$uid = $entry['uid'];
			$uidOrObject = $uid;
		}
	}
	if (is_a($uidOrObject, \TYPO3\CMS\Extbase\Domain\Model\FileReference::class )) {
		/* \TYPO3\CMS\Core\Resource\FileReference */
		$uid = $uidOrObject->getUid();
		$fileReferenceObject = $resourceFactory->getFileReferenceObject( $uid );
		$fileReferenceObject->getOriginalFile()->delete();
	} else if (is_a($uidOrObject, \TYPO3\CMS\Core\Resource\File::class )) {
		/* \TYPO3\CMS\Core\Resource\File */
		$uid = $uidOrObject->getUid();
		$uidOrObject->delete();
	} else if (is_numeric($uidOrObject)) {
		// uid wurde übergeben
		$uid = $uidOrObject;
		\nn\t3::Db()->delete('sys_file', $uidOrObject);
	}
	if ($uid) {
		// Zugehörge Datensätze aus `sys_file_references` löschen
		\nn\t3::Db()->delete('sys_file_reference', ['uid_local' => $uid], true);
	}
	return $uid;
}
Copied!