WinFuture-Forum.de: Ideen und Verbesserungen für mein Script - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Ideen und Verbesserungen für mein Script


#1 Mitglied ist offline   snwblnd 

  • Gruppe: aktive Mitglieder
  • Beiträge: 21
  • Beigetreten: 16. Juli 14
  • Reputation: 0

geschrieben 17. August 2016 - 14:55

Hallo, ich habe folgendes Script und suche Ideen und Verbesserungen.
Vorzugsweise um Platz zu sparen.

Zudem taucht bei der error reporting ein Fehler auf das hier etwas nicht stimmt.
Es funktioniert aber alles problemlos.

$number = $_GET['bin'];
$binfile = "$number.txt";
$code = file_get_contents('$binfile');



Kann ich eine genauere in eine Log speichern lassen anstatt sie anzuzeigen?
Der aktuelle Code:

<html>
<head>
<title>TLO</title>
<meta name="viewport" id="viewport" content="width=480, initial-scale=0.25, maximum-scale=1.0;" />
<style> 
pastebox:-webkit-input-placeholder {
    color: #b5b5b5;
}

pastebox-moz-placeholder {
    color: #b5b5b5;
}

.pastebox {
    width: 270px;
    padding: 15px 25px;
    font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
    font-weight: 400;
    font-size: 14px;
    color: #9D9E9E;
    text-shadow: 1px 1px 0 rgba(256, 256, 256, 1.0);
    background: #FFF;
    border: 1px solid #FFF;
    border-radius: 5px;
    box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.50);
    -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.50);
    -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.50);
}

.pastebox:focus {
    background: #DFE9EC;
    color: #414848;
    box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.25);
    -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.25);
    -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.25);
    outline: 0;
}

.pastebox:hover {
    background: #DFE9EC;
    color: #414848;
}
</style> 
<?php
error_reporting(0);
$posted = $_POST['texted'];
if(!empty($_GET['bin']))
{
$number = $_GET['bin'];
$binfile = "$number.txt";
$code = file_get_contents('$binfile');
$lines = file($binfile);
$count = count($lines);
echo "<b>There are about <font color=red><b>$count</b></font> lines of code..</b><br /><br />";
$high = highlight_file($binfile);
return "$high";
}
elseif(empty($posted))
{
echo "<center><b>TLO</b><br><br><form action='' method='POST'>
<textarea class='pastebox' placeholder='Paste your words here' type='text' name='texted' value='' rows='12' cols='80'></textarea><br /><br />

<textarea class='pastebox' placeholder='Optional Comments' type='text' name='comment' value='' rows='1' cols='80'></textarea><br />

<input type='submit' value='give it to me!'>
</form></center>";
}
elseif(!empty($posted))
{
$posted = $_POST['texted'];
$comments = $_POST['comment'];
$post = "$posted \n\n--- comments ---\n $comments";
$woop = rand('5', '10');
function rand_str($size)
{
$feed = "0123456789abcdefghijklmnopqrstuvwxyz";
for ($i=0; $i < $size; $i++)
{
$rand_str .= substr($feed, rand(0, strlen($feed)-1), 1);
}
return $rand_str;
}
$randname = rand_str($woop);
$file = "$randname.txt";
$poster = stripslashes($post);
$openfile = fopen("$file","w");
fwrite($openfile,"$poster");
fclose($openfile);
echo "<meta HTTP-EQUIV='Refresh' CONTENT='0; URL=?bin=$randname'>";
echo "<b>Click <a href='?bin=$randname'><b>Here</b></a><b> If you are not redirected to your bin....<br /><br />";
}
else
{
echo "uh oh, something happened that i didnt plan for....<br />
Go to the <a href=''>index</a> for some options.";
}
?>
<br />
<?php
$dir_path = "";
$zcount = count(glob($dir_path . "*"));
echo "<center>I send <font color='red'>$zcount</font> Pastes to the NSA.</center>";
?>
<br /><br /><center>Made with php & &hearts;</center>
</body>
</html>



Vielen Dank für eure Antworten!
0

Anzeige



#2 Mitglied ist offline   Holger_N 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.111
  • Beigetreten: 11. September 10
  • Reputation: 458
  • Geschlecht:Männlich

geschrieben 17. August 2016 - 15:31

Ich hab jetzt noch nicht genauer durchgeguckt, was das Script überhaupt genau macht, aber ich würde die ganzen Abfragen der POST und GET Variablen am Anfang machen, bevor die Ausgabe überhaupt losgeht und auch die Funktionen dorthin oder diese sogar auslagern und per include (oder ich persönlich bevorzuge require) am Anfang reinholen. Es sei denn, es ist Absicht, dass alles in einer Datei steht.

Ansonsten, wenn ich reine Zahlen per GET oder POST übergebe, mache ich das immer mit

$variable = intval($_GET['balbla']);

dann ist das immer eine Zahl und wenn das Script mal später mit einer Datenbank zusammenarbeitet und Werte übergeben werden, lässt sich so kein Code einschleusen.

Dieser Beitrag wurde von Holger_N bearbeitet: 17. August 2016 - 15:37

Bauernregel: Regnets mächtig im April, passiert irgendwas, was sich auf April reimt.
0

#3 Mitglied ist offline   snwblnd 

  • Gruppe: aktive Mitglieder
  • Beiträge: 21
  • Beigetreten: 16. Juli 14
  • Reputation: 0

geschrieben 17. August 2016 - 16:43

Beitrag anzeigenZitat (Holger_N: 17. August 2016 - 15:31)

Ich hab jetzt noch nicht genauer durchgeguckt, was das Script überhaupt genau macht, aber ich würde die ganzen Abfragen der POST und GET Variablen am Anfang machen, bevor die Ausgabe überhaupt losgeht und auch die Funktionen dorthin oder diese sogar auslagern und per include (oder ich persönlich bevorzuge require) am Anfang reinholen. Es sei denn, es ist Absicht, dass alles in einer Datei steht.

Ansonsten, wenn ich reine Zahlen per GET oder POST übergebe, mache ich das immer mit

$variable = intval($_GET['balbla']);

dann ist das immer eine Zahl und wenn das Script mal später mit einer Datenbank zusammenarbeitet und Werte übergeben werden, lässt sich so kein Code einschleusen.


Es ist ein minimalistischer Flatfile PasteBin Klon.

Es soll alls in einer Datei stehen und reine Zahlen werden nicht benutzt, sondern Zahlen und Kleinbuchstaben.

Da es nur für ~10-20 paste gedacht ist, reichen die Textdateien vollkommen aus und eine DB Anbindung ist auch nicht geplant. Eher das ganze noch wesentlich kleiner zu bekommen.
0

#4 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 17. August 2016 - 17:09

- Was soll das genau sein? HTML5? XHTML? Was anderes?
- Also DOCTYPE angeben. <!DOCTYPE html> reicht für HTML5. Für XHTML - wonach es momentan eher aussieht -- wäre ein wenig umständlicher:
<!DOCTYPE html PUBLIC "-//W3C/DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/dtd/xhtml1-strict.dtd">


- Das <font>-Tag ist mit >50%iger Sicherheit fehl am Platz. Das gibt es seit Ewigkeiten nicht mehr. Ersatz: <span> für inline, <div> als Blockelement mit style="color:..." .

- Du hast einen namenlosen Block (als Teil einer if() Anweisung) mit return $high. Das tut gar nix und kann mangels Bezeichner auch nicht angesprochen werden. Das gesuchte Ergebnis ist ohnehin global als $high verfügbar.

- Korrektur: Oder wäre es, wenn Du es vor dem IF() Block deklariert hättest.

- Wie schon angedeutet: Eingaben grundsätzlich immer(!) prüfen. Idealerweise als Funktion, dann spart man sich die ganze Tipperei. Zum Beispiel so:

function checkVar($param,$type='string',$default='SET',$validMin=PHP_INT_MIN,$validMax=PHP_INT_MAX)
{
 $result = empty($_REQUEST[$param]) ? $default : $_REQUEST[$param];
 switch($type)
 {
  case 'int': $result = intval($result); $result = max($validMin, $result); $result = min($validMax,$result);
              break;
  case 'string': $result = addslashes($result);
                break;
 // etc pp
 }
// Sonstwelche anderen Checks
return $result;
}



- file_get_contents() ist ganz schlechter Stil. Stattdessen:
$fp = fopen($file,'r');
$fc = "";
while(!feof($fp))
 $fc .= fread($fp, 4096);
fclose($fp);
$fp = NULL;


und dann den Inhalt von $fc anschauen.

-- Ich geh mal davon aus daß das bisher nur zum Testen ist; daher nur als Anmerkung: was immer das Script ausgibt, muß gültiges HTML sein und dem DOCTYPE entsprechen. Dann wird das auch als standardkonformes HTML interpretiert und sieht auf allen Geräten - im Rahmen des Machbaren -- gleich oder annähernd gleich aus. Dazu gehört dann auch, daß echo "bla" nur dann zulässig ist, wenn irgendwo vorher dafür ein Block- oder Inlineelement (zB <p> oder <a>) aufgemacht wurde und natürlich hinterher auch wieder geschlossen wird.

- Für eine Verkürzung des Codes ist, wie Holger schon schrieb, die Ausquartierung in externe Dateien und eine Referenz per include, include_once, require oder require_once die beste Idee. Daran denken, daß das nacheinander abgearbeitet wird; der Inhalt vom ersten Include() hat keinen Zugriff auf den Inhalt des letzten, andersrum aber durchaus.

- Ich persönlich bevorzuge auch kleine Wrapperfunktionen zur Verbesserung zur Lesbarkeit und zur Verkürzung. Zum Beispiel so:
function p($str) {printf('<p>%s</p>%s, $str, "\n");} 

oder sogar als Lambdafunktion, wo dann Funktionskörper und -ergebnis aus dem Namen generiert werden, sodaß h1(), p(), br() etc pp verfügbar werden, ohne daß man die alle einzeln definieren muß.

Dieser Beitrag wurde von RalphS bearbeitet: 17. August 2016 - 17:21

"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#5 Mitglied ist offline   Holger_N 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.111
  • Beigetreten: 11. September 10
  • Reputation: 458
  • Geschlecht:Männlich

geschrieben 17. August 2016 - 19:29

Beitrag anzeigenZitat (snwblnd: 17. August 2016 - 16:43)

… und eine DB Anbindung ist auch nicht geplant…


Vielleicht nicht damit, aber als Nächstes kommt ein Script für irgendwas Anderes und da soll eine Variable abgefragt werden, man überlegt – wie ging das nochmal? – ach stand ja in dem anderen Script, rüberkopiert – PENG. Darum mache ich sowas prinzipiell, auch da, wo es theoretisch nicht notwendig ist.
Bauernregel: Regnets mächtig im April, passiert irgendwas, was sich auf April reimt.
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0