Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Bilder in DB speichern und via PHP-GD ausgeben

Anleitung Entwicklung PHP

Mitglied: Guenni

Guenni (Level 2) - Jetzt verbinden

19.10.2013 um 17:46 Uhr, 4886 Aufrufe, 2 Kommentare, 2 Danke

Betriebssystem: Linux
Webserver: Apache
Datenbank: MySQL
Scriptsprache: PHP

Bilder hochladen, kodieren und in DB speichern.

Um Bilder in einer DB zu speichern, kann man in einer Abfrage ja nicht einfach den Dateinamen angeben, sondern das Bild wird

z.B. mittels eines Formulars hochgeladen. Natürlich war jetzt meine Überlegung, wenn ich ein Bild sowieso hochladen muß,

um es in einer DB zu speichern, dann kann ich doch beides miteinander kombinieren: Upload und/oder Speichern in einer DB

Herausgekommen ist ein Upload-Script mit folgenden Funktionen:

- Das Script speichert Bilder in einem Verzeichnis des Webservers
- Optional kann noch ein Unterverzeichnis angegeben werden
- Via Checkbox kann man entscheiden, ob Bilder nach dem Hochladen noch kodiert und in einer DB gespeichert werden
- Sollen Bilder nur im der DB gespeichert werden, können Bilder nach Upload und Kodierung wieder gelöscht werden

Ein eventuell angelegtes Unterverzeichnis wird nicht gelöscht, da es ja auch noch mehr Bilder und/oder Daten enthalten könnte.

Zusätzlich kann ein Copyright über das Bild gelegt werden, entweder in Form eines einfachen Text und/oder als transparentes Wasserzeichen.

Der Text kann hierbei ein- oder mehrzeilig sein. Soll der Text mehrzeilig sein, so muß ein Array erstellt werden.

Beispiele hierzu finden sich im Script weiter unten.

Verwendete Software auf dem Server

Betriebssystem: Linux
Webserver: Apache
Datenbank: MySQL
Scriptsprache: PHP

Zum Zugriff auf die Datenbank verwende ich PDO. Um aus den kodierten Bilddaten "wieder ein Bild zu machen", wird die GD-Bibliothek benötigt.

Um nachzusehen, ob beides zur Verfügung steht, einfach eine PHP-Seite erstellen, und dort die Funktion phpinfo() aufrufen.

Die Datenbank zum Speichern der Bilddaten

Meine Datenbank zur Aufnahme der kodierten Bilddaten besteht aus einer Tabelle mit lediglich zwei Spalten

- id vom Typ int mit auto_increment
- data vom Typ Text

Upload-Script

Im Upload-Script wird das Root-Verzeichnis des Webservers ermittelt: $pfad=$HTTP_SERVER_VARS['DOCUMENT_ROOT']. An dieses Verzeichnis wird

ein Unterverzeichnis angehangen, in das der Webserver hochgeladene Bilder speichert bzw. weitere Unterverzeichnisse erstellt. Dieses Verzeichnis

muss dem Webserver gehören und er muss Schreib-Leserechte besitzen.


Ein Bild aus der DB laden und im Browser ausgeben

In diesem Script habe ich eine kleine Klasse mit ein paar Methoden erstellt, um aus den Bilddaten wieder ein Bild im Browser auszugeben.

Diese Methoden verwenden Funktionen der GD-Bibliothek. Diese Funktionen haben teilweise eine "ellenlange" Parameterliste. Um nicht

immer alle Parameter angeben zu müssen, sind in den Methoden einige (oder alle) Parameter mit Werten vorbelegt. Will man die Werte ändern,

so müssen die Werte von links nach rechts lückenlos eingegeben werden. Beispiel Textfarbe setzen:

01.
/* 
02.
 * Methode um Textfarbe zu setzen, einfacher Text 
03.
*/ 
04.
public function set_text_color($r = 255, $g = 0, $b = 0){  
05.
  $this->text_color = imagecolorallocate ($this->im, $r, $g, $b); 
06.
}
Die Standardfarbe für Text ist rot. Würde man nun die Textfarbe auf grün setzen wollen, so notiert man:

01.
$image->set_text_color(0, 255);
Die Ausgabe eines Bilds habe ich in zwei Dateien vorgenommen:

- Eine Datei für die Klasse
- Eine Datei, in der der Datenbankzugriff erfolgt und die Anwendung der Klasse

Die Klassendatei

01.
<?php 
02.
class MyImage{ 
03.
 /* 
04.
 * Das Bild 
05.
 */ 
06.
 private $im
07.
 /* 
08.
 * Das Wasserzeichen 
09.
 */ 
10.
 private $copyright_stamp
11.
 private $stamp_width
12.
 private $stamp_heigth
13.
 /* 
14.
 * Textparameter für Wasserzeichen 
15.
 */ 
16.
 private $stamp_font_size
17.
 private $stamp_font_color
18.
 private $stamp_text
19.
 private $text_pos_from_left
20.
 private $text_pos_from_top
21.
 /* 
22.
 * Textfarbe, einfacher Text 
23.
 */ 
24.
 private $text_color
25.
 /* 
26.
 * Konstruktor für das Bild 
27.
 */ 
28.
 public function __construct($str){ 
29.
  $this->im = imagecreatefromstring(base64_decode($str)); 
30.
31.
 /* 
32.
 * Methode um Textfarbe zu setzen, einfacher Text 
33.
 */ 
34.
 public function set_text_color($r = 255, $g = 0, $b = 0){  
35.
  $this->text_color = imagecolorallocate ($this->im, $r, $g, $b); 
36.
37.
 /* 
38.
 * Methode um Text einzufügen, einfacher Text 
39.
 */ 
40.
 public function set_text($text, $from_left = 1, $from_top = 30, $font_size = 5){ 
41.
  if(is_array($text)){ 
42.
   foreach($text as $textline){ 
43.
	  ImageString($this->im, $font_size, $from_left, $from_top, $textline, $this->text_color); 
44.
		$from_top += 20; 
45.
46.
	}else
47.
	 			 ImageString($this->im, $font_size, $from_left, $from_top, $text, $this->text_color); 
48.
49.
50.
 /* 
51.
 * Methoden um ein transparentes Wasserzeichen einzufügen 
52.
53.
 * Ein leeres Bild für das Wasserzeichen erstellen 
54.
 */ 
55.
 public function create_copyright_stamp($width, $heigth){ 
56.
  $this->stamp_width = $width
57.
  $this->stamp_heigth = $heigth
58.
  $this->copyright_stamp = imagecreatetruecolor($width, $heigth); 
59.
60.
 /* 
61.
 * Das Wasserzeichen erstellen, die Form des Wasserzeichens ist rechteckig 
62.
 */ 
63.
 public function set_stamp($border_width = 10, $pos_from_right = 10, $pos_from_bottom = 10, $transparenz = 50, $border_color = 0xff0000, $body_color = 0x000000){ 
64.
  $x = 0; 
65.
  $y = 0; 
66.
  imagefilledrectangle($this->copyright_stamp, $x, $y, $this->stamp_width - 1, $this->stamp_heigth - 1, $border_color); 
67.
  imagefilledrectangle($this->copyright_stamp, $x + $border_width, $y + $border_width, $this->stamp_width - $border_width, $this->stamp_heigth - $border_width, $body_color); 
68.
  if(is_array($this->stamp_text)){ 
69.
	 foreach($this->stamp_text as $text){ 
70.
	  imagestring($this->copyright_stamp, $this->stamp_font_size, $this->text_pos_from_left, $this->text_pos_from_top, $text, $this->stamp_font_color); 
71.
	  $this->text_pos_from_top += 20; 
72.
73.
	}else
74.
				imagestring($this->copyright_stamp, $this->stamp_font_size, $this->text_pos_from_left, $this->text_pos_from_top, $this->stamp_text, $this->stamp_font_color); 
75.
76.
	/* 
77.
	* Position des Wasserzeichens 
78.
	*/ 
79.
  $marge_right = $pos_from_right
80.
  $marge_bottom = $pos_from_bottom
81.
  $sx = imagesx($this->copyright_stamp); 
82.
  $sy = imagesy($this->copyright_stamp); 
83.
  /* 
84.
	* Das Wasserzeichen über das Bild legen 
85.
	*/ 
86.
  imagecopymerge($this->im, $this->copyright_stamp, imagesx($this->im) - $sx - $marge_right, imagesy($this->im) - $sy - $marge_bottom, 0, 0, imagesx($this->copyright_stamp), imagesy($this->copyright_stamp),  
87.
 
88.
$transparenz); 
89.
90.
 /* 
91.
 * Textparameter für Wasserzeichen setzen 
92.
 */  
93.
 public function set_stamp_text($text, $from_left = 20, $from_top = 30, $font_size = 5, $text_color = 0xff0000){ 
94.
  $this->stamp_font_size = $font_size
95.
  $this->stamp_font_color = $text_color
96.
  $this->stamp_text = $text
97.
  $this->text_pos_from_left = $from_left
98.
  $this->text_pos_from_top = $from_top
99.
 }  
100.
 /* 
101.
 * Bild ausgeben und Speicher freigeben 
102.
 */ 
103.
 public function show(){ 
104.
  imagejpeg($this->im); 
105.
	imagedestroy($this->im);   
106.
107.
108.
?>
Anwendung der Klasse in einer Datei

Diese Datei stellt unter Verwendung der eingebundenen Klasse das Bild dar. Diese Datei kann im Browser aufgerufen werden, oder man gibt sie

in einer PHP-Datei als Bildresource an: <img src = "mein_bild.php">

01.
<?php 
02.
header ("Content-type: image/jpeg"); 
03.
include("a_image.inc.php"); //Name der Klassendatei 
04.
error_reporting (E_ALL);  
05.
ini_set ("display_errors", true);   
06.
$conn = new PDO("mysql:host=localhost;dbname=test", "guenni", "guenni"); 
07.
$query = "select data from bilder where id = 2"
08.
$stm = $conn->prepare($query); 
09.
$stm->execute(); 
10.
$result = $stm->fetch(PDO::FETCH_ASSOC); 
11.
$image_string = $result['data']; 
12.
/* 
13.
* Das Bildobjekt erstellen 
14.
*/ 
15.
$image = new MyImage($image_string); 
16.
/* 
17.
* Das Bild ausgeben 
18.
*/ 
19.
$image->show(); 
20.
?>
Damit wäre die Bildausgabe fertig. Um nun noch einen Text als Copyright/transparentes Wasserzeichen über das Bild zu definieren, gibt es zwei Möglichkeiten:

- Eine einzige Textzeile
- Einen mehrzeiligen Text (als Array)

01.
$copyright = "Copyright by ME!"
02.
$copyright_array = array("Copyright by ME!","(c) 2013","Viersen, NRW, Germany");
Beide Variablen können der Methode übergeben werden

01.
$image->set_text_color(); 
02.
$image->set_text($copyright); 
03.
//oder mehrzeilig 
04.
//$image->set_text($copyright_array);
Das transparente Wasserzeichen

Dazu erstellen wir erstmal ein leeres Bild in der gewünschten Breite und Höhe

01.
$image->create_copyright_stamp(230, 110);
Dann werden die Textparameter für das Wasserzeichen gesetzt

01.
$image->set_stamp_text($copyright); 
02.
//oder mehrzeilig 
03.
//$image->set_stamp_text($copyright_array);
Anschließend wird das transparente Wasserzeichen erstellt

01.
$image->set_stamp();
Ein Bild mit Text und Wasserzeichen könnte dann so aussehen:

274e92632e5b4461c3e5d333e9bda60c - Klicke auf das Bild, um es zu vergrößern

Abhängig von der Bildgröße muß man mit den Positionsparametern ein wenig ausprobieren, um den Text/das Wasserzeichen im Bild darzustellen.

Zum Schluß noch die Upload-Datei

01.
<?php 
02.
error_reporting ( E_ALL );  
03.
ini_set ( 'display_errors', true ); 
04.
/* 
05.
* Datenbank Verbindungsparameter 
06.
*/ 
07.
$conn = new PDO("mysql:host=localhost;dbname=test", "guenni", "guenni"); 
08.
/* 
09.
* Mit $HTTP_SERVER_VARS['DOCUMENT_ROOT'] wird das Rootverzeichnis des Servers ermittelt, 
10.
* pub ist das Standardverzeichnis, in dem Bilder abgelegt werden. 
11.
*/ 
12.
$pfad=$HTTP_SERVER_VARS['DOCUMENT_ROOT']."pub/"
13.
if(isset($_POST["cmd"])){ 
14.
 /* 
15.
 * verz wird mit dem Formular gesendet und bestimmt den Ordner, 
16.
 * in dem die Datei gespeichert wird. 
17.
 * Im Array not_allow können Zeichen(ketten) definiert werden, die im Verzeichnisnamen 
18.
 * nicht vorkommen sollen(oder nicht dürfen). Liste der nicht erlaubten Zeichen(ketten (eventuell)) erweitern. 
19.
 */ 
20.
 $not_allow = array(' ','.',':','?',';','www','/','\\'); 
21.
 $verz=str_replace($not_allow, '', $_POST['verz']); 
22.
 /* 
23.
 * Es wird überprüft, ob $_POST['verz'] existiert. Wenn ja, wird 
24.
 * es dem Pfad angehangen. 
25.
 * Wenn nein, wird es erstellt und dem Pfad angehangen. 
26.
 * Ist $_POST['verz'] leer, wird die Datei im oben angegeben Ordner gespeichert. 
27.
 */ 
28.
 if(empty($verz)){ 
29.
  //keine Aktion 
30.
 }else
31.
 			 if(is_dir($pfad.$verz)){ 
32.
  		 $pfad.=$verz."/"
33.
 			 }else
34.
 			 			 mkdir($pfad.$verz,0777); 
35.
 			 			 $pfad.=$verz."/"
36.
37.
38.
 /* 
39.
 * Im folgenden werden die Variablen für die copy-Funktion 
40.
 * deklariert und belegt. 
41.
 */ 
42.
 $quelle=$_FILES["myfile"]["tmp_name"]; // Name der temporären Datei 
43.
 $quellenname=$_FILES["myfile"]["name"]; // Originalname der Datei 
44.
 $ziel=$pfad.$quellenname; // Originalname wird an Pfad angehangen 
45.
 /* 
46.
 * Auf Bilddatei prüfen, Liste der Endungen (eventuell) erweitern. 
47.
 */ 
48.
 $bild_end = array(".bmp", ".gif", ".jpg", ".jpeg" , ".png"); 
49.
 $punkt_pos = strrpos($quellenname, '.'); 
50.
 if(!in_array(strtolower(substr($quellenname, $punkt_pos)), $bild_end)){ 
51.
  echo "Datei $quellenname ist keine Bilddatei. <a href=\"a_11.php\"> Zurück </a>"
52.
	exit
53.
54.
 /* 
55.
 * Wird kopiert ? 
56.
 */ 
57.
  if(move_uploaded_file($quelle,$ziel)){ 
58.
   echo "Datei $quellenname wurde hochgeladen.<br>";  
59.
	 echo "-------------------------------------<br>"
60.
	 echo "Quelle: ".$quelle."<br>"
61.
	 echo "Quellenname: ".$quellenname."<br>"
62.
	 echo "Ziel: ".$ziel."<br>"
63.
	}else{ /* 
64.
				 * if-else copy - Kopieren fehlgeschlagen 
65.
				 * Häufiger Grund einer Fehlermeldung ist, dass die hochgeladene Datei größer ist, 
66.
				 * als in der php.ini erlaubt ist. 
67.
				 */ 
68.
 			  echo "Fehler beim Hochladen der Datei ".$quellenname."<a href=\"a_11.php\"> Zurück </a>"
69.
			  exit
70.
71.
72.
/* 
73.
* Ist die Checkbox conv angewählt, wird die hochgeladene Datei kodiert und in der DB gespeichert. 
74.
*/ 
75.
if(isset($_POST["conv"])){	 
76.
	$bild = ''; 
77.
	$file = $ziel
78.
	if (!$handle = fopen($file, "r")) die("Konnte Datei $file nicht oeffnen!");   
79.
   while ($str = fread($handle, filesize($file))) {   
80.
    $bild.=base64_encode($str);   
81.
82.
	fclose($handle); 
83.
	/* 
84.
	* Bild in DB speichern 
85.
	*/ 
86.
  $query = $conn->prepare("insert into bilder(data) values(:bild)"); 
87.
	$query->bindParam(":bild", $bild, PDO::PARAM_STR); 
88.
  $result = $query->execute(); 
89.
	if($result !== false){ 
90.
	 $id = $conn->lastInsertId(); 
91.
	 echo "<br>Die ID des eingefügten Datensatzes ist ".$id
92.
	}else
93.
				echo "<pre>"
94.
				print_r($query->errorInfo()); 
95.
				echo "</pre>"
96.
97.
 /* 
98.
 * Ist die Checkbox delete angewählt, wird die hochgeladene Datei wieder gelöscht 
99.
 */ 
100.
 if(isset($_POST["delete"])){ 
101.
  unlink($file); 
102.
103.
104.
?> 
105.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
106.
<html> 
107.
<head> 
108.
<title>Upload and Encode</title> 
109.
</head> 
110.
<body> 
111.
<p>Bild hochladen, kodieren und in DB speichern</p> 
112.
<form enctype="multipart/form-data" method="post" action="a_11.php"
113.
<p>Ordner(optional): <input type="text" name="verz"> Bild: <input type="file" name="myfile"></p> 
114.
<input type="submit" name="cmd" value="Hochladen"> Bild kodieren und in DB speichern <input type="checkbox" name="conv"
115.
Bild nach Upload löschen <input type="checkbox" name="delete"
116.
</form> 
117.
</body> 
118.
</html>
Thats all Folks

Gruß
Güni
Mitglied: LordGurke
01.11.2013 um 17:44 Uhr
Hi,

prinzipiell keine schlechte Anleitung, allerdings drei-vier Anmerkungen von mir dazu:

Du benutzt noch $HTTP_SERVER_VARS, was seit Version 4.1 veraltet ist und daher nicht mehr verwendet werden sollte (ich glaube sogar, spätestens unter 5.4 funktioniert es auch tatsächlich nicht mehr). Stattdessen sollte man $_SERVER verwenden: http://php.net/manual/en/reserved.variables.server.php

Dann sollte man bei der Arbeit mit benutzerdefinierten Verzeichnis- und Dateinamen nach Möglichkeit "realpath()" bzw. "basename()" verwenden, um das zu filtern.
Oder direkt einfach eine Whitelist mit den normalen lateinischen Zeichen machen und entsprechend alles, was nicht in der Liste steht zu ersetzen.
Denn dein Filter holt mir z.B. keine Unicode-Zeichen aus dem angegebenen Verzeichnisnamen heraus. Kannst du ja gerne mal mit U+0338 versuchen - sieht aus wie ein Schrägstrich, ist aber keiner: ̸
Oder U+043C, das kyrillische kleine "Em": м

Kann zumindest zu interessanten Konfusionen führen


Und zum Schluss:
Beim Entwickeln ganz hilfreich, im Produktivsystem aber aus verschiedenen Gründen nicht zu empfehlen:
PHP-Fehler ausgeben, gerade dann wenn man kurz vorher den Content-Type auf "image/jpeg" setzt.
Du erfährst alle PHP-Fehler und Warnungen auch aus dem Error-Log deines Webservers. Wobei... Mit E~ALL hättest du auch eigentlich Deprecated-Warnungen sehen müssen?
Bitte warten ..
Mitglied: Guenni
02.11.2013 um 05:43 Uhr
Zitat von LordGurke:
Hi,

prinzipiell keine schlechte Anleitung, allerdings drei-vier Anmerkungen von mir dazu:

Du benutzt noch $HTTP_SERVER_VARS, was seit Version 4.1 veraltet ist und daher nicht mehr verwendet werden sollte (ich glaube
sogar, spätestens unter 5.4 funktioniert es auch tatsächlich nicht mehr). Stattdessen sollte man $_SERVER verwenden:
http://php.net/manual/en/reserved.variables.server.php

Dann sollte man bei der Arbeit mit benutzerdefinierten Verzeichnis- und Dateinamen nach Möglichkeit "realpath()"
bzw. "basename()" verwenden, um das zu filtern.
Oder direkt einfach eine Whitelist mit den normalen lateinischen Zeichen machen und entsprechend alles, was nicht in der Liste
steht zu ersetzen.
Denn dein Filter holt mir z.B. keine Unicode-Zeichen aus dem angegebenen Verzeichnisnamen heraus. Kannst du ja gerne mal mit
U+0338 versuchen - sieht aus wie ein Schrägstrich, ist aber keiner: ̸
Oder U+043C, das kyrillische kleine "Em": м

Kann zumindest zu interessanten Konfusionen führen


Und zum Schluss:
Beim Entwickeln ganz hilfreich, im Produktivsystem aber aus verschiedenen Gründen nicht zu empfehlen:
PHP-Fehler ausgeben, gerade dann wenn man kurz vorher den Content-Type auf "image/jpeg" setzt.
Du erfährst alle PHP-Fehler und Warnungen auch aus dem Error-Log deines Webservers. Wobei... Mit E~ALL hättest du auch
eigentlich Deprecated-Warnungen sehen müssen?


Hi,

danke für die Rückmeldung. Zu $HTTP_SERVER_VARS: Da sieht man mal, wie alt das Uploadscript ist. Ich bin auf die Idee,

eine Anleitung zu schreiben, erst gekommen, nach dem ein Forenuser (ich weiß nicht mehr wo) geschrieben hatte, dass er Probleme

hätte, ein Bild aus einer Datenbank im Browser auszugeben. Deshalb wurde das Script einfach nur erweitert.

Was du mit realpath oder basename "filtern" willst, erschließt sich mir jetzt nicht so direkt. realpath macht aus

../../ einen absoluten Pfad, den ich ja auch angebe, und basename gibt aus Pfad/Pfad/Dateiname den Dateinamen zurück.

Wenn du mit Filtern das hier meinst . . .

01.
$not_allow = array(' ','.',':','?',';','www','/','\\');  
02.
$verz=str_replace($not_allow, '', $_POST['verz']); 

. . . so steht es jedem frei

- die Liste der Zeichen zu erweitern
- die Liste der Zeichen zu reduzieren
- die beiden Zeilen auszukommentieren
- sich selber einen Filter zu basteln.

Auf Copyright lege ich keinerlei Wert, jeder kann was ich schreibe benutzen, umändern, erweitern . . . wie er lustig ist.

Ich wollte einfach nur eine Möglichkeit zeigen, sich unerwünschte Zeichen in Verzeichnisnamen "vom Hals" (Server) zu halten.

Zu Fehler, Warnungen und Deprecated-Warnungen: Ist die Bildausgabe erstmal gestartet, verschwinden diese im Nirwana, weil ja ein

Bild ausgegeben wird. Dazu müsste man ein Extrabild erstellen und Fehler und Warnungen dort ausgeben.

Gruß
Günni
Bitte warten ..
Neuester Wissensbeitrag
Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...