Sida 1 av 3

Köra en php sida lokalt i pc?

Postat: 18 augusti 2019, 13:00:58
av Mygg@n
Har hittat en sida jag skulle vilja köra för att analysera ett eeprom från en bil
hur kan jag köra denna sida lokalt utan server?

https://github.com/sebauer/web-tom/blob ... eeprom.php

Kod: Markera allt

<style>
body {
	color: white;
}
</style>
<?php
echo "<pre>";
var_dump($_POST);
echo "</pre>";
require_once('../includes/bootstrap.php');
chdir('..');

if($_FILES['eeprom']['tmp_name'] == ''){
    jsCallback('Es wurde kein EEPROM Dump hochgeladen!', true);
    die();
}
$requestId = md5(serialize($_POST).serialize($_FILES).microtime());
$eeprom = _EEPROMUPLOAD.'tmp'.$requestId.'.bin';

if(!move_uploaded_file($_FILES['eeprom']['tmp_name'], $eeprom)){
    jsCallback('Dateiuploads konnten nicht verarbeitet werden!', true);
    die();
}

if(filesize($eeprom)!=_EEPROM_SIZE){
    jsCallback('Unerwartete Dateigröße des hochgeladenen EEPROM Dumps!');
    die();
}
$fileName = $_FILES['eeprom']['name'];
$output = "<h3>EEPROM Analyzer Ausgabe für Datei: {$fileName}</h3><br /><dl>";

// DO ANALYITCAL STUFF
$byteDefinitions = array(
    "model"         =>  array( "35", "37" ),
    "type"          =>  array( "38", "3A" ),
    "side"          =>  array( "3B", "3B" ),
    "FIN"           =>  array( "32", "42" ),
    "idcode"           =>  array( "0A", "19" ),
    "fahrzaehler"   =>  array('6C', '6D'),
    "writes"        =>  array("F2", "F2"),
    "scn"           =>  array("05", "06"),
    "features"      =>  array('07', '07'),
    "schluesselcode" =>  array('A4', 'A5'),
    "wegfahrsperre" =>  array('52', '52'),
    "wegfahrsperre1" =>  array('B4', 'B5'),
    "wegfahrsperre2" =>  array('B6', 'B7'),
    "key"           =>  array('56', '56'),
    "keycode"       =>  array('5C', '5D'),
    "adaption"      =>  array('E3', 'E6'),
    "kupplungsc1" =>  array('9A', '9B'),
    "kupplungsc2" =>  array('9C', '9D'),
    "kupplungsc3" =>  array('9E', '9F'),
    "kupplungsc3zeit" =>  array('A2', 'A3'),
    "fehlercode" =>  array('B6', 'B6'),
    "zaehler" =>  array('A0', 'A1'),
    "killbytes" =>  array('96', '97')
);

$valueList = array(
    "model" =>  array(
        "452"   =>  "Smart Roadster",
        "450"   =>  "Smart ForTwo"
        ),
    "type"  =>  array(
        "332"   =>  " Coupé, 45kW",
        "334"   =>  " Coupé, 60kW",
        "337"   =>  " Coupé, 74kW (Brabus)",
        "434"   =>  "60kW",
        "432"   =>  "45kW",
        "437"   =>  "74kW (Brabus)"
        ),
    "side"  =>  array(
        "1" => "Linkslenker",
        "2" => "Rechtslenker"
        ),
    "features"  =>  array(
        "Smart",
        "Schaltwippen",
        "Servolenkung",
        "Tempomat",
        "Softtip",
        "unbekannt (Bit6)",
        "ohne Klimaanlage",
        "unbekannt (Bit8)"
        ),
    "scn0"  =>  array(
        "",
        "SCN5: ??? (Bit 2)",
        "",
        "",
        "",
        "SCN5: ohne Klima (Bit 6)",
        "SCN5: SB2 (Bit 7)",
        "SCN5: Roadster (Bit 8)"
        ),
    "scn1"  =>  array(
        "",
        "",
        "",
        "SCN6: 45kW (Bit 4)",
        "SCN6: 60kW (Bit 5)",
        "",
        "SCN6: 74kW (Bit 7)",
        ""
        )
        );

        $sEeprom = fopen($eeprom, 'r');

        $model = '';
        foreach( $byteDefinitions as $name => $pos ) {

            $start = hexdec($pos[0]);
            $end = hexdec($pos[1]);
            $length = ($end-$start)+1;

            fseek($sEeprom, $start);
            $value = fread($sEeprom, $length);
            switch( $name ) {
                case "model":
                    $model = $valueList["model"][$value];
                    break;
                case "type":
                    $output .= "
                        <dt>Modell</dt>
                        <dd>$model ".$valueList["type"][$value]."</dd>";
                    break;
                case "FIN":
                    $output .= "
                        <dt>FIN</dt>
                        <dd>$value</dd>";
                    break;
                case "idcode":
                    $output .= "
                        <dt>ID Code (SCN)</dt>
                        <dd>$value</dd>";
                    break;
                case "writes":
                    fseek($sEeprom, hexdec('ED'));
                    $ed = fread($sEeprom, 1);
                    $ed = ord($ed);
                    if($ed == hexdec("FF")){
                        $output .= "
                            <dt>MEG Flashes (Tuningfiles)</dt>
                            <dd>".ord($value)."</dd>";
                    } else {
                        $output .= "
                        <dt>MEG Flashes (sC)</dt>
                        <dd>".ord($value)."</dd>";
                    }
                    break;
                case "features":
                    $value = getBinaryString($value);
                    $featuresArray = array_reverse($valueList['features']);
                    $resultsArray = array();

                    for($i=0;$i<strlen($value);$i++){
                        if($value[$i]=='1'){
                            $resultsArray[] = $featuresArray[$i];
                        }
                    }
                    $resultsArray = array_reverse($resultsArray);
                    $featureString = implode(', ', $resultsArray);
                    $output .= "
                        <dt>Features:</dt>
                        <dd>$featureString</dd>";
                    break;
                case "scn":
                    $scnBytes = str_split($value, 1);

                    $scnArray = array();

                    foreach($scnBytes as $offset => $scnByte){
                        $scnByte = getBinaryString($scnByte);
                        $scnValueList = array_reverse($valueList['scn'.$offset]);
                        for($i=0;$i<strlen($scnByte);$i++){
                            if($scnByte[$i]=='1'){
                                if($scnValueList[$i] != ''){
                                    $scnArray[] = $scnValueList[$i];
                                }
                            }
                        }
                    }
                    var_dump($scnArray);
                    $scnString = implode('<br />', $scnArray);
                    $output .= "
                        <dt>SCN Codierung:</dt>
                        <dd>$scnString</dd>";
                    break;
                case "side":
                    $output .= "
                    <dt>Fahrzeugaufbau</dt>
                    <dd>".$valueList[$name][$value]."</dd>";
                    break;
                case "wegfahrsperre":
                    $valueBinary = getBinaryString($value);
                    $valueDec = hexdec(reset(unpack('H*', $value)));
                    $output .= "
                        <dt>Wegfahrsperre:</dt>
                        <dd>Byte 0x52 = $valueBinary ($valueDec)</dd>";
                    break;
                case "wegfahrsperre1":
                    $valueDec = reset(unpack('S*', $value));
                    $output .= "
                        <dt>Wegfahrsperre I:</dt>
                        <dd>Short B4B5 = $valueDec</dd>";
                    break;
                case "wegfahrsperre2":
                    $valueDec = reset(unpack('S*', $value));
                    $output .= "
                        <dt>Wegfahrsperre II:</dt>
                        <dd>Short B6B7 = $valueDec</dd>";
                    break;
                case "key":
                    $valueDec = hexdec(reset(unpack('H*', $value)));
                    $output .= "
                        <dt>Key (???):</dt>
                        <dd>Byte 0x56 = $valueDec</dd>";
                    break;
                case "keycode":
                    $valueDec = reset(unpack('S*', $value));
                    $output .= "
                        <dt>Key Code (???):</dt>
                        <dd>Short 5C5D = $valueDec</dd>";
                    break;
                case "fahrzaehler":
                    $valueDec = reset(unpack('S*', $value));
                    $output .= "
                        <dt>Fahrzähler:</dt>
                        <dd>Short 6C6D = {$valueDec} km</dd>";
                    break;
                case "kupplungsc1":
                    $valueDec = reset(unpack('S*', $value));
                    $output .= "
                        <dt>Kupplungsschutzklasse I:</dt>
                        <dd>Short 9A9B = {$valueDec}</dd>";
                    break;
                case "kupplungsc2":
                    $valueDec = reset(unpack('S*', $value));
                    $output .= "
                        <dt>Kupplungsschutzklasse II:</dt>
                        <dd>Short 9C9D = {$valueDec}</dd>";
                    break;// kupplungsc3zeit
                case "kupplungsc3":
                    $valueDec = reset(unpack('S*', $value));
                    $output .= "
                        <dt>Kupplungsschutzklasse III:</dt>
                        <dd>Short 9E9F = {$valueDec}</dd>";
                    break;
                case "kupplungsc3zeit":
                    $valueDec = reset(unpack('S*', $value));
                    $output .= "
                        <dt>Zeit in Kupplungsschutzklasse III:</dt>
                        <dd>Short A2A3 = {$valueDec} Minuten</dd>";
                    break;
                case "zaehler":
                    $valueDec = reset(unpack('S*', $value));
                    $output .= "
                        <dt>Zähler (???):</dt>
                        <dd>Short A0A1 = {$valueDec}</dd>";
                    break;
                case "killbytes":
                    $valueDec = reset(unpack('S*', $value));
                    $output .= "
                        <dt>Kill Bytes (???):</dt>
                        <dd>Short 9697 = {$valueDec}</dd>";
                    break;
                case "schluesselcode":
                    $valueDec = reset(unpack('S*', $value));
                    $output .= "
                        <dt>Schlüsselcode:</dt>
                        <dd>Short A4A5 = {$valueDec}</dd>";
                    break;
                case "fehlercode":
                    $valueBinary = getBinaryString($value);
                    $valueDec = hexdec(reset(unpack('H*', $value)));
                    $output .= "
                        <dt>Fehlercode:</dt>
                        <dd>Byte 0xB6 = $valueBinary</dd>";
                    break;
                case "adaption":
                    $adaptionsBytes = str_split($value, 1);
                    $start = $byteDefinitions['adaption'][0];
                    $bytesOutput = array( );
                    foreach($adaptionsBytes as $key => $byte){
                        $byteVal = "0x".strtoupper(dechex(hexdec($start)+$key));
                        $valueBinary = getBinaryString($byte);
                        $valueDec = hexdec(reset(unpack('H*', $byte)));
                        $bytesOutput[] = "$byteVal\t$valueBinary ($valueDec)";
                    }
                    $output .= "
                        <dt>Adaptionswerte:</dt>
                        <dd>".implode('<br/>',$bytesOutput)."</dd>";
                    break;
                default:
                    $output .= "
            <dt>$name</dt>
            <dd>".$valueList[$name][$value]."</dd>";
                    break;
            }
        }
        $output .= '</dl>';
        echo "<div id='analysisOutput'>";
        echo $output;
        echo "</div>";
        analyzerCallback();

        function getBinaryString($value){
            return str_pad(decbin(hexdec(reset(unpack('H*', $value)))), 8, '0', STR_PAD_LEFT);
        }

        ?>

Re: Köra en php sida lokalt i pc?

Postat: 18 augusti 2019, 13:20:41
av ToPNoTCH
Nej.
Eftersom PHP är serverside. D.v.s Koden som kommer till din läsare ser inte ut så där.

Du får nog sätta upp en lokal server på din PC.

Re: Köra en php sida lokalt i pc?

Postat: 18 augusti 2019, 13:50:12
av Kulla
Installera XAMP och du har allt du behöver för att köra den.

Re: Köra en php sida lokalt i pc?

Postat: 18 augusti 2019, 13:52:53
av Mygg@n
Ok, då får jag installera XAMP, tack för info :-)

Re: Köra en php sida lokalt i pc?

Postat: 22 augusti 2019, 08:55:59
av Wedge
Det finns PHP-kompilatorer som skapar körbar kod utan att behöva blanda in en webbserver lokalt.
https://www.thefreecountry.com/compilers/php.shtml

Re: Köra en php sida lokalt i pc?

Postat: 22 augusti 2019, 10:11:00
av SeniorLemuren
Fördelen med XAMP är ju att man även får med mySQL. Jag vet nästan inget projekt med PHP jag gjort som inte talat med SQL. Även om det bara är frågan om en inloggningssida så använder jag mySQL för att spara passord och användarnamn.

Re: Köra en php sida lokalt i pc?

Postat: 22 augusti 2019, 10:33:18
av Wedge
PHP utan server är som sagt möjligt, men i det här fallet... nja...
Koden använder sig av $_POST, $_FILES, move_uploaded_file() etc, dvs mycket som är beroende av data skickas från ett webbformulär.
Dessutom skickar den ut HTML, och det kommer att se ut som skit i ett terminalfönster, om man trots allt skulle få igång den.
Räkna med en hel del omskrivningar för att göra stand-alone-kod av den.

Re: Köra en php sida lokalt i pc?

Postat: 22 augusti 2019, 10:36:52
av Glenn
Fast det är väl inget problem att köra det i en webbrowser mot lokal webserver, frågan är väl mer om man har alla grejer som används på servern.

Re: Köra en php sida lokalt i pc?

Postat: 22 augusti 2019, 10:46:19
av Wedge
TS ville undvika webbservern. Kanske för att ha en enda .exe-fil som är lätt att flytta (USB-sticka) .

Re: Köra en php sida lokalt i pc?

Postat: 22 augusti 2019, 11:03:09
av Kulla
Det är svårt att undvika den i denna fall, därför rekommenderade jag XAMPP som har inbygd webbserver, php, mysql och allt som han kan behöva.

Enklaste sätt att köra denna utan webbserver som ett fil är att skriva om kod i javascript och ha det i <script> taggar i själva filen, då blir det bara en .htm fil.

Re: Köra en php sida lokalt i pc?

Postat: 22 augusti 2019, 11:04:22
av johano
Wedge skrev:PHP utan server är som sagt möjligt, men i det här fallet... nja...
Koden använder sig av $_POST, $_FILES, move_uploaded_file() etc, dvs mycket som är beroende av data skickas från ett webbformulär.
Dessutom skickar den ut HTML, och det kommer att se ut som skit i ett terminalfönster, om man trots allt skulle få igång den.
Räkna med en hel del omskrivningar för att göra stand-alone-kod av den.
Ja i sedvanlig "cowboy-anda" (som är så oerhört vanligt i php-projekt(!)) så är ju allt en enda j-vla röra med formatteringskod hejvilt blandat med programlogik...
Hade det varit byggt lite mer strukturerat så hade det varit enkelt att lyfta ut programlogiken och göra ett standalone script av det.

Re: Köra en php sida lokalt i pc?

Postat: 22 augusti 2019, 11:43:30
av BJ
Det känner jag igen från mina filer.
Menar du att det finns andra språk
där det ser bättre ut?

Re: Köra en php sida lokalt i pc?

Postat: 22 augusti 2019, 11:48:45
av johano
Njae, det är kanske inte språket i sig som är huvudproblemet utan kanske mer att php "attraherar" en viss typ av utvecklare :wink:

Re: Köra en php sida lokalt i pc?

Postat: 22 augusti 2019, 11:50:26
av BJ
Jaha. :)

Re: Köra en php sida lokalt i pc?

Postat: 22 augusti 2019, 13:10:37
av Mygg@n
Det blev en annan lösning, fanns mer filer färdigt att lägga på en server så jag har ju en plats på one.com:s webbhotell där jag laddade upp allt, fick skapa några mappar men sen funkade det.
https://code.google.com/archive/p/web-tom/