PHP debugging in der Javascript console

Eine Aufgabe die einem immer mal wieder über den weg läuft ist das man bei einem Fertigen Produkt, nachträglich etwas debuggen muss. Nun kann man nicht einfach an der Live Version herum doktern und irgendetwas ausgeben. Hier kann einem die JavaScript console helfen. Diese ist für den normalen Nutzern nicht sichtbar und somit wunderbar geeignet für diesen Job.  Hier mal ein kleines beispiel wie eine solche debug Klasse aus sehen könnte.

 

 

class DebugConsole {
    public static function debug($name, $var = null) {
        echo '<script type="text/javascript">'.PHP_EOL ;

        /// this is for IE and other browsers w/o console
        echo 'if (!window.console) console = {};';
        echo 'console.log = console.log || function(){};';
        /// end of IE    

        echo 'console.log("'.$name.'");'.PHP_EOL ;    

        if (!empty($var)) {
            if (is_object($var) || is_array($var)) {
                $object = json_encode($var);
                echo 'var object'.preg_replace('~[^A-Z|0-9]~i',"_",$name).' = \''.str_replace("'","\'",$object).'\';'.PHP_EOL ;
                echo 'var val'.preg_replace('~[^A-Z|0-9]~i',"_",$name).' = eval("(" + object'.preg_replace('~[^A-Z|0-9]~i',"_",$name).' + ")" );'.PHP_EOL ;
                echo 'console.log(val'.preg_replace('~[^A-Z|0-9]~i',"_",$name).');'.PHP_EOL ;    

            } else {
                echo 'console.log("'.str_replace('"','\\"',$var).'");'.PHP_EOL ;
            }
        }
        echo '</script>'.PHP_EOL ;
    }
}


Server Umzug

Nach etlichen Problemen mit meinem alten Hoster haben ich mich Heute dazu entschlossen, den Hoster zu wechseln. Noch ist nicht alles eingerichtet aber die Grundstruktur steht soweit. Ich habe mich diesmal für einen Linux Server entschieden, um genauer zu sein CentOS Server.

 

Ich muss sagen ich bis jetzt Positiv überrascht wie zackig und unkompliziert das ganze bis jetzt verlaufen ist. Schauen wir mal was die Zukunft bringt.


Remote Desktop Server unter Linux

Oft kommt Heutzutage auch in Firmen Linux Server zum Einsatz, wäre es dann nicht schön wen man auch dort ein Remote Desktop Verbindung aufbauen Könnte? Kein Problem dank xrdp.

 

Herunterladen

Wir gehen auf die Seite von xrpd (http://www.xrdp.org/) und laden uns die aktuelle Version Herunter und speichern sie Local.

 

Installation

terminalAsRootNun öffnen wir ein Terminal Fenster und navigieren ins Download Verzeichnis und melden uns als root an.

 

 

 

 

 

 

 

 

 

 

 

 

 

tarIm Anschluss entpacken wir das heruntergeladene tar Packet.

 

 

 

 

 

 

 

 

 

 

Bevor nun aber mit der Installation anfangen können müssen wir noch sicher stellenden das einige Pakete installiert sind. Dazu führen wir folgenden yum Befehl aus, sodass fehlende Pakete installiert werden.

yum

 

Nun können wir mit der eigentlichen Installation beginnen. Hierzu müssen wir erst einmal die in das zuvor entpacke Verzeichnis wechseln.

 

changedir

 

bootHier sehen wir eine ausführbare Datei und zwar bootstrap. Diese führen wir mir ./bootstrap aus.

 

 

 

 

 

 

 

 

 

 

 

 

 

configuareIm anschluss führen wir die configure aus und zwar mit ./configure

 

Jetzt müssen wir das ganze nur noch kompilieren und installieren. Dies machen wir mit

 

make

 

make install

 

 

 

 

 

 

friewallWenn die Installation fertig ist müssen wir die Firewall anpassen damit der Server auch von Außen erreichbar ist. Hierzu öffnen wir die Firewall seetings unter System –> Adminisration –> Firewall.

 

Hier führen wir den port 3389 unter Andere Ports sowohl für udp als auch tcp hinzu. Dann auf Anwenden klicken um die Einstellungen zu übernehmen.

 

 

 

 

 

 

Nun müssen wir noch dafür sorgen, dass er beim System Start geladen wird. Dazu müssen wir die xrdp.sh Datei ins das init.d Verzeichnis kopieren und den Service hinzufügen.

 

cp /etc/xrdp/xrdp.sh /etc/init.d/

chkconfig –add xrdp.sh

 

Jetzt können wir das System Neustarten oder den Service manuell starten um unsere Einstellungen zu testen.

 

/etc/xrdp/xrdp.sh start

 

 

rdpverbindung


web api Sicherheit

Web api oder Sicherheit? Daten Klau leicht gemacht! Bei einem recht Bekannten online Singlebörsen, lassen sich sämtliche Daten eines Users inklusive Profil Bild heraus ziehen und das ohne Angemeldet zu sein. Wie kann so etwas passieren? Ganz einfach der Entwickler hat schlicht und einfach vergessen zu überprüfen von wem der api request kommt. Dabei ist es so einfach! Beispiel PHP:

Hier muss einfach überprüft werden ob zum eine Session variable gesetzt ist.

 

<?php
session_start();

if{!empty($_SESSION['sessionVariable']) &&  $_SESSION['sessionVariable'] === true){

//do some api stuff

}else{
	echo "Zugriff verweigert";
}
?>

 

Wie man sieht nicht besonders schwierig.

Noch leichter geht es mit ASP.net

 

 

public class ApiRequest : ApiController 
    {
	 		[Authorize]
        	public returnTYP Get()
        	{
            //do some api stuff and retrun it
        	}
    }

 

 

Hier muss lediglich das [Authorize] Attribut gesetzt werden.

 

Doch wen es so einfach ist wie kann es dann sein das solche Fehler immer wieder auftauchen? Die Antwort darauf ist ganz einfach. Schlampige Programmierer und/oder schlechte Kommunikation innerhalb des Entwickler Teams .


Ajax file upload mit jQuery

Um das hochladen von Dateien ohne eine neue Seite aufzurufen benötigen wir ein bisschen Hilfe. Hierzu benutzen wir die JavaScript Libary jQuery. Es ist auch ohne möglich jedoch Erleichtert jQuery einem das leben enorm.

 

Zunächst brauchen wir ein html form. Jedoch ersetzen wir den üblichen submit button durch einen normalen button.

 

<form id='uploader' enctype='multipart/form-data'>
<input name='file' type='file' />
<input type='button' value='Upload' />
</form>
<progress></progress> 

 

Um nun die Datei an den Server zu schicken, müssen wir das click event des buttons abfangen und de Datei per ajax an das php script zu schicken. Hierzu holen wir uns die form daten und speichern sie Temporär in einer variable. Anschließend benutzen wir das ajax Objekt von jQuery um die daten zu versenden.

 

$(':button').click(function(){
            var formData = new FormData($('#uploader')[0]);
            $.ajax({
                url: 'upload.php',  //server script to process data
                type: 'POST',
                xhr: function() {  // custom xhr
                    myXhr = $.ajaxSettings.xhr();
                    if(myXhr.upload){ // check if upload property exists
                        myXhr.upload.addEventListener('progress',progressHandlingFunction, false); 
                        // for handling the progress of the upload
                    }
                    return myXhr;
                },
                //Ajax events
                //beforeSend: beforeSendHandler,
                //success: completeHandler,
                //error: errorHandler,
                // Form data
                data: formData,
                //Options to tell JQuery not to process data or worry about content-type
                cache: false,
                contentType: false,
                processData: false
            });
        });

 

Das php Skript sieht wie folgt aus:

 

<?php

$jahr = date('Y');
$mon = date('m');

$uploaddir = 'uploads'.DIRECTORY_SEPARATOR.$jahr.DIRECTORY_SEPARATOR.$mon.DIRECTORY_SEPARATOR;


if (! file_exists($uploaddir)) {
    mkdir($uploaddir);
}  

$uploadfile = $uploaddir . basename($_FILES['file']['name']);

//move_uploaded_file ist die Standard PHP-Funktion um Dateien auf dem Server zu verarbeiten
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
  echo str_replace("\\", "/", $uploadfile);
} else {
  // Als echo keinesfalls false benutzen. Führt zu Konflikten mit dem Ajax-Request
  echo "error";
}

?>