Certification 3rd-party-apps

Status
Für weitere Antworten geschlossen.

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
so, den Wünschen mal folgend hab ich was Schlichtes für die Key-Generierung gemacht. Basis ist die Anleitung aus dem Wiki. Das Syno-Skript auf der DS hab ich nicht so ganz verstanden. Das sollte irgendwas einfacher machen; erklärt aber nicht, was es eigentlich macht. Da finde ich die Wiki-Anleitung 10x besser.

Damit jedem klar ist, was passiert, nochmal ganz kurz das Szenario. Wir brauchen einen server.key für unsere DS. Das wäre ganz einfach. Aber dieser soll auch noch von einer Stelle auf Echtheit bestätigt werden. Diese Stelle heisst Certification Authority. Das ist normalerweise eine Firma/Organisation, die gegen Geld alles für uns machen würde. Aber das Geld wollen wir ja nicht ausgeben und deshalb machen wir kurzerhand die DS auch gleich zur Certification Authority. Dafür brauch sie auch einen eigenen ca.key. Damit wir wissen, wem dieser ca.key gehört, werden nette Angaben nötig und diese werden zusammengemischt mit dem ca.key zu einem ca.csr (certificate signing request). Alles hat ein Ende nur die ****. Also auch die Gültigkeit einer Certification Authority wird irgendwann auslaufen, genauso wie ihr ca.key. Das wird nun auch noch eingemischt zu einem Certification Authority Certificate (ca.csr). Des ist das, was man im Browser suchen muss, damit einem was bestätigt wird.

Und woher weiß nu die CertificationAuthority was von unserem server.key? Weil wir den nu auch zusammen mischen mit unseren Angaben zu einem server.csr (certificate signing request) und dann gegen das CertificationAuthority Certificate laufen lassen wegen der Gültigkeit usw. Das Ergebnis ist ein Server Authority Certificate, in dem drinsteht wie lange es gültig ist, für wen es gilt und welche CertificationAuthority die Richtigkeit bestätigen kann. Und natürlich spielt auch der Serverschlüssels da mit, so dass man sicher sein kann, dass auch alles seine Richtigkeit hat. Mehr sag ich nu nicht mehr dazu.

Langer Rede kurzer Sinn: statt einen Schlüssel und ein Zertifikat brauchen wir halt zwei und sind damit autonom :D und ich hab die Dauer der Zertifikate mal auf 3600 Tage gesetzt ... passt ja ungefähr zur Haltbarkeit der DS :D

Also das Skript heißt /usr/syno/synoman/phpsrc/certificate/certificate.php und enthält:

Rich (BBCode):
<?php
$hostname = array();
exec("hostname -s",$hostname);
if ($_REQUEST['action'] == 'cert') {
exec("if [ -d ssl.crt ] ; then rm ssl.crt/*; else mkdir ssl.crt; fi");
exec("if [ -d ssl.csr ] ; then rm ssl.csr/*; else mkdir ssl.csr; fi");
exec("if [ -d ssl.key ] ; then rm ssl.key/*; else mkdir ssl.key; fi");
exec("openssl genrsa -out ssl.key/ca.key 1024");
exec("openssl genrsa -out ssl.key/server.key 1024");
exec("openssl req -new -key ssl.key/ca.key -out ssl.csr/ca.csr <<EOF
".$_REQUEST['country']."
".$_REQUEST['state']."
".$_REQUEST['city']."
".$_REQUEST['organisation']."
".$_REQUEST['unit']."
".$_REQUEST['name']."
".$_REQUEST['email']."
.
.
EOT");
exec("openssl req -new -key ssl.key/server.key -out ssl.csr/server.csr <<EOT
".$_REQUEST['countryi1']."
".$_REQUEST['state1']."
".$_REQUEST['city1']."
".$_REQUEST['organisation1']."
".$_REQUEST['unit1']."
".$_REQUEST['name1']."
".$_REQUEST['email1']."
.
.
EOT");
exec("openssl x509 -req -days 3600 -in ssl.csr/ca.csr -signkey ssl.key/ca.key -out ssl.crt/ca.crt");
exec("openssl x509 -req -days 3600 -in ssl.csr/server.csr -CA ssl.crt/ca.crt -CAkey ssl.key/ca.key
 -set_serial 01 -out ssl.crt/server.crt");
exec("openssl rsa -in ssl.key/server.key -out server.key");
print "<a href='server.key'>download server key</a>";
}
?>
<html><head><title>certificate</title></head><body>
<style>body,input,td{font:11px Verdana}</style>
<form id="f" name="f" method="get" action="certificate.php">
<input type="hidden" name="action" id="action" value="">
<h3>Certification Authority Certificate</h3>
<table>
<tr><td>Country:</td><td><input type="text" name="country" size=2 value="DE"></td></tr>
<tr><td>State:</td><td><input type="text" name="state" value="Hessen"></td></tr>
<tr><td>City:</td><td><input type="text" name="city" value="Frankfurt"></td></tr>
<tr><td>Organisation:</td><td><input type="text" name="organisation" value="Flughafen"></td></tr>
<tr><td>Unit:</td><td><input type="text" name="unit" value="Terminal_A"></td></tr>
<tr><td>Common Name:</td><td><input type="text" name="name" value="Diskstation Serien-Nr."></td></tr>
<tr><td>Email:</td><td><input type="text" name="email" value="me@syno.de"></td></tr>
</table>
<h3>Server Certificate</h3>
<table>
<h3>Server Certificate</h3>
<table>
<tr><td>Country:</td><td><input type="text" name="country1" size=2 value="DE"></td></tr>
<tr><td>State:</td><td><input type="text" name="state1" value="Hessen"></td></tr>
<tr><td>City:</td><td><input type="text" name="city1" value="Frankfurt"></td></tr>
<tr><td>Organisation:</td><td><input type="text" name="organisation1" value="Flughafen"></td></tr>
<tr><td>Unit:</td><td><input type="text" name="unit1" value="Terminal_A"></td></tr>
<tr><td>Common Name*:</td><td><input type="text" name="name1" value="<?php print $hostname[0]; ?> ???"></td></tr>
<tr><td>Email:</td><td><input type="text" name="email1" value="me@syno.de"></td></tr>
</table>
<br>* https://<i><?php print $hostname[0]; ?></i>:5001/webman/index.cgi<br><br><br>
<input type="button" value="create certificateblic"
onclick="document.getElementById('action').value='cert';f.submit();">
</form>
</body></html>

Das Skript erstellt automatisch die ganze ssl-Directory-Struktur, aber halt im Verzeichnis /usr/syno/synoman/phpsrc/certificate/. So kommt auch nichts durcheinander. Wenn mich nicht alles täuscht, muss man die openssl.cnf-Datei wie im Wiki beschrieben downloaden (hier noch mal der link: http://www.gateway-1.homedns.org/synology/openssl.cnf), weil sonst das ganz nicht läuft. Aber wie gesagt, habs nicht ausprobiert, weil ich das ja schon alles manuell gemacht hatte.

Wenn der Server-Key fertig ist, wird ein gibt es einen Download-Link. Da kann man ihn sich anschauen, ansonsten steht er halt im Verzeichnis /usr/syno/synoman/phpsrc/certificate/ unter dem Namen server.key. Diese Datei braucht man für den jeweiligen Browser (also auf den PC kopieren und als Schlüssen einfügen). So hab ich es gemacht - weiß net obs auch anders geht.

Achtung: Es werden jedesmal alles Key gelöscht, bevor neue erstellt werden. Also die im Verzeichnis /usr/syno/synoman/phpsrc/certificate/, nicht die, wo Syno sonst stehen hat. Mit anderen Worten, diese Application ist sinnvollerweise nur einmal zu verwenden oder dann wieder, wenn man komplett alle Schlüssel neu braucht.
Das manulle Kopieren an die Stellen, wo die Syno es braucht, ist auch in besagtem Wiki erläutert. (Des dahin zu kopieren, war mit doch ein wenig zu heiß).

Wie immer das nette Bildchen und auch wie immer der Hinweis, alles geht auf eigene Kappe :p Falls was falsch ist, dann gehts auf meine :D
 

Anhänge

  • certification.jpg
    certification.jpg
    69,7 KB · Aufrufe: 1.223
Zuletzt bearbeitet:

Eismaus

Benutzer
Mitglied seit
26. Jun 2008
Beiträge
64
Punkte für Reaktionen
0
Punkte
0
Hallo,
könntest du noch den Link zum Wikibeitrag posten, von dem du sprichst?

Danke
Eismaus
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
gerne. Hier geht zum Wiki-Beitrag über die Certificates

Hab auch ganz vergessen die /usr/syno/synoman/webman/3rdparty/certificate/application.cfg zu posten:

text = certificate
descriptiton = certificate
type = embedded
path = /phpsrc/certificate/certificate.php

Daran denken, dass der Apache auf Port :5001 auch php-Skripte ausführen können muss. Wer das noch nicht in der /usr/syno/apache/conf/httpd.conf-sys eingetragen hat, sollte noch die beiden Zeilen ans Ende der Datei hinzufügen:

AddType application/x-httpd-php .php
LoadModule php5_module /lib/libphp5.so

und den Apache neu starten: /usr/syno/etc/rc.d/S97apache-sys.sh restart
 
Zuletzt bearbeitet:

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
lese gerade die neue c't (Ausgabe 15/2008) und finde einen passenden Beitrag zum Thema Zertifikate. Hier wird noch einmal sehr deutlich vorgeführt, was "schwache" Zertifikate sind und was das für Gefahren nach sich ziehen kann. Es lohnt also nicht nur wegen der DS sich mit dem Thema intensiv auseinander zu setzen. Bleibt zu bemerken, dass "unserer" Zertifikate genauso davon betroffen sein können.

Es ist also falsch anzunehmen, dass die Einstellung HTTPS für die DS automatisch auch immer 100% sicher wäre. Nur wenn man dem Router eine Weiterleitung verbietet und über keine anderen offenen Ports Unsinn erlaubt, ist man einigermaßen sicher mit der DS.

Trotzdem meine Empfehlung:

(1) entweder DS als Datenspeicher verwenden und dann nicht ans öffentliche Netz oder
(2) DS ans öffentliche Netz, aber keine sensiblen Daten drauf bzw. immer mit Sicherung und der Möglichkeit leben können, dass jemand Unbefugtes an die Daten herankommt bzw. sie verfälscht/löscht.

Wer beides will und trotzdem ein Maximum an Sicherheit will, soll sich wirklich überlegen zwei DS zu betreiben (wie es ja einige sowieso hier tun).

Das Internet ist wie ein Riesenhaufen Postkarten - wer will kann (fast immer) mitlesen.
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
13
Punkte
84
hier mal eine Anpassung/Erweiterung des Scriptes.

als Erstes fertigen wir ein Backup von einigen Dateien an

Backup vom Verzeichnis /usr/syno/etc/ssl anfertigen
Backup vom Verzeichnis /usr/syno/apache/conf/extra anfertigen


Die SSL-Konfigurationsdateien modifizieren.
In den folgenden 3 Dateien im Verzeichnis /usr/syno/apache/conf/extra
Code:
http-ssl.conf
http-ssl.conf-sys
http-ssl.conf-user
die folgenden Zeilen suchen, überprüfen und anpassen
Code:
SSLCertificateFile /usr/syno/etc/ssl.crt/server.crt
SSLCertificateKeyFile /usr/syno/etc/ssl.key/server.pem
Das Script im Anhang über das Bestehende kopieren (falls noch nicht gemacht, die obigen Schritte hier im Thread durchführen)

Nun das Script im Webman aufrufen, die Felder mit den gewünschten Daten füllen und auf den Button 'Create Certificate' klicken.
Nachdem alle erscheinenden Meldungen oberhalb mit 'OK' abgehakt wurden, können wir die erstellten Dateien an ihren Bestimmungsort kopieren (vorher Backup wie oben beschrieben anfertigen). Hierfür betätigen wir den Button 'Copy Certificate'. Zum Schluss noch die beiden Apache(s) neustarten (siehe Befehle oberhalb). Es sollten beide Apache ohne Fehlermeldung neustarten.

Wenn Alles reibungslos durchgeführt wurde, können wir unser Zertifikat testen, indem wir folgende Zeile im Browser eingeben:
Code:
https://<name_eurer_diskstation>:5001
Es sollte nun eine Dialogbox mit einem Hinweis über das Zertifikat erscheinen. Im Firefox sieht das z.B. so aus:

ff_cert.jpg


Die Daten des Zertifikates überprüfen, 'Dieses Zertifkat immer akzeptieren' auswählen und 'OK' betätigen. Damit wird das Zertifikat in den Zertifikatsspeicher des Browsers übertragen und bleibt bis zum Auslaufen des Zertifikates aktiv.

Das Script ist zusammen mit 2 Icons in dem im Anhang befindlichem Zip-Archiv enthalten. Nach dem Download die Endung .txt entfernen und dann entpacken.
 

Anhänge

  • certificate.zip.txt
    4,8 KB · Aufrufe: 117

ag_bg

Benutzer
Mitglied seit
19. Jan 2008
Beiträge
1.736
Punkte für Reaktionen
0
Punkte
0
Nachdem hier der Thread gerade netterweise von dir aktualisiert wurde, hätte ich eine Frage bezgl. eines Wildcards-Zertifikats.
Hat jemand ein solches zum laufen gebracht auf der DS oder aber kennt einen kostenlosen Dienst, bei dem man ohne einen Datenstreptease eines erhalten kann?

best regards
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
13
Punkte
84
hm, also kostenlos würd es sowas nicht geben, hab jedenfalls noch keine Seite gefunden.
Versuch mal mit *.domain.com als Common Name (domain.com mit deinem Domainnamen ersetzen) oder für Alles dann nur * oder *.*
Hab es grad mal probiert, wird vom Script auch akzeptiert und bietet sich nach Aufruf des Webman mit https://... als Zertifikat an. Steht dann * für Herausgeber und Domain. Ob es mit richtigen Domains läuft, kann ich im Moment nicht prüfen.

Hier noch eine Seite wo ich das gefunden hab http://www.justinsamuel.com/2006/03/11/howto-create-a-self-signed-wildcard-ssl-certificate/
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
13
Punkte
84
neue Version mit den folgenden Erweiterungen:
  • CA nun wieder eingebaut, um unabhängige Daten von Herausgeber und Server zu verwenden
  • automatisches Auslesen und Einfügen der DS Seriennummer
  • das Layout ein wenig aufgepeppt
  • fortlaufende Seriannummer (wichtig, sonst meckert der Browser)
Der Rest ist wie gehabt...umbennen, entpacken, kopieren, sich freuen ;)
 

Anhänge

  • certificate.php.txt
    8,6 KB · Aufrufe: 118
  • certificate.jpg
    certificate.jpg
    87,8 KB · Aufrufe: 1.053

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
@QTip,

wollte dir mal sagen, dass ich es super finde, dass du das so schön ausbaust. Gefällt mir sehr :)

itari
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
13
Punkte
84
danke für die Blumen, aber den Grundstein hattest du schon gelegt, ich hab ihm nur den letzten Schliff verpasst (zumindest versucht) ;)

Am liebsten würde ich noch die beiden Apache per Script neustarten, allerdings wirds nach dem Neustart des Sys-Apache nix mehr mit der Scriptausführung ^^
 

Selfcontrol

Benutzer
Mitglied seit
06. Aug 2008
Beiträge
53
Punkte für Reaktionen
0
Punkte
0
habe es installiert
wenn ich es unter 3rd-party/certificate anklicke kommt im fenster


Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /usr/syno/synoman/phpsrc/certifikate/certifikate.php on line 7

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /usr/syno/synoman/phpsrc/certifikate/certifikate.php on line 17


woran kann es liegen ?
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
13
Punkte
84
hi,
hier gab es schon Mal ein ähnliches Problem -> http://www.synology-forum.de/showpost.html?p=16746&postcount=4

Schau mal in deine php.ini (/usr/syno/etc/php.ini) und suche nach magic_quotes_runtime. Da sollte off stehen, also magic_quotes_runtime = off, eventuell abändern und sichern.

Anschließend die beiden Apache(s) neustarten mit
Code:
/usr/syno/etc/rc.d/S97apache-sys.sh restart und
/usr/syno/etc/rc.d/S97apache-user.sh restart
poste mal ob es funktioniert hat.
 

Selfcontrol

Benutzer
Mitglied seit
06. Aug 2008
Beiträge
53
Punkte für Reaktionen
0
Punkte
0
ja , hatte ich auch schon gelesen , da ich beim "automate" script auch den dort schon beschriebenen Fehler bekommen habe , aber die PHP.INI schein in Ordnung zu sein

; Magic quotes
;

; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = On
habe ich in Off geändert

; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off

; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off

dann die beiden Apachen neu gestartet , aber kein Erfolg (achja 717 Firmware)
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
13
Punkte
84
den Eintrag magic_quotes_gpc = On solltest eigentlich nicht in Off ändern ;)
Schade, das es nicht die Lösung war :(
Ich benutze auch die 717, bei mir läuft das Script allerdings. Hast du denn, wenn du dir das Script auf der Shell anguckst ein ^M hinter jeder Zeile?
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Für viele Skripte braucht man einen Editor, der die Dateien im UNIX/LINUX-Format schreiben kann, damit die Zeilenenden auch richtig rüberkommen (^M). Wir können ja nichts dafür, dass Microsoft so einen Scheiß bei Dateien an Zeilenende schreibt :D

itari
 

Pompom

Benutzer
Mitglied seit
17. Jul 2008
Beiträge
70
Punkte für Reaktionen
0
Punkte
6
ja , hatte ich auch schon gelesen , da ich beim "automate" script auch den dort schon beschriebenen Fehler bekommen habe , aber die PHP.INI schein in Ordnung zu sein



dann die beiden Apachen neu gestartet , aber kein Erfolg (achja 717 Firmware)

nicht nur den Apache neu starte sondern die DS rebooten danach hat es bei mir geklappt!:D

Gruß Pompom
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
nicht nur den Apache neu starte sondern die DS rebooten danach hat es bei mir geklappt!
Also normalerweise erfordern Änderungen an der php.ini "nur" einen Neustart des Servers und nicht der ganzen DS. Beim Serverneustart wird die php.ini erneut in den Speicher gelesen.
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
13
Punkte
84
Also normalerweise erfordern Änderungen an der php.ini "nur" einen Neustart des Servers und nicht der ganzen DS. Beim Serverneustart wird die php.ini erneut in den Speicher gelesen.
jo, sehe ich auch so, kann nur sein, dass beim Apache Neustart was nicht anständig abgelaufen ist.
@Selfcontrol: Ändere mal den von dir geänderten Eintrag wieder nach On. Magic_Quotes sind bei GET/POST-Variablen hilfreich, wenn es sich z.B. um nicht druckbare Zeichen handelt. Könnte unter Umständen dann Fehler beim Abschicken eines Formulares verursachen :cool:
 

Selfcontrol

Benutzer
Mitglied seit
06. Aug 2008
Beiträge
53
Punkte für Reaktionen
0
Punkte
0
so , alle hier genannten tips ausprobiert , bringt nichts

CERTIFICATE gibt aus
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /usr/syno/synoman/phpsrc/certifikate/certifikate.php on line 7

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /usr/syno/synoman/phpsrc/certifikate/certifikate.php on line 17

AUTOMATE gibt aus
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /usr/syno/synoman/phpsrc/automate/automate.php on line 2

Warning: Unexpected character in input: ''' (ASCII=39) state=1 in /usr/syno/synoman/phpsrc/automate/automate.php on line 2

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /usr/syno/synoman/phpsrc/automate/automate.php on line 2

Warning: Unexpected character in input: ''' (ASCII=39) state=1 in /usr/syno/synoman/phpsrc/automate/automate.php on line 2

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /usr/syno/synoman/phpsrc/automate/automate.php on line 2

Warning: Unexpected character in input: ''' (ASCII=39) state=1 in /usr/syno/synoman/phpsrc/automate/automate.php on line 2

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /usr/syno/synoman/phpsrc/automate/automate.php on line 2

Warning: Unexpected character in input: ''' (ASCII=39) state=1 in /usr/syno/synoman/phpsrc/automate/automate.php on line 2

Parse error: syntax error, unexpected ')' in /usr/syno/synoman/phpsrc/automate/automate.php on line 2

scheint doch ein tieferes Problem in meinem System zu sein
habe noch vermutet das evtl. die PHP.INI nicht ausgewerte wird , bzw. eine andere eingelesen wird
ist aber nicht so ..... da werf ich erstmal das Handtuch

um das PHP zu überprüfen ist das hier sehr gut
PHP:
<?php
ob_start();
phpinfo();
$phpinfo = array('phpinfo' => array());
if(preg_match_all('#(?:<h2>(?:<a name=".*?">)?(.*?)(?:</a>)?</h2>)|(?:<tr(?: class=".*?")?><t[hd](?: class=".*?")?>(.*?)\s*</t[hd]>(?:<t[hd](?: class=".*?")?>(.*?)\s*</t[hd]>(?:<t[hd](?: class=".*?")?>(.*?)\s*</t[hd]>)?)?</tr>)#s', ob_get_clean(), $matches, PREG_SET_ORDER))
    foreach($matches as $match)
        if(strlen($match[1]))
            $phpinfo[$match[1]] = array();
        elseif(isset($match[3]))
            $phpinfo[end(array_keys($phpinfo))][$match[2]] = isset($match[4]) ? array($match[3], $match[4]) : $match[3];
        else
            $phpinfo[end(array_keys($phpinfo))][] = $match[2];
?>

Some examples of using individual values from the array:

<?php
    echo "System: {$phpinfo['phpinfo']['System']}<br />\n";
    echo "Safe Mode: {$phpinfo['PHP Core']['safe_mode'][0]}<br />\n";
    echo "License: {$phpinfo['PHP License'][0]}<br />\n";
?>

To display everything:

<?php
    foreach($phpinfo as $name => $section) {
        echo "<h3>$name</h3>\n<table>\n";
        foreach($section as $key => $val) {
            if(is_array($val))
                echo "<tr><td>$key</td><td>$val[0]</td><td>$val[1]</td></tr>\n";
            elseif(is_string($key))
                echo "<tr><td>$key</td><td>$val</td></tr>\n";
            else
                echo "<tr><td>$val</td></tr>\n";
        }
        echo "</table>\n";
    }
?>

mfg S
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Da sind definitiv statt einfacher (') und doppelter (") solche Zeichen drin: \' und \". Die werden dann nicht richtig vom PHP verstanden, weil maskiert. Es kann sein, dass du die mit deinem Editor gar nicht siehst, weil die erst beim Wegschreiben auf die Platte erzeugt werden.

Schau die die Dateien mit dem vi an. Der vi ist unbestechlich (und darüber hinaus ein wirklich fantastischer Editor, bei dem man auch nach Jahren noch etwas lernen kann :D - ist fast so wie Word; auch da lernt man immer wieder was dazu, was in Word nicht geht :D)

itari
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat