Hallo, Gast |
Du musst dich registrieren bevor du auf unserer Seite Beiträge schreiben kannst.
|
Aktive Themen |
Kaufen Sie ein TELC-GOETH...
Forum: Off Topic
Letzter Beitrag: awajonn11
12.04.2024, 13:37
» Antworten: 0
» Ansichten: 125
|
Kaufen Sie ein TELC-GOETH...
Forum: PHP Basics
Letzter Beitrag: awajonn11
12.04.2024, 13:35
» Antworten: 0
» Ansichten: 57
|
PHPMailer Pfad wird nicht...
Forum: PHP Basics
Letzter Beitrag: Arne Drews
23.08.2022, 21:07
» Antworten: 5
» Ansichten: 2.846
|
PHP 8.1: Endlich Enums in...
Forum: PHP Basics
Letzter Beitrag: Arne Drews
22.04.2021, 16:55
» Antworten: 1
» Ansichten: 2.682
|
Einfache Template Engine
Forum: PHP Template Engines
Letzter Beitrag: Arne Drews
22.04.2021, 16:49
» Antworten: 4
» Ansichten: 11.029
|
OAuth - Should I "scrambl...
Forum: Off Topic
Letzter Beitrag: Till
05.01.2020, 04:55
» Antworten: 0
» Ansichten: 7.865
|
"Invisible" Captcha
Forum: PHP Basics
Letzter Beitrag: Arne Drews
11.12.2019, 15:00
» Antworten: 5
» Ansichten: 10.390
|
Projektvorstellung - Test...
Forum: Off Topic
Letzter Beitrag: Till
22.11.2019, 20:03
» Antworten: 3
» Ansichten: 5.643
|
POST/GET routes deklarier...
Forum: PHP Basics
Letzter Beitrag: Till
14.11.2019, 19:44
» Antworten: 2
» Ansichten: 4.678
|
PHPMailer
Forum: PreComposed
Letzter Beitrag: Arne Drews
20.10.2019, 12:44
» Antworten: 6
» Ansichten: 8.605
|
|
|
$.ajax - JSONP vs. JSON - parse error |
Geschrieben von: Till - 23.02.2016, 17:04 - Forum: JavaScript / JavaScript Frameworks / Ajax
- Antworten (3)
|
|
Ich habe einen Ajax Request (API, bisher ohne diese Probleme im Einsatz) welcher eigentlich problemlos funktioniert.
Wenn ich allerdings bei einer bestimmten Funktion JSONP benutze wirft der jQuery Error Handler einen "parsererror", also bei
Das eigentliche Script funktioniert allerdings! D.h. die Daten werden korrekt der callback Funktion übergeben und die Funktionalität ist eigentlich gegeben bis auf diese unschöne Fehlermeldung.
Wenn ich einen "normalen" ajax request verwende, also
erscheint auch die Fehlermeldung nicht, es wird allerdings natürlich auch das callback nicht ausgeführt und das script nicht injeziert.
Ist das ein jQuery Problem oder mache ich da irgendwas falsch?
Und ist es nicht so, daß bei einem jsonp request jQuery das result eigentlich gar NICHT parsen muß, dies sollte doch eigentlich alles von der callback Funktion gehandelt werden?
Es solllte hier doch eigentlich gar kein ajax request stattfinden sondern eine script injektion?
Oder macht jQuery das nicht automatisch, sollte ich überhaupt $.ajax für jsonp requests verwenden oder einen anderen/eigenen wrapper, vielleicht ist es eigentlich nicht dafür angedacht?
|
|
|
HTML E-Mails versenden mit dem SwiftMailer |
Geschrieben von: Arne Drews - 21.02.2016, 23:00 - Forum: Tutorials
- Keine Antworten
|
|
HinweisDie aktuelle Version des SwiftMailer ist im Standard nur noch als Installation über composer gedacht. Einige kennen meine Ansicht über den Zwang dieses Tool benutzen zu müssen. Das Tool ist gut für seinen Zweck, aber es ist eine Schande, dass Einsteiger/Anfänger gezwungen werden, sich diesem anzunehmen. Ein Produkt/PlugIn sollte aus meiner Sicht für jeden Anwender mit einfacher Anleitung installierbar sein ohne weitere Tools dafür einsetzen zu müssen!
Wer keinen Composer installieren möchte oder kann, hat die Möglichkeit auf PHProcks! ein PreComposed Package herunterzuladen. Dieses Package ist mit Composer erstellt worden und kann direkt verwendet werden. Es ist kein Composer zur Nutzung notwendig.
Den Download findet ihr hier: SwiftMailer | PreComposed Package
Die Nutzung ist dann wieder wie unten unter Das Transport-Objekt beschrieben.
HTML E-Mail versenden mit dem SwiftMailer
Dieses Tutorial soll den SwiftMailer als Alternative zum PHPMailer kurz vorstellen. Eine Ausführung, warum man generell eine Mailer-Klasse verwenden sollte, findet ihr in diesem Tutorial, so dass wir an dieser Stelle nicht weiter darauf eingehen wollen.
Wie implementiere ich den SwiftMailer?
Um den SwiftMailer in euer Projekt einzubinden, müsst ihr die aktuelle Version notwendigen Pakete herunterladen und auf eurem Webspace hinterlegen. Wir gehen mal davon aus, dass ihr den Inhalt des Downloads in das Verzeichnis swiftmailer/ abgelegt habt.
Wie fange ich an?
Der SwiftMailer bietet uns verschiedene Klassen, die wir nicht immer auch alle benötigen. Daher ist es wichtig, daß wir den Autoloader vom SwiftMailer in unser Projekt einbinden:
PHP-Code:
include_once __DIR__ . '/swiftmailer/swift_required.php';
Damit haben wir den Grundstein gelegt, SwiftMailer in unserem Projekt nutzen zu können.
Grundsätzlich benötigen wir beim SwiftMailer drei Objekt-Instanzen:
Swift_MailTransport
Swift_SendmailTransport
Swift_SmtpTransport
Swift_Message
Swift_Mailer
Das Transport-Objekt
Mit dieser Objekt-Instanz definieren wir die Methode, wie wir die Mail versenden wollen. Wir können dies über die gewöhnliche mail() -Funktion von PHP machen, den MailerDeamon sendmail nutzen oder die Mail direkt über SMTP versenden. Für dieses Tutorial entscheiden wir uns grundsätzlich mal für die SMTP -Variante, damit wir auch ein wenig konform zu dem PHPMailer-Tutorial bleiben.
Wir instanziieren also ein Objekt der Klasse Swift_SmtpTransport und setzen die erforderlichen Auth-Parameter:
PHP-Code:
$oTransport = Swift_SmtpTransport::newInstance( 'mail.example.com', 587 ); $oTransport->setUsername( 'auth@example.com' ); $oTransport->setPassword( 'yourpassword' );
Damit wäre das auch schon erledigt. Für die korrekten Angaben des Mail-Servers müsst ihr euch bei eurem Provider informieren.
HinweisSolltet ihr die Daten nicht wissen, nutzt am besten die Swift_MailTransport -Klasse:
PHP-Code:
$oTransport = Swift_MailTransport::newInstance();
Die Verwendung der Swift_SendmailTransport -Klasse erfordert die Angabe des sendmail -Pfades, sofern dieser vom Standard /usr/sbin/sendmail abweicht.
Das Message-Objekt
Als nächstes wollen wir uns ein Message-Objekt erstellen:
PHP-Code:
$oMessage = Swift_Message::newInstance();
Diesem Objekt teilen wir nun die Einzelheiten unseres Mail-Headers, sowie des Mail-Contents mit. Für den Mail-Header wollen wir uns auf die notwendigsten festlegen:
PHP-Code:
$oMessage->setFrom( 'phprocks@example.com' ); $oMessage->setTo( 'max.mustermann@example.com', 'Max Mustermann' ); $oMessage->setCc( 'maria.mustermann@example.com', 'Maria Mustermann' ); $oMessage->setSubject( 'PHProcks! Tutorials - less time to learn more' );
Wir haben jetzt den Absender, den Empfänger, einen Empfänger in Kopie und den Betreff an das Message-Objekt gebunden.
Als nächstes wollen wir den Content, also den Mail Inhalt an das Objekt übergeben:
PHP-Code:
$oMessage->setBody( '<h1>PHProcks!</h1><h2>Tutorial: HTML E-Mail senden mit SwiftMailer</h2>', 'text/html' ); $oMessage->addPart( strip_tags($oMessage->getBody()), 'text/plain' );
Wie man erkennen kann, können wir dem Message-Objekt über den zweiten Parameter direkt mitteilen, um was für einen Content-Type es sich handelt.
HinweisDie Methode addPart() bietet uns auf einfache Weise die Möglichkeit, alternativen Content in die Mail zu setzen. Dies kann nützlich sein, wenn bspw. unsere Mail hauptsächlich per HTML angezeigt werden soll, aber der Empfänger die HTML-Ansicht deaktiviert hat. In diesem Fall würde der Teil, den wir mit addPart( [content], 'text/plain' ) an die Mail gehängt haben greifen. Der alternative PlainText-Part sollte im Idealfall eigenen Content besitzen. Die Funktion strip_tags() wurde für dieses Tutorial nur der Einfachheit genutzt.
Nu' aber: Versenden der Mail über das Mail-Objekt
Wir haben nun alle Vorbereitungen soweit abgeschlossen. Wir haben festgelegt, wie unsere Mail versendet werden soll und was unsere Mail eigentlich an Inhalt hat. Jetzt muss diese nur noch versendet werden.
Wir instanziieren ein Mail-Objekt und übergeben diesem direkt unser Transport-Objekt:
PHP-Code:
$oMailer = Swift_Mailer::newInstance( $oTransport );
Das Senden der Mail erfolgt über die send() -Methode:
PHP-Code:
if ( !$oMailer->send($oMessage) ) {
echo 'Something\'s went wrong!'; exit;
}
echo 'Yes! First Mail with SwiftMailer sent successfully!';
Das komplette Script zur Übersicht
Um einmal im Ganzen zu schauen, was wir gemacht haben, poste ich hier nochmal das gesamte Script aus diesem Tutorial:
PHP-Code:
// SwiftMailer Autoloader einbinden include_once __DIR__ . '/swiftmailer/swift_required.php';
// Das Transport-Objekt $oTransport = Swift_SmtpTransport::newInstance( 'mail.example.com', 587 ); $oTransport->setUsername( 'auth@example.com' ); $oTransport->setPassword( 'yourpassword' );
// Das Message-Objekt $oMessage = Swift_Message::newInstance(); $oMessage->setFrom( 'phprocks@example.com' ); $oMessage->setTo( 'max.mustermann@example.com', 'Max Mustermann' ); $oMessage->setCc( 'maria.mustermann@example.com', 'Maria Mustermann' ); $oMessage->setSubject( 'PHProcks! Tutorials - less time to learn more' ); $oMessage->setBody( '<h1>PHProcks!</h1><h2>Tutorial: HTML E-Mail senden mit SwiftMailer</h2>', 'text/html' ); $oMessage->addPart( strip_tags($oMessage->getBody()), 'text/plain' );
// Das Mailer-Objekt $oMailer = Swift_Mailer::newInstance( $oTransport );
// Versenden der Mail und prüfen, auf Versendet if ( !$oMailer->send($oMessage) ) {
echo 'Something\'s went wrong!'; exit;
}
echo 'Yes! First Mail with SwiftMailer sent successfully!';
HinweisDie Möglichkeiten des SwiftMailer sind natürlich noch sehr viel größer, als hier dargestellt. Da es sich hierbei aber um ein Einsteiger-Tutorial handeln soll, werde ich darauf nicht weiter eingehen.
|
|
|
Eval is a nicve feature - Eine Provokation |
Geschrieben von: Till - 16.02.2016, 18:18 - Forum: Off Topic
- Antworten (8)
|
|
Kann mir jemand erklären warum eval grundsätzlich böse sein soll?
Eine mögliche Gefahr sei, es könnten Benutzereingaben injeziert werden, aber liegt das an eval ansich?
Ist es nicht eher ein Fehler des Programmierers, als das es ein Fehler der Funktion selbst ist?
Wir haben folgenden konkreten Anwendungsfall 1):
http://www.php-rocks.de/thema/64-welchen-sinn-hat-eval-im-templating-.html
Hier macht es für mich keinen Sinn eval zu benutzen, ein z.B. include wäre vl. naheliegender!?!
Eval=evil=einverstanden!
Wir haben folgenden konkreten Anwendungsfall 2):
http://www.phpclasses.org/package/9071-PHP-Autoload-classes-with-PSR-0-PSR-4-mapping-etc-.html#view_files/files/60161
PHP-Code:
if(eval('$data = '.$source.';')===false)
Dies ist der einzige Fall in welchem ich jemals "produktiv" eval einsetze, eingesetzt habe(!). Es wird remote Code geladen, geprüft und dann ausgeführt.
- Würde ein abspeichern als datei und ein include den code sicherer machen? (Ich denke nicht!?!)
- Gibt es in meinem Anwendungsfall eine (sichere) Alternative zu eval?
These 1: eval ist entsprechend sicher oder unsicher, als wie es vom Programmierer verwendet wird.
------------------------------------------
These 2/Idee: Wann wird eval evaluiert, beim parsen oder zur Laufzeit, kann man "lazy loading" damit realisieren?
------------------------------------------
These 3: Eval is a nicve feature.
------------------------------------------
So, nun bitte ich die Experten um eine Erklärung (damit auch ich es verstehe)...
|
|
|
Best Practice für Response-Objekte |
Geschrieben von: Scarabaeus - 09.02.2016, 17:46 - Forum: PHP Professional
- Antworten (8)
|
|
Moin Moin
normalerweise setze ich meine Projekte mit Laravel um, aber jetzt steht bei mir auf Arbeit ein Projekt an, für welches Laravel schlicht zu groß / zu umfangreich ist. Für solche Fälle habe ich schon vor geraumer Zeit angefangen mir quasi eine Mikro-Version von Laravel zu basteln (jaja - ich hätte auch gleich ein existierendes Micro-Framework oder Lumen nutzen können ). Gleichzeitig will ich - so zumindest mein Plan - mittels dieses Mikro-Laravels meine Kollegen, die sich beharrlich weigern für Großprojekte ein anständiges PHP-Framework zu nutzen, gewissermaßen auf die sanfte Tour an Laravel ranführen.
Die ganze Geschichte die ich mir zurecht geschrieben habe funktioniert auch wunderbar, nur bräuchte ich an einer Stelle mal andere Meinungen als meine eigene. Konkret geht's um mein Response-Objekt, welches ich mir ab Framework-Start erzeuge. Meine Controller können, je nachdem was in den Methoden steht, entweder ein View-Objekt, ein Response-Objekt, ein Redirect-Objekt oder im ganz simpelstem Fall einen String zurückgeben. Sieht ganz ähnlich wie in Laravel aus:
PHP-Code:
// Controller gibt ein View-Objekt zurück return view('test')->with([ 'foo' => 'bar' ]);
// Controller gibt ein Response-Objekt zurück return response()->json([ 'foo' => 'bar' ]);
// Controller gibt ein Redirect-Objekt zurück return redirect('foo')->with([ 'bar' => 'barfoo' ]);
// Controller gibt einen String zurück return 'FooBar';
Diese Rückgabewerte wandern dann in die am Framework-Start erstellte Response-Instanz, die letztlich entscheidet was dem Client zurückgegeben wird und genau zu diesem Schnipsel hätte ich gerne ein paar Meinungen, denn so ganz zufrieden bin ich damit nicht. Nebenbei bemerkt: Es funktioniert alles so wie angedacht. Von daher besteht in der Hinsicht momentan kein Handlungsbedarf. Mir geht's in dem Punkt um die - wie im Titel schon erwähnten - Best Practices in dem Fall.
PHP-Code:
public function __destruct() {
// Wenn Controller ein View-Objekt zurückgegeben hat if($this->response instanceof View) { $this->responseContent = $this->response->render(); echo $this->responseContent; session()->forget('_flashed'); }
// Wenn Controller ein Redirect-Objekt zurückgegeben hat if($this->response instanceof Redirect) { header('Location: ' . config('app.url') . '/' . $this->response->getTo()); }
// Wenn Controller ein Response-Objekt zurückgegeben hat if($this->response instanceof Response) { header(sprintf('HTTP/%s %s %s', '1.1', $this->httpStatusCode, ''), true, $this->httpStatusCode);
foreach($this->headers as $flag => $value) { header($flag.':'.$value, true, $this->httpStatusCode); }
echo $this->responseContent; session()->forget('_flashed'); }
// Wenn Controller kein Objekt (zb. einen String) zurückgegeben hat if(!is_object($this->response)) { echo $this->response; session()->forget('_flashed'); } }
Grüße
|
|
|
Developer Tool für Google Chrome inkl. mobile Extension |
Geschrieben von: Arne Drews - 25.01.2016, 09:50 - Forum: Off Topic
- Antworten (4)
|
|
Hallo,
Ich bin es gewohnt, daß ich an meinem Rechner zu Hause unter der Google Chrome Developer-Konsole auf ein kleines Smartphone-Symbol klicken kann, worauf hin ich eine Grid-Oberfläche mit ca. 15 bis 20 ( habe ich jetzt nicht gezählt ) mobile Devices zwecks Preview bekomme. Die Previews waren bisher eigentlich immer recht zuverlässig.
Nun wollte ich mal eben etwas anpassen, sitze aber an einem anderen Rechner.
Gleicher Browser und gleiche Version. Aber das Developer-Tool zeigt mir hier dieses Smartphone-Symbol nicht an?!
Weiß jemand, ob und wenn ja, was ich dafür installieren muß?
Evtl. ist das auch nur eine Einstellung, keine Ahnung.
Vielleicht kann ja jemand helfen.
Danke und Gruß
Arne
EDIT: Dieses Teil meine ich:
[Bild: http://www.php-rocks.de/uploads/private/chrome-developer.jpg]
|
|
|
AngularJS asynchronous/defered bootstrapping |
Geschrieben von: Till - 24.01.2016, 23:46 - Forum: JavaScript / JavaScript Frameworks / Ajax
- Antworten (2)
|
|
Hallo,
bin relativ neu bei AngularJS, möchte mehr lernen und das framwork gerne verwenden.
Vorneweg: Laut docs soll pro HTML Document nur EINMAL ng-app verwendet werden.
Um diese Einschränkung zu umgehen verwende ich die directive http://stackoverflow.com/questions/22548610/can-i-use-one-ng-app-inside-another-one-in-angularjs und den ng-modules Ansatz (bei mir ng-flow): https://github.com/luisperezphd/ngModule/blob/master/angular.ng-modules.js
Sieht nun bei mir so aus: https://github.com/frdl/-Flow/blob/master/api-d/4/js-api/library.js/core/plugin.flow.js
Die Funktion frdl.UI.widget ist hier der entscheidende Part?
Zum Problem: Wenn ich die Seite das erste mal lade, alles OK.
Wenn ich die Seite nochmal lade (per Linkklick z.B.), werden die angular templates nicht korrekt kompilliert.
Wenn ich dann den Browsercache lösche und neu lade, oder nach einer Weile neu lade geht es wieder.
Kann jemand das Problem nachvollziehen:
http://shell.frdl.de/?test=component&component=webfan/marketplace
oder ein anderes Beispiel:
http://shell.frdl.de/?test=component&component=webfan/nachrichten
Meine These ist, das Template wird zu früh (und damit erfolglos) kompilliert, wenn das js-angular-modul noch nicht geladen ist?
Problematisch scheint auch zu sein, wenn ich, wie zunächst beabsichtigt, nicht einzelne angular.module erstelle sondern nur controller und directives dem bereits geladenen "Haupt-" Modul hinzufüge!?
Irgendwie scheine ich dem Problem auf der Spur, mir fehlt aber wohl noch die entscheidende Einsicht.
Viele Grüße
Till
Edit: Dabei macht es einen Unterschied, ob ich in die Browserleiste klicke und Enter drücke, oder den Browser-refresh-btn klicke um die Seite neu zu laden?
Edit: Mh, klappt nur bedingt, bzw. wenn die Seite geladen wurde muß ich wieder "ganz manuell" bootstrappen?
|
|
|
Bildpfad wird nicht gefunden, ist aber existent |
Geschrieben von: Arne Drews - 24.01.2016, 02:03 - Forum: HTML & CSS
- Antworten (6)
|
|
Hallo,
Ich finde gerade meinen Fehler nicht und hoffe, jemand stößt mich drauf, gerne auch mit Schwung...
Also in einer simplen HTML-Datei ( index.html im Webroot ) soll ein Bild angezeigt werden:
Code:
<div class="logo"><img src="images/logo.png" alt=""></div>
Das Bild ist auch tatsächlich über diesen Pfad zu finden:
[Bild: http://php-rocks.de/uploads/images-logo.jpg]
Ich entdecke auch keinen Tippfehler.
Die Rechte stimmen, alles weitere, wie CSS, JS usw. wird auch geladen und haben die gleichen Rechte.
Browser-Cache habe ich auch geleert.
Kein einziges Bild aus dem Ordner wird angezeigt, ganz egal, welches ich hochlade.
Es wird sicher mein Fehler sein, aber welcher?
Danke und Gruß
Arne
EDIT: Das erscheint mir mehr als kurios. Wenn ich Ordner umbenenne in bspw. "media", werden die Bilder geladen.
Auch wenn ich "media/images" mache. Er scheint mit dem Verzeichnisnamen "images" im Webroot nicht zurechtzukommen.
Kann das sein? Webserver ist nginx 1.6.2
|
|
|
W3C Web Intends |
Geschrieben von: Till - 21.01.2016, 03:26 - Forum: Off Topic
- Antworten (2)
|
|
Hat das schonmal jemand ausprobiert? Kann mir jemand eine Implementation zeigen (service register/intent)?
Was haltet Ihr im allgemeinen davon?
Lohnt es sich überhaupt die Sache weiter zu verfolgen, bzw. sollte ich noch warten bis die Sache ausgereifter ist?
https://www.w3.org/TR/web-intents/
http://webintents.org/
http://webintents.org/webintents.js
Ich verstehe den Ablauf noch nicht so ganz, bzw. habe ich kein Beispiel vor Augen.
In den W3C Beispielen habe ich im FF keine Services zur Auswahl, mir ist die "Registrierung" auch noch nicht so ganz klar, also daß ich services auf anderen Seiten zur Auswahl habe.
|
|
|
Kleiner Bug... |
Geschrieben von: Till - 19.01.2016, 15:56 - Forum: Off Topic
- Antworten (1)
|
|
Wenn ich als Gast die Seite runterscrolle und dann auf "Anmelden" klicke, ist die Anmeldebox nicht auswählbar (dunkel).
Im Firefox.
|
|
|
|