[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Zusätzliche Datei einlesen in Template - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
sebastiankruse
Beiträge: 2
Registriert: 5. Mai 2017, 08:51

Zusätzliche Datei einlesen in Template

5. Mai 2017, 09:13

Ich versuche nun schon seit gestern Abend eine Datei innerhalb eines Templates im PHP-Code zu laden.
Dafür habe ich die folgenden Möglichkeiten ausprobiert:
- readfile($datei)
- include($datei)
- rex_file::getOutput($datei)

der parameter $datei enthielt dabei immer eine weitere PHP-Datei in dem Format "datei.php?parameter1=value1&parameter2=value2".
Rufe ich die Datei direkt aus dem Browser aus, funktioniert alles wie es soll. Aus dem Template heraus bekomme ich immer einen Error "failed to open stream: No such file or directory". Ich habe auch bereits versucht das ganze zu debugen. Leider bekomme ich da auch nicht so viele Informationen, wie ich es gerne hätte. Der wert von __DIR__ gibt mir lediglich "rex:///template" zurück. Das ich dort dann nicht auf die Datei zugreifen kann, ist logisch! :)
Aber leider bekomme ich es auch nicht mit dem absoluten Pfad hin, den ich über rex_path::frontend() vorangestellt habe.
Auch wenn ich versuche per URL auf die Datei zuzugreifen, also in der Form readfile("http://www.url.de/datei.php?parameter1= ... er2=value2") erhalte ich keinen Zugriff. Das dürfte allerdings weniger mit REDAXO als mit den technischen hintergründen zu tun haben, da ich so natürlich versuche auf dem Server auf sich selber zuzugreifen. Der Port ist dann aber bereits belegt und wirft den Fehler.

Jetzt ist die Frage, ob es überhaupt eine Möglichkeit gibt aus einem Template direkt auf das Dateisystem zuzugreifen!

Eine Einbettung direkt über HTML steht nicht zur Debatte, weil die Parameter verborgen sein sollen.


Nette Grüße
Sebastian

Benutzeravatar
Oliver.Kreischer
Beiträge: 2508
Registriert: 17. Dez 2004, 00:03
Wohnort: Velbert - LA
Kontaktdaten: Website

Re: Zusätzliche Datei einlesen in Template

5. Mai 2017, 10:33

Hallo Sebastian,

es gibt unterschiedliche Wege Parameter zu übergeben...

Du könntest im Template einfach Variablen definieren und deinen PHP Code einfach als neues Template anlegen und dieses in dein Template integrieren REX_TEMPLATE[ID des Templates welches inkludiert werden soll] . Dort kannst Du die Vars dann nutzen

Oder Du nutzt setConfig bzw. setProperty siehe hier: https://redaxo.org/doku/master/eigenschaften
(Weiß grad nicht was sinnvoller ist...)

LG
Oliver
> Friends Of REDAXO Gemeinsame REDAXO-Entwicklung!
> REDAXO Agenturen. Eintragen erwünscht!
> Komm in den Slack Channel Es lohnt sich!

Benutzeravatar
Oliver.Kreischer
Beiträge: 2508
Registriert: 17. Dez 2004, 00:03
Wohnort: Velbert - LA
Kontaktdaten: Website

Re: Zusätzliche Datei einlesen in Template

5. Mai 2017, 10:47

So. Musste selbst nachfragen...
setConfig speichert nicht nur zwischen, sondern speichert persistent in der Datenbank
Werte, die per setProperty gesetzt werden, sind am Ende des Requests wieder weg
Danke an Gregor :-))
> Friends Of REDAXO Gemeinsame REDAXO-Entwicklung!
> REDAXO Agenturen. Eintragen erwünscht!
> Komm in den Slack Channel Es lohnt sich!

sebastiankruse
Beiträge: 2
Registriert: 5. Mai 2017, 08:51

Re: Zusätzliche Datei einlesen in Template

8. Mai 2017, 11:34

Hallo Oliver,

ich glaube, das wird nicht so funktionieren, wie ich es mir vorstelle! ;-)

Vermutlich sind weitere Einzelheiten nötig, damit man versteht, wo sich das Problem entwickelt.

Wir kennen alle das Problem, dass Seiten durchforstet werden auf der Suche nach Mailadressen.
Ich möchte dem mit einem Script begegnen, welches mir in der ersten Funktion eine Grafik ausgibt, auf der die Mailadresse zu sehen ist. Die Grafik wird mit GD generiert und es wird die gleiche Schriftart verwendet, die auch auf der Website zum Einsatz kommt, sodass kein Unterschied zwischen Text und Grafik bemerkt wird. Außerdem wird die Mailadresse mit AES verschlüsselt in einem Link versteckt.
Die zweite Funktion des Scripts entschlüsselt wiederum die Mailadresse und erzeugt einen Redirect an das Mailprogramm.

Der Code ist wie folgt:

Code: Alles auswählen

/*
*	Übergabeparameter Bilderzeugung:
*		mailadress = mail@xyz.de
*		fontsize = 16
*		[border] = 4
*
*	Übergabeparameter Adressumleitung
*		linkto = Verschlüsselte Mailadresse
*/

//-------- CONFIG --------//
$font_file =	"/assets/fonts/Play-Regular.ttf";
$cryptkey =		"3ad04b7ef03a0c8324d23051cef037fd";

//------- PROGRAMM -------//
// Allgemeine Verschlüsselungsparameter setzen
$ckey = pack('H*', $cryptkey);
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);

// TEIL 1: verlinktes Bild generieren
if(isset($_GET["mailaddress"]) && isset($_GET["fontsize"]))
{
	// Mailadresse verschlüsseln
	$mailaddress = filter_input(INPUT_GET,"mailaddress",FILTER_VALIDATE_EMAIL);
	$ma_cr = base64_encode($iv.mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $ckey,$mailaddress, MCRYPT_MODE_CBC, $iv));
	// Schriftgröße setzen
	$fsize_px = filter_input(INPUT_GET,"fontsize",FILTER_VALIDATE_INT);
	$fontsize = $fsize_px*0.75;
	// Abstand zum Rand (Rahmen) setzen
	$border = 4;
	if(isset($_GET["border"]))
	{
		$border=filter_input(INPUT_GET,"border",FILTER_VALIDATE_INT);
	}
	// Transparentes Grundbild erstellen in Größe 2000x150px
	$SRCPNG = base64_decode("iVBORw0KGgoAAAANSUhEUgAAB9AAAACWAQMAAAC8UIHFAAAAA1BMVEX///+nxBvIAAAAAXRSTlMAQObYZgAAADpJREFUeF7twAEBAAAAgqD+r26IsBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOkxIAAcNurA4AAAAASUVORK5CYII=");
	$img = imagecreatefromstring($SRCPNG);
	// Anti Aliasing abschalten
	imageantialias($img, false);
	// Farben setzen
	$text_color = ImageColorAllocate($img, 0, 33, 59);
	$background_color = imagecolorat($img, 1, 1);
	// Text auf das Bild schreiben
	imagefttext($img, 12, 0, $border, $border+$fsize_px, $text_color, $font_file, $mailaddress);
	
	// Durch Schrift bedeckten Bereich erkennen und das Bild automatisch auf die Randmaße zuschneiden
	$sheight=$fsize_px+(2*$border)+100;
	$xpos=0;
	$ypos=0;
	$height=0;
	$width=0;
	$left=2000;
	$top=200;
	$right=0;
	$bottom=0;
	for($y=$border;$y<$sheight;$y++)
	{
		for($x=$border;$x<2000;$x++)
		{
			if(imagecolorat($img,$x,$y)!=$background_color)
			{
				if($x>$right)$right=$x;
				if($y>$bottom)$bottom=$y;
				if($x<$left)$left=$x;
				if($y<$top)$top=$y;
			}
		}
	}
	$xpos=$left-$border;
	$ypos=$top-$border;
	$width=$right-$left+(2*$border)+1;
	$height=$bottom-$top+(2*$border)+1;
	$crop_s=array('x' => $xpos , 'y' => $ypos, 'width' => $width, 'height'=> $height);
	$img = imagecrop ($img , $crop_s);
	// Bild in den Ausgabepuffer schreiben
	imagesavealpha($img, true);
	ImagePNG($img);
	imagedestroy($img);
	// Ausgabepuffer in einen String laden und Base64-Codirt in IMG-Tag ausgeben
	$imagestring = ob_get_contents(); // read from buffer
	ob_end_clean(); // delete buffer
	echo '<a href="#" onclick="window.location.href=\'/toimg.php?linkto='.rawurlencode($ma_cr).'\'"><img src="data:image/png;base64,'.base64_encode($imagestring).'" /></a>';
}
// TEIL 2: Link entschlüsseln und per Redirect weiterleiten an das Mailprogramm
elseif(isset($_GET["linkto"]))
{
	$link=rawurldecode($_GET["linkto"]);
	$cdec = base64_decode($link);
	$ma_dec=mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $ckey, substr($cdec,$iv_size), MCRYPT_MODE_CBC, substr($cdec, 0, $iv_size));
	header("Location: mailto:".$ma_dec);
}

Ich habe vorhin auch mal kurz getestet, ob es über ein zusätzliches Template laufen würde, aber es gibt gleich mehrere Probleme. Zum einen werden von Redaxo bereits vorab Headerinformationen gesendet. Da weiß ich nicht, wie kritisch das ist. Vermutlich würde es trotzdem laufen. Viel kritischer ist aber, dass ich auch auf die Schriftartendatei zugreifen muss. Und da habe ich wieder das gleiche Problem wie zuvor. :?

Es muss doch eine Möglichkeit geben, aus einem Template auf zusätzliche Dateien zuzugreifen, oder aber zusätzliche Dateien in die gleiche Umgebung zu laden, sodass darauf zugegriffen werden kann.

LG Sebastian

Benutzeravatar
Oliver.Kreischer
Beiträge: 2508
Registriert: 17. Dez 2004, 00:03
Wohnort: Velbert - LA
Kontaktdaten: Website

Re: Zusätzliche Datei einlesen in Template

8. Mai 2017, 12:22

Hallo Sebastian,

ah. Wenn Du so etwas machen möchtest wäre es meiner Meinung nach besser ein AddOn dafür zu schreiben.

Beispiele könntest Du dir hier holen:

https://github.com/FriendsOfREDAXO/emailobfuscator
https://github.com/FriendsOfREDAXO/out5

LG
Oliver
> Friends Of REDAXO Gemeinsame REDAXO-Entwicklung!
> REDAXO Agenturen. Eintragen erwünscht!
> Komm in den Slack Channel Es lohnt sich!

Zurück zu „Templates/Navigationen [R5]“