Frage bezüglich der Benutzung des Filesystems datei upload von phpbb

In diesem Forum gibt es Starthilfe zum neuen Extension-System von phpBB 3.1/3.2. Fragen zur Entwicklung von Extensions und zur Konvertierung von phpBB 3.0.x MODs sind ebenfalls willkommen.
Antworten
Benutzeravatar
chris1278
Mitglied
Beiträge: 3536
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Frage bezüglich der Benutzung des Filesystems datei upload von phpbb

Beitrag von chris1278 »

So ich habe mich wegen zwei meiner Erweiterungen die ich für ein bestimmtes Projekt benötige in den letzten Monat doch recht erfolgreich mit dem Thema auseinandergesetzt wie man das Foren Interne Filesystem benutzt um Dateien hochzuladen. Was auch klappt. Also das Problem bezieht sich hier nicht drauf wie man Dateien hochlädt sondern um das Prüfen der Voraussetzungen mit entsprechender Fehler Ausgabe.

Und zwar geht es hier um diesen Block:

Code: Alles auswählen

$upload = $files_factory->get('files.upload')
    ->set_error_prefix($error_prefix)
    ->set_allowed_extensions($allowed_extensions)
    ->set_max_filesize($max_filesize)
    ->set_allowed_dimensions($min_width, $min_height, $max_width, $max_height)
    ->set_disallowed_content($disallowed_content)
    ->handle_upload('files.types.local', $local_storage, $local_filedata);
Das ist jetzt das Beispiel aus dem Coding Guide von area51 von phpbb.

Und zwar wird in diesem block ja die Datei geprüft auf erlaubte Endung, Dateigröße, länge mal breite und verbotenen Inhalt. Und entsprechend eine Fehlermeldung ausgegeben.

Ich poste anbei mal meinen Block zum anschauen:

Code: Alles auswählen

$allowed_extensions = ['png', 'jpg', 'jpeg', 'gif'];
$allowed_file_size	= 5242880;
$min_width	= 5;
$min_height	= '5';
$max_width	= 10;
$max_height	= '10';

schreibe diese Prüfung wird schlicht einfach nicht ausgeführt. Alles andere funktioniert so wie es soll. 
$fileupload = $this->files_factory->get('files.upload')
	->set_error_prefix('HEADERPIC_')
	->set_allowed_extensions($allowed_extensions)
	->set_max_filesize($allowed_file_size)
	->set_allowed_dimensions($min_width, $min_height, $max_width, $max_height)
	->handle_upload('files.types.form', 'chris1278_headerbar_filename');

$upload_path = 'images/headerlogo/'; //Das Upload-Verzeichnis

if (!$this->filesystem->exists($this->root_path . $upload_path))
{
	$this->filesystem->mkdir($this->root_path . $upload_path, 0777, true);
}

if (!$this->filesystem->is_writable($this->root_path . $upload_path))
{
	$no_write	= false;
	$errors[] 	= $this->language->lang('ACP_HEADERBAR_DIRECTORY_NOT_WRITETABLE', generate_board_url() . '/' .$upload_path);
}

$filename	= $fileupload->get('uploadname');

if (!empty($filename) && empty($upload_file->error) && $no_write)
{
	if (!empty($this->config['chris1278_headerbar_filename']))
	{
		$this->filesystem->remove($this->root_path . $upload_path . $this->config['chris1278_headerbar_filename']);
	}

	$this->config->set('chris1278_headerbar_filename', $filename);
	$fileupload->move_file($upload_path, true, true, 0644);
	trigger_error($this->language->lang('ACP_HEADERLOGO_SETTING_SAVED') . adm_back_link($this->u_action));
}
else if (!empty($fileupload->error))
{
	foreach ($fileupload->error as $error_row)
	{
		$s_errors = !empty($errors);

		$errors[]	= $error_row;
		$this->template->assign_vars([
			'CHRIS1278_S_ERROR'					=> $s_errors,
			'CHRIS1278_ERROR_MSG'				=> $s_errors ? implode('<br />', $errors) : '',
		]);
	}
}

}
Also bei der Prüfung auf Datei Größe und Datei Endung funktioniert die Fehlerausgabe aber bei der Prüfung auf länge mal breite passiert nix und die Datei wird dennoch hochgeladen. Ich glaube ich übersehe hier was aber ich komme einfach nicht drauf.

Vielleicht kann mir einer hier sagen warum das nicht funktioniert. es speilt hier auch keine rolle ob ich das so:

Code: Alles auswählen

$min_width	= 5;
$min_height	= 5;
$max_width	= 10:
$max_height	= 10;
oder so:

Code: Alles auswählen

$min_width	= '5';
$min_height	= '5';
$max_width	= '10';
$max_height	= '10';
69bruno
Mitglied
Beiträge: 445
Registriert: 05.06.2020 08:21

Re: Frage bezüglich der Benutzung des Filesystems datei upload von phpbb

Beitrag von 69bruno »

Hast du auch mal versucht, die Maßeinheit mitzugeben ?
min_width = 5(was denn ? pxl, em, ...)
Forum: cruiser-lounge.de
PHPBB-Version: 3.3.11 / Debian-Linux 10 / PHP-Version: 8.1
Benutzeravatar
IMC
Mitglied
Beiträge: 543
Registriert: 25.11.2018 20:32
Wohnort: Lüneburg
Kontaktdaten:

Re: Frage bezüglich der Benutzung des Filesystems datei upload von phpbb

Beitrag von IMC »

Die an die Methode set_allowed_dimensions($min_width, $min_height, $max_width, $max_height) übergebene Werte sind Integer Zahlen. Mit ihr werden nur die Eigenschaften in der Klasse gesetzt. Die Einhaltung der Werte wird mit der Methode valid_dimensions($file) überprüft.
Gruß, Thorsten
Benutzeravatar
chris1278
Mitglied
Beiträge: 3536
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: Frage bezüglich der Benutzung des Filesystems datei upload von phpbb

Beitrag von chris1278 »

Ok ich habe es mir angeschaut aber ich bekomme es nicht hin. Habe extra die Datei files.upload dafür geladen weil da ist dieses
IMC hat geschrieben: 07.10.2023 19:09 valid_dimensions
ja definiert aber ich bekomme immer true raus egal welche Dimension ich angebe.
Benutzeravatar
IMC
Mitglied
Beiträge: 543
Registriert: 25.11.2018 20:32
Wohnort: Lüneburg
Kontaktdaten:

Re: Frage bezüglich der Benutzung des Filesystems datei upload von phpbb

Beitrag von IMC »

In der Klasse filespec wird die Überprüfung ebenfalls in der Methode additional_checks() durchgeführt. Vielleicht ist dies deine Lösung.

Ansonsten kann du die Überprüfung auch selbst mit der Verwendung der Klasse FastImageSize durchführen. Hier ein Beispiel.
https://github.com/IMC-GER/phpBB-Image- ... #L215-L231
Gruß, Thorsten
Benutzeravatar
chris1278
Mitglied
Beiträge: 3536
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: Frage bezüglich der Benutzung des Filesystems datei upload von phpbb

Beitrag von chris1278 »

Ok hab jetzt die Lösung gefunden kann die datei zwar nicht prüfen auf breite und höhe bevor hochgeladen aber das kein problem.

Mit dem hier:

Code: Alles auswählen

$this->imagesize->getImageSize(pafd und datei);
kann ich die Prüfung separat machen und das Resultat auch entsprechend steuern.
Antworten

Zurück zu „Extension Bastelstube“