Seite 1 von 1

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

Verfasst: 07.10.2023 11:23
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';

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

Verfasst: 07.10.2023 18:15
von 69bruno
Hast du auch mal versucht, die Maßeinheit mitzugeben ?
min_width = 5(was denn ? pxl, em, ...)

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

Verfasst: 07.10.2023 19:09
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.

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

Verfasst: 08.10.2023 02:26
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.

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

Verfasst: 08.10.2023 07:24
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

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

Verfasst: 08.10.2023 09:04
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.