PHP rocks! wünscht allen Mitgliedern einen guten Rutsch ins neue Jahr 2017 !!!
Hinweis: Das Forum zieht um! Um keine Datenverluste zu haben, schalten wir zwecks Übernahme der Daten das Forum am Sonntag, den 24.04.2016 um ca. 21:00 Uhr offline und passen anschliessend die DNS-Einträge an.
www.php-rocks.de wird euch dann nach den Aktualisierungen der DNS-Server wieder wie gewohnt uneingeschränkt zur Verfügung stehen.
Danke für euer Verständnis!

Hallo, Gast
Du musst dich registrieren bevor du auf unserer Seite Beiträge schreiben kannst.

Benutzername/E-Mail:
  

Passwort
  





Durchsuche Foren

(Erweiterte Suche)

Foren-Statistiken
» Mitglieder: 291
» Neuestes Mitglied: awajonn11
» Foren-Themen: 171
» Foren-Beiträge: 901

Komplettstatistiken

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

Code:
dataType: 'jsonp'
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
Code:
dataType: 'json'
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?

Drucke diesen Beitrag

  HTML E-Mails versenden mit dem SwiftMailer
Geschrieben von: Arne Drews - 21.02.2016, 23:00 - Forum: Tutorials - Keine Antworten

Hinweis
Die 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.
Hinweis
Solltet 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->addPartstrip_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.
Hinweis
Die 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->addPartstrip_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!'
Hinweis
Die 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.

Drucke diesen Beitrag

  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)...

Drucke diesen Beitrag

  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 Big Grin). 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.':'.$valuetrue$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

Drucke diesen Beitrag

  GitHub down
Geschrieben von: Till - 28.01.2016, 03:45 - Forum: Off Topic - Antworten (2)

GitHub ist down Sad

Drucke diesen Beitrag

  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]

Drucke diesen Beitrag

  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?

Drucke diesen Beitrag

  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...  Big Grin

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

Drucke diesen Beitrag

  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.

Drucke diesen Beitrag

  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.

Drucke diesen Beitrag