[PHP] NFO Crap Cleaner

Pagina: 1
Acties:
  • 627 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • TommyGun
  • Registratie: Mei 2004
  • Laatst online: 20-09 13:36

TommyGun

Stik er maar in!

Topicstarter
Hallow.

Ik was op zoek naar een script zoals die van http://beta.supremepower.co.uk/NFO%20Strip.php maar helaas kan ik daar helemaal niks van vinden, en er is ook geen enkele mogelijkheid om de maker van bovenstaand script te contacteren, dus dat wordt zelf iets maken. Helaas ben ik niet zo gevorderd op het gebied van PHP dus misschien dat iemand wat kan helpen hiermee.

Het idee hierachter is dat een NFO gestript wordt, zodat alleen de 'nuttige data' over blijft. Al de overige rommel (vrijwel alles van http://www.regnery.net/html/detail-tgs.php?id=42) moet er dus uit. Nou had ik zelf al het volgende geprobeerd;

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<?php
if($_POST['nfocleaner']){
    $nfo = $_POST['nfo'];
    $nfo = str_replace('&aacute;','',$nfo);
    $nfo = str_replace('&agrave;','',$nfo);
    $nfo = str_replace('&acirc;','',$nfo);
    $nfo = str_replace('&atilde;','',$nfo);
    $nfo = str_replace('&auml;','',$nfo);
    $nfo = str_replace('&aring;','',$nfo);
    $nfo = str_replace('&Aacute;','',$nfo);
    $nfo = str_replace('&Agrave;','',$nfo);
    $nfo = str_replace('&Acirc;','',$nfo);
    $nfo = str_replace('&Atilde;','',$nfo);
    $nfo = str_replace('&Auml;','',$nfo);
    $nfo = str_replace('&Aring;','',$nfo);
    $nfo = str_replace('&ccedil;','',$nfo);
    $nfo = str_replace('&Ccedil;','',$nfo);
    $nfo = str_replace('&eacute;','',$nfo);
    $nfo = str_replace('&egrave;','',$nfo);
    $nfo = str_replace('&ecirc;','',$nfo);
    $nfo = str_replace('&euml;','',$nfo);
    $nfo = str_replace('&Eacute;','',$nfo);
    $nfo = str_replace('&Egrave;','',$nfo);
    $nfo = str_replace('&Ecirc;','',$nfo);
    $nfo = str_replace('&Euml;','',$nfo);
    $nfo = str_replace('&iacute;','',$nfo);
    $nfo = str_replace('&igrave;','',$nfo);
    $nfo = str_replace('&icirc;','',$nfo);
    $nfo = str_replace('&iuml;','',$nfo);
    $nfo = str_replace('&Iacute;','',$nfo);
    $nfo = str_replace('&Igrave;','',$nfo);
    $nfo = str_replace('&Icirc;','',$nfo);
    $nfo = str_replace('&Iuml;','',$nfo);
    $nfo = str_replace('&ntilde;','',$nfo);
    $nfo = str_replace('&Ntilde;','',$nfo);
    $nfo = str_replace('&oacute;','',$nfo);
    $nfo = str_replace('&ograve;','',$nfo);
    $nfo = str_replace('&ocirc;','',$nfo);
    $nfo = str_replace('&ouml;','',$nfo);
    $nfo = str_replace('&otilde;','',$nfo);
    $nfo = str_replace('&oslash;','',$nfo);
    $nfo = str_replace('&Oacute;','',$nfo);
    $nfo = str_replace('&Ograve;','',$nfo);
    $nfo = str_replace('&Ocirc;','',$nfo);
    $nfo = str_replace('&Ouml;','',$nfo);
    $nfo = str_replace('&Otilde;','',$nfo);
    $nfo = str_replace('&Oslash;','',$nfo);
    $nfo = str_replace('&uacute;','',$nfo);
    $nfo = str_replace('&ugrave;','',$nfo);
    $nfo = str_replace('&ucirc;','',$nfo);
    $nfo = str_replace('&uuml;','',$nfo);
    $nfo = str_replace('&Uacute;','',$nfo);
    $nfo = str_replace('&Ugrave;','',$nfo);
    $nfo = str_replace('&Ucirc;','',$nfo);
    $nfo = str_replace('&Uuml;','',$nfo);
    $nfo = str_replace('&yacute;','',$nfo);
    $nfo = str_replace('&yuml;','',$nfo);
    $nfo = str_replace('&Yacute;','',$nfo);
    $nfo = str_replace('&szlig;','',$nfo);
    $nfo = str_replace('&aelig;','',$nfo);
    $nfo = str_replace('&euro;','',$nfo);
    $nfo = str_replace('&copy;','',$nfo);
    $nfo = str_replace('&reg;','',$nfo);
    echo '<center><textarea rows=30 cols=90 name="nfo">'.$nfo.'</textarea></center>';
}else{
?>

<center><form method="post">
<b>NFO content:</b></br>
<textarea rows=30 cols=90 name="nfo"></textarea></br>
<input type="submit" name="nfocleaner" value="Clean up!"></center>
</form?

<?php
}
?>


In plaats van

PHP:
1
2
3
4
5
$nfo = str_replace('&aacute;','',$nfo);
    $nfo = str_replace('&agrave;','',$nfo);
    $nfo = str_replace('&acirc;','',$nfo);
    $nfo = str_replace('&atilde;','',$nfo);
    $nfo = str_replace('&auml;','',$nfo);


heb ik ook

PHP:
1
2
3
4
5
$nfo = str_replace('&aacute;','',$nfo);
    $nfo = str_replace('&agrave;','&nbsp;',$nfo);
    $nfo = str_replace('&acirc;','&nbsp;',$nfo);
    $nfo = str_replace('&atilde;','&nbsp;',$nfo);
    $nfo = str_replace('&auml;','&nbsp;',$nfo);


geprobeerd maar helaas.

Zie http://gamergun.com/version/nfocrapcleaner.php voor het eerste script en http://gamergun.com/version/nfocrapcleaner2.php voor het tweede script, werken dus beide niet. Nou kwam iemand met het idee om preg_replace() te gebruiken maar daar kom ik niet echt mee uit.

Alvast bedankt als iemand kan helpen

Ps; een NFO om te testen: http://www.gamergun.com/f...9x06.ws_pdtv_xvid-fov.nfo (gewoon openen met notepad of een andere editor, maar ik neem aan dat jullie wel weten wat een NFO is).

“In a world without walls and fences, who needs Windows and Gates".


Acties:
  • 0 Henk 'm!

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
Ik denk dat je helemaal niets hebt aan die code's. Kopieer een teken uit een NFO bestand en plak die in een str_replace. Misschien dat dat werkt.

Acties:
  • 0 Henk 'm!

  • [BoSS]
  • Registratie: Maart 2000
  • Laatst online: 14:36

[BoSS]

Geen woorden maar daden!

Of nog beter, vervang alles wat niet alfanumeriek is, geen spatie is en maak voor nog een aantal karakters (#, etc) een uitzondering. Voor de rest laat je alles eruit strippen...werkt prima! :)

20x 170 Wp (Solar Frontier) op ZZO / 54 graden


Acties:
  • 0 Henk 'm!

  • dingstje
  • Registratie: Augustus 2002
  • Laatst online: 02-01-2024
Wat jij probeert te replacen zijn HTML-codes. Een NFO bestand is echter een gewoon tekst-document, waar die 'speciale tekens' gewoon ASCII-codes zijn. Je zal dus in de ASCII-tabel moeten kijken welke tekens je moet replacen. Je kan een ASCII-karakter bouwen door het nummer in chr() te gooien. Het kan ook in UTF-# zijn, maar ik vermoed dat het gewoon ASCII is.

Het lijkt me inderdaad een beter plan om alles dat geen alfanumeriek teken is, of bijvoorbeeld een dubbelpunt, te strippen. Met de ereg/preg functions moet dat wel te bereiken zijn :-)

If you can't beat them, try harder


Acties:
  • 0 Henk 'm!

  • TommyGun
  • Registratie: Mei 2004
  • Laatst online: 20-09 13:36

TommyGun

Stik er maar in!

Topicstarter
@ [BoSS] & dingstje; dat zal dan idd de beste oplossing zijn (ereg/preg), maar hoe pak ik zoiets aan. In eerste instantie heb ik een stukje nodig dat alles eruit pikt, en dan nog een stukje code waarmee een NFO ingevoerd kan worden. (Al dan niet d.m.v uploaden of het copy-pasten van de inhoud).

Helaas ben ik nogal n00b op dat gebied, dus ik ga eens wat zoeken maar als iemand me een stukje in de goede richting kan duwen; b.v.d.

“In a world without walls and fences, who needs Windows and Gates".


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Probeer het eens met
PHP:
1
eregi_replace("[^[:print:]]", "", $NFOcontent);

Acties:
  • 0 Henk 'm!

  • TommyGun
  • Registratie: Mei 2004
  • Laatst online: 20-09 13:36

TommyGun

Stik er maar in!

Topicstarter
frickY schreef op zaterdag 07 april 2007 @ 16:41:
Probeer het eens met
PHP:
1
eregi_replace("[^[:print:]]", "", $NFOcontent);
Bedankt voor je post, echter zie ik niet hoe ik dit moet koppelen aan het form. Had al even op http://nl2.php.net/eregi_replace gekeken maar daar zie ik niet echt iets soortgelijks.

[ Voor 26% gewijzigd door TommyGun op 07-04-2007 16:51 ]

“In a world without walls and fences, who needs Windows and Gates".


Acties:
  • 0 Henk 'm!

  • Xander
  • Registratie: Oktober 2002
  • Laatst online: 00:21
Net even heel snel dit in elkaar gefrot:
PHP:
1
2
3
4
5
6
7
8
<?php
$nfo = $_POST['nfo'];
$nfo = preg_replace('/([^\x21-\x7E\xA9\xAE\r\n\s])+/', '', $nfo);
$nfo = nl2br($nfo);
$nfo = preg_replace('/\s{2,}/', '', $nfo);
$nfo = preg_replace('/(\<br \/\>){3,}/', '<br /><br />', $nfo);
echo $nfo;
?>


En dit lijkt hetzelfde te doen als die link die jij aanhaalt? Even de belangrijkste regels:
3: Vervang alles dat mij geen belangrijke tekens lijken (:+) door 'niets'
4: Vervang de newlines door een <br /> tag (als ik dat nu nog niet doe worden ze op de volgende regel weggemikt)
5: Vervang alle dubbele (of driedubbele, of vierdubbele...) whitespace chars door niets
6: Vervang 3 of meer <br />'s door twee

Het kan vast mooier en makkelijker, maar volgens mij doet dit wat je zoekt... of in ieder geval iets in de goede richting... :P

PC specs!---Pulse mee voor GoT!
[22:49:37] <@Remy> ik wil een opblaasbare dSLR :+


Acties:
  • 0 Henk 'm!

  • TommyGun
  • Registratie: Mei 2004
  • Laatst online: 20-09 13:36

TommyGun

Stik er maar in!

Topicstarter
@ Xander; dat lijkt inderdaad te werken!

http://gamergun.com/version/nfocrapcleaner3.php

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<?php
$nfo = $_POST['nfo'];
$nfo = preg_replace('/([^\x21-\x7E\xA9\xAE\r\n\s])+/', '', $nfo);
$nfo = nl2br($nfo);
$nfo = preg_replace('/\s{2,}/', '', $nfo);
$nfo = preg_replace('/(\<br \/\>){3,}/', '<br /><br />', $nfo);
echo $nfo; 
?>

<center><form method="post">
<b>NFO content:</b></br>
<textarea rows=30 cols=90 name="nfo"></textarea></br>
<input type="submit" name="nfocleaner" value="Clean up!"></center>
</form?

<?php
?>


Even wat testen :)

Edit; nouja een maat heeft enkele NFO's getest en werkt gewoon prima volgens hem. Heel erg bedankt dus _/-\o_. (Ook de rest natuurlijk! :)).

[ Voor 10% gewijzigd door TommyGun op 07-04-2007 16:58 ]

“In a world without walls and fences, who needs Windows and Gates".


Acties:
  • 0 Henk 'm!

  • TommyGun
  • Registratie: Mei 2004
  • Laatst online: 20-09 13:36

TommyGun

Stik er maar in!

Topicstarter
Hm nog even een klein vraagje dan;

Is het ook mogelijk om bijv dit scriptje http://snippets.dzone.com/posts/show/3729 te koppelen aan het php gedeelte in bovenstaande post? Heb enkele dingen getest maar ik krijg de geuploade file telkens niet door dat php script, met als resultaat dat de file 'gewoon' wordt geupload.

Voor de duidelijkheid; de file die wordt geupload hoeft niet aangepast te worden, alleen de output nadat deze door het php script is gehaald dient getoond te worden. B.v.d

“In a world without walls and fences, who needs Windows and Gates".


Acties:
  • 0 Henk 'm!

  • Pyrus
  • Registratie: November 2001
  • Laatst online: 21:57

Pyrus

Hardknock life

Beetje zelf nadenken/handleiding lezen kan geen kwaad, maar het kan.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

if (is_uploaded_file($_FILES['userfile']['tmp_name']))
{
  $nfoContent=file_get_contents($_FILES['userfile']['tmp_name']);
  $nfoContent=stripNFO($nfoContent);
  if(file_put_contents($uploadfile,$nfoContent))
  {
    echo 'nfo geupload en gestript naar '.$uploadfile;
  }
  else
  {
   echo 'kon niet schrijven naar '.$uploadfile;
  }

} else {
   echo "Upload failed";
}

LinkedIn


Acties:
  • 0 Henk 'm!

  • TommyGun
  • Registratie: Mei 2004
  • Laatst online: 20-09 13:36

TommyGun

Stik er maar in!

Topicstarter
Bedankt voor het helpen. Echter;
[client 192.168.3.2] PHP Fatal error: Call to undefined function: stripnfo() in /var/www/html/version/upload.php on line 8, referer: http://gamergun.com/version/nfocrapcleaner3.php
Vreemd. De code in nfocrapcleaner3.php is als volgt;

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<?php
$nfo = $_POST['nfo'];
$nfo = preg_replace('/([^\x21-\x7E\xA9\xAE\r\n\s])+/', '', $nfo);
$nfo = nl2br($nfo);
$nfo = preg_replace('/\s{2,}/', '', $nfo);
$nfo = preg_replace('/(\<br \/\>){3,}/', '<br /><br />', $nfo);
echo $nfo; 
?>

<form enctype="multipart/form-data" action="upload.php" method="POST">
    <input type="hidden" name="MAX_FILE_SIZE" value="512000" />
    Send this file: <input name="userfile" type="file" />
    <input type="submit" value="Send File" />
</form>

<center><form method="post">
<b>NFO content:</b></br>
<textarea rows=30 cols=90 name="nfo"></textarea></br>
<input type="submit" name="nfocleaner" value="Clean up!"></center>
</form?

<?php
?>


En dan in upload.php

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$uploaddir = '/var/www/html/version/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

if (is_uploaded_file($_FILES['userfile']['tmp_name']))
{
  $nfoContent=file_get_contents($_FILES['userfile']['tmp_name']);
  $nfoContent=stripNFO($nfoContent);
  if(file_put_contents($uploadfile,$nfoContent))
  {
    echo 'nfo geupload en gestript naar '.$uploadfile;
  }
  else
  {
   echo 'kon niet schrijven naar '.$uploadfile;
  }

} else {
   echo "Upload failed";
}
?>


Nou had ik geprobeerd $nfoContent=stripNFO($nfoContent); te veranderen in $nfoContent=nfo($nfoContent); maar ook dat werkt niet. Is dus iets met de verwijzing naar nfocrapcleaner3.php wat betreft die functie.

Het lijkt zo net of ik niks geprobeerd heb maar ik kom er niet echt in uit. Ik dacht eerst aan includen maar dat kan het toch niet zijn... ?

Bedankt

“In a world without walls and fences, who needs Windows and Gates".


Acties:
  • 0 Henk 'm!

  • Pyrus
  • Registratie: November 2001
  • Laatst online: 21:57

Pyrus

Hardknock life

TommyGun schreef op zondag 08 april 2007 @ 00:41:
Bedankt voor het helpen. Echter;


[...]


Vreemd. De code in nfocrapcleaner3.php is als volgt;

PHP:
1
2
3
4
5
6
7
8
9
10
<?php
function stripNFO($nfo)
{
$nfo = preg_replace('/([^\x21-\x7E\xA9\xAE\r\n\s])+/', '', $nfo);
$nfo = nl2br($nfo);
$nfo = preg_replace('/\s{2,}/', '', $nfo);
$nfo = preg_replace('/(\<br \/\>){3,}/', '<br /><br />', $nfo);
return $nfo;
}
?>


En dan in upload.php

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
inlude('datanderebestand.php');
$uploaddir = '/var/www/html/version/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

if (is_uploaded_file($_FILES['userfile']['tmp_name']))
{
  $nfoContent=file_get_contents($_FILES['userfile']['tmp_name']);
  $nfoContent=stripNFO($nfoContent);
  if(file_put_contents($uploadfile,$nfoContent))
  {
    echo 'nfo geupload en gestript naar '.$uploadfile;
  }
  else
  {
   echo 'kon niet schrijven naar '.$uploadfile;
  }

} else {
   echo "Upload failed";
}
?>


Nou had ik geprobeerd $nfoContent=stripNFO($nfoContent); te veranderen in $nfoContent=nfo($nfoContent); maar ook dat werkt niet. Is dus iets met de verwijzing naar nfocrapcleaner3.php wat betreft die functie.

Het lijkt zo net of ik niks geprobeerd heb maar ik kom er niet echt in uit. Ik dacht eerst aan includen maar dat kan het toch niet zijn... ?

Bedankt
of gewoon die functie naar dat ene bestand vanwaar je upload plakken... wat je wil.
Als je zowel fileupload als copypaste veld wilt zou ik die functie in een apart php-bestand plaatsen en dan in beiden includen en aanroepen. Scheelt je code aanpassen en garandeert consistente output bij verschillende input methoden als je de functie bewerkt.

Zie je trouwens wat het verschil is tussen m'n vorige post en het script waar jij naar linkte? Waarom dus mijn ding wel werkt en dat andere ding niet? Wel zo praktisch als je dat door hebt :P. Zelfde vraag met aangepaste quote hierin.

[ Voor 6% gewijzigd door Pyrus op 08-04-2007 00:53 ]

LinkedIn


Acties:
  • 0 Henk 'm!

  • mace
  • Registratie: Juni 2003
  • Laatst online: 20-09 15:25

mace

Sapere Aude

* mace doet bookmark

Ik zocht al zoiets, ik denk dat als ik wat vrije tijd heb ik zelf eens fijn aan de gang ga met AWK en dan schrijf ik wel iets soortgelijks. Kan ik daar mooi een CGI gevalletje voor bakken.

Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 22:47
PHP:
1
$nfoContent=stripNFO($nfoContent);


Maakt gebruik van een functie stripNFO. Die functie moet je dus eerst zelf definieren:
PHP:
1
2
3
4
5
6
7
8
9
function stripNFO($nfo = false) {
  if(!$nfo)
    return false;
  $nfo = preg_replace('/([^\x21-\x7E\xA9\xAE\r\n\s])+/', '', $nfo); 
  $nfo = nl2br($nfo); 
  $nfo = preg_replace('/\s{2,}/', '', $nfo); 
  $nfo = preg_replace('/(\<br \/\>){3,}/', '<br /><br />', $nfo); 
  return $nfo;
}


Als je die in hetzelfde bestand zet, of in een bestand wat geinclude wordt, kan'ie die functie wel vinden en werkt het gewoon ;)

//edit
Tsk, je zou verwachten dat je op dit tijdstip wel even een kop koffie kan halen voor je een antwoord schrijft.. Vlugge posters hier.. :o

[ Voor 11% gewijzigd door FragFrog op 08-04-2007 01:18 ]

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • TommyGun
  • Registratie: Mei 2004
  • Laatst online: 20-09 13:36

TommyGun

Stik er maar in!

Topicstarter
Pyrus schreef op zondag 08 april 2007 @ 00:50:
[...]


of gewoon die functie naar dat ene bestand vanwaar je upload plakken... wat je wil.
Als je zowel fileupload als copypaste veld wilt zou ik die functie in een apart php-bestand plaatsen en dan in beiden includen en aanroepen. Scheelt je code aanpassen en garandeert consistente output bij verschillende input methoden als je de functie bewerkt.
Hm als ik jouw script probeer krijg ik de volgende error;
[client 192.168.3.2] PHP Fatal error: Call to undefined function: inlude() in /var/www/html/version/upload.php on line 2, referer: http://gamergun.com/version/nfocrapcleaner3.php
Dus nfocrapcleaner3.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<?php
function stripNFO($nfo)
{
$nfo = preg_replace('/([^\x21-\x7E\xA9\xAE\r\n\s])+/', '', $nfo);
$nfo = nl2br($nfo);
$nfo = preg_replace('/\s{2,}/', '', $nfo);
$nfo = preg_replace('/(\<br \/\>){3,}/', '<br /><br />', $nfo);
return $nfo;
}
?>

<form enctype="multipart/form-data" action="upload.php" method="POST">
    <input type="hidden" name="MAX_FILE_SIZE" value="512000" />
    Send this file: <input name="userfile" type="file" />
    <input type="submit" value="Send File" />
</form>

<center><form method="post">
<b>NFO content:</b></br>
<textarea rows=30 cols=90 name="nfo"></textarea></br>
<input type="submit" name="nfocleaner" value="Clean up!"></center>
</form?

<?php
?>


upload.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
inlude('nfocrapcleaner3.php');
$uploaddir = '/var/www/html/version/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

if (is_uploaded_file($_FILES['userfile']['tmp_name']))
{
  $nfoContent=file_get_contents($_FILES['userfile']['tmp_name']);
  $nfoContent=stripNFO($nfoContent);
  if(file_put_contents($uploadfile,$nfoContent))
  {
    echo 'nfo geupload en gestript naar '.$uploadfile;
  }
  else
  {
   echo 'kon niet schrijven naar '.$uploadfile;
  }

} else {
   echo "Upload failed";
}
?>


Deze include error kreeg ik ook al toen ik upload.php wou includen in nfocrapcleaner3.php. Van alles geprobeerd maar hij pakt geen include lijkt het wel. (Files staan natuurlijk wel in dezelfde dir).
Zie je trouwens wat het verschil is tussen m'n vorige post en het script waar jij naar linkte? Waarom dus mijn ding wel werkt en dat andere ding niet? Wel zo praktisch als je dat door hebt :P. Zelfde vraag met aangepaste quote hierin.
Zodra ik het werkend heb ga ik het inderdaad eens goed bekijken, anders schiet ik er nog niks mee op qua kennis.

@ FrapFrog; jouw stukkies heb ik ook even getest maar dan geeft de error log aan;
[client 192.168.3.2] PHP Fatal error: Call to undefined function: file_put_contents() in /var/www/html/version/upload.php on line 21, referer: http://gamergun.com/version/nfocrapcleaner3.php
Al is het misschien slimmer om op één creatie te concentreren.

Bedankt beide

[ Voor 3% gewijzigd door TommyGun op 08-04-2007 01:44 ]

“In a world without walls and fences, who needs Windows and Gates".


Acties:
  • 0 Henk 'm!

  • Pyrus
  • Registratie: November 2001
  • Laatst online: 21:57

Pyrus

Hardknock life

Ok, als je nou eventjes GOED leest, maar dan ook heeeeeeeeeel goed zie je dat ik een typefout gemaakt hebt en dat je NIET twee keer dezelfde fout krijgt.

Fout bij de eerste:
code:
1
[client 192.168.3.2] PHP Fatal error: Call to undefined function: stripnfo() in /var/www/html/version/upload.php on line 8, referer: http://gamergun.com/version/nfocrapcleaner3.php


Fout bij de tweede:
code:
1
[client 192.168.3.2] PHP Fatal error: Call to undefined function: inlude() in /var/www/html/version/upload.php on line 2, referer: http://gamergun.com/version/nfocrapcleaner3.php


Als je dus gewoon die "inlude" in "include" verandert op regel twee zou het moeten werken. Ik zou zeggen: leer debuggen.

En die andere error die je van FragFrog krijgt komt omdat je er niet bij zei welke PHP versie je gebruikte en ik er dus van uit ging dat het de meeste recente was. file_put_contents en file_get_contents zijn namelijk pas vanaf PHP 5 beschikbaar. Je zult het dus ff moeten omschrijven, zie daarvoor de php manual

[ Voor 20% gewijzigd door Pyrus op 08-04-2007 02:03 ]

LinkedIn


Acties:
  • 0 Henk 'm!

  • TommyGun
  • Registratie: Mei 2004
  • Laatst online: 20-09 13:36

TommyGun

Stik er maar in!

Topicstarter
Mijn fout van die include, excuse me.

In ieder geval, nfocrapcleaner3.php wordt doorgestuurd naar upload.php als ik via dat script iets upload, maar helaas zonder output. De geuploade file is ook niet terug te vinden in de dir /var/www/html/version. (Deze heeft chmod 0777). Ook uploaden via upload.php werkt niet, geen output of wat dan ook maar de pagina wordt gewoon ge-refresht als het ware.

Maar oke ben op dit moment teveel met m'n hoofd ergens anders :| dus waarschijnlijk morgen avond maar eens wat nieuwe pogingen wagen. Ik zal echter wel weer iets simpels over het hoofd zien. In ieder geval bedankt!

Edit; ik draai idd PHP4

[ Voor 9% gewijzigd door TommyGun op 08-04-2007 02:19 ]

“In a world without walls and fences, who needs Windows and Gates".


Acties:
  • 0 Henk 'm!

Verwijderd

File_get_contents zit ook in php4, dat hoef je niet te herschrijven.

Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 22:47
Verwijderd schreef op zondag 08 april 2007 @ 02:15:
File_get_contents zit ook in php4, dat hoef je niet te herschrijven.
Pas vanaf versie 4.3, en 4.1 is een stuk vaker voorkomende volgens mij, dus nu weten we nog niks ;)

Overigens, maak het jezelf makkelijk en adobteer een gebruikelijkere methode van includen door header files en, zoals mijn oude C++ leraar altijd zo mooi zei, BABO! (Blanks Around Binary Operators, ie, spaties om je '='jes etc ;))


Even een beetje mee zitten klieren, dit werk hier (PHP5, maar geschreven voor PHP4.1 en hoger) goed:

index.php (of hoe je't ook maar noemen wilt trouwens)
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?php
require_once('header.php');

if(isset($_FILES['userfile']['name']))
  echo handleFileUpload();
?>

<form enctype="multipart/form-data" action="" method="POST">
    <input type="hidden" name="MAX_FILE_SIZE" value="512000" />
    Send this file: <input name="userfile" type="file" />
    <input type="submit" value="Send File" />
</form>


header.php
PHP:
1
2
3
4
5
6
7
8
9
10
<?php
    /****
      header.php - include required scripts:
      
      nfo.inc.php:  nfo cleaner
      file.inc.php: handles file uploads and writes
    ****/    
require_once('nfo.inc.php');
require_once('file.inc.php');
?>


file.inc.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
    /****
      string handleFileUpload( void ) 
      
      Handles the upload of nfo files by reading them, parsing them 
      so junk tags are removed, and on succes storing them on the server.
      
      Returns a resultmessage.
      
      Dependancies: stripNFO();
   ****/      
function handleFileUpload() {
  $uploaddir  = '/var/www/html/version/'; 
  $uploadfile = $uploaddir . basename($_FILES['userfile']['name']); 
  $tmpfile    = $_FILES['userfile']['tmp_name'];

  if(file_exists($uploadfile))
    return 'Error: file already exists!';

  if(!is_uploaded_file($tmpfile))
    return 'Error: not a valid file uploaded!';
    
  $tmpHandle  = fopen($tmpfile, "rb"); 
  $nfoContent = fread($tmpHandle, filesize($tmpfile)); 

  if(!stripNFO($nfoContent))
    return 'Geen geldig NFO bestand geupload!'; 

  $handle     = fopen($uploadfile, "wb+");  
  if(!fwrite($handle, $nfoContent)) 
    return 'Error: kon niet schrijven naar '.$uploadfile; 

  return 'nfo geupload en gestript naar '.$uploadfile; 
}
?>


nfo.inc.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
    /****
      bool stripNFO( string & nfo )    

      Expects a reference to a NFO string and strips all unwanted
      characters. Returns true on success, false on faillure.
    ****/
function stripNFO(&$nfo = false) { 
  if(!$nfo) 
    return false; 
  $nfo = preg_replace('/([^\x21-\x7E\xA9\xAE\r\n\s])+/', '', $nfo);  
  $nfo = nl2br($nfo);  
  $nfo = preg_replace('/\s{2,}/', '', $nfo);  
  $nfo = preg_replace('/(\<br \/\>){3,}/', '<br /><br />', $nfo);  
  return $nfo ? true : false;  
}


Gezipte source

't is nog niet helemaal netjes (aangezien ik ook lui ben en bepaalde stukken fijn gekopieerd heb ;)), maar ik hoop dat't wat helderder is dan de vage losse includes etc waar je tot nu toe mee gewerkt hebt :)

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • TommyGun
  • Registratie: Mei 2004
  • Laatst online: 20-09 13:36

TommyGun

Stik er maar in!

Topicstarter
Bedankt.

PHP:
1
function stripNFO(&$nfo = false) {
in nfo.inc.php geeft echter wel een error, namelijk dat er een } wordt verwacht ipv =.

Als ik = false weg laat dan werkt het script wel, de file wordt geupload en gecleaned;

nfo geupload en gestript naar /var/www/html/version/top.gear.s09e05.ws.pdtv.xvid-river.nfo

Maar het zou mooi zijn als de output meteen geparsed zou kunnen worden, zoals met het form gebeurt waar je de content van een NFO in kunt plakken.

Hoe ga ik dat aanpakken? Zal denk ik wel iets zijn met return 'NFO file cleaned and uploaded to '.$uploadfile; (ja, vertaald naar het Engels) maar veel krijg ik er niet uit. Wat gespeeld met return $nfo enzo maar dat wil niet echt werken. Suggesties?

Het is me in ieder geval gelukt de scripts samen te voegen. Begint dus al ergens op te lijken.

Bedankt _/-\o_

[ Voor 57% gewijzigd door TommyGun op 08-04-2007 21:46 ]

“In a world without walls and fences, who needs Windows and Gates".


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 22:47
TommyGun schreef op zondag 08 april 2007 @ 21:06:
Hoe ga ik dat aanpakken? Zal denk ik wel iets zijn met return 'NFO file cleaned and uploaded to '.$uploadfile; (ja, vertaald naar het Engels) maar veel krijg ik er niet uit. Wat gespeeld met return $nfo enzo maar dat wil niet echt werken. Suggesties?
return $nfoContent; ;)

Let er wel op hoe je die content weergeeft, afhankelijk van wat er wel en niet gestript wordt heb je kans dat mensen hiermee een manier krijgen om javascript op je site uit te voeren. Op zich zou dat allemaal wel gestript moeten worden, maar je bent inherent onveilig bezig als je geuploade data zomaar weergeeft. strip_tags en htmlentities zijn je vrienden in deze :)

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • Xander
  • Registratie: Oktober 2002
  • Laatst online: 00:21
FragFrog schreef op maandag 09 april 2007 @ 02:31:
[...]
Let er wel op hoe je die content weergeeft, afhankelijk van wat er wel en niet gestript wordt heb je kans dat mensen hiermee een manier krijgen om javascript op je site uit te voeren. Op zich zou dat allemaal wel gestript moeten worden, maar je bent inherent onveilig bezig als je geuploade data zomaar weergeeft. strip_tags en htmlentities zijn je vrienden in deze :)
En wat is het grote gevaar als iemand javascript op je site weergegeven krijgt, en het vervolgens alleen maar zelf ziet?

Dan kan ie zn eigen sessie stelen, oeh!? :P

PC specs!---Pulse mee voor GoT!
[22:49:37] <@Remy> ik wil een opblaasbare dSLR :+


Acties:
  • 0 Henk 'm!

  • TommyGun
  • Registratie: Mei 2004
  • Laatst online: 20-09 13:36

TommyGun

Stik er maar in!

Topicstarter
Geweldig FragFrog, nu werkt het. Echt heel erg bedankt.

Over dat JavaScript maak ik me niet zo druk. Of er moet echt iets serieus mee uit te voeren zijn dan wat Xander hierboven zegt. Misschien dat het in dat geval slimmer is om de geuploade file ook meteen weer te laten verwijderen, zodat die later niet opnieuw opgevraagd kunnen worden als de bestandsnaam bekend is.

Ps; de linkjes zijn dood nu, waren maar tijdelijk om te testen. Draait op dit moment op een andere locatie met een layout erom heen enzo. Maar als daar interesse in is dan moet diegene maar even een DM sturen.

[ Voor 57% gewijzigd door TommyGun op 09-04-2007 13:14 ]

“In a world without walls and fences, who needs Windows and Gates".


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 22:47
Xander schreef op maandag 09 april 2007 @ 10:43:
En wat is het grote gevaar als iemand javascript op je site weergegeven krijgt, en het vervolgens alleen maar zelf ziet?

Dan kan ie zn eigen sessie stelen, oeh!? :P
De TS wil de geuploade data ook opslaan, dus ik ga er vanuit dat hij deze later nogmaals weer wil kunnen geven.

Punt is simpelweg dat een goede beveiliging alleen werkt als je of zorgt dat er geen potentieel onveilige data op je server terechtkomt (door alle userdata te filteren voor je het opslaat), of zorgt dat alle data die je server verlaat veilig is. Zelf geef ik er de voorkeur aan pas te filteren bij het weergeven (aangezien je dan simpel oude data later nog anders / beter weer kan geven naarmate de techniek vordert), in dit geval wordt het geuploade bestand al gefiltert bij het invoeren wat evengoed voordelen heeft natuurlijk (minder load onder andere). 'Probleem' is echter dat alleen maar een bepaald soort data gefiltert wordt en niet specifiek naar HTML tags etc gekeken wordt - je kan er dus niet vanuit gaan dat de data veilig is. Als er echt niks meer mee gedaan wordt is dat natuurlijk prima, maar dan moet je de bestanden niet gaan opslaan en er daarna vanuit gaan dat ze veilig zijn! :)

Overigens, nav je opmerking hierboven, in plaats van direct verwijderen is het natuurlijk een stuk simpeler om'm nooit weg te schrijven ;) tmp files worden vanzelf leeggegooid als het goed is, en zelfs als ze dat niet worden kun je standaard niet bij de tmpfiles dir als bezoeker :)

[ Voor 9% gewijzigd door FragFrog op 09-04-2007 21:06 ]

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • TommyGun
  • Registratie: Mei 2004
  • Laatst online: 20-09 13:36

TommyGun

Stik er maar in!

Topicstarter
Hm inderdaad, want de data hoeft helemaal niet opgeslagen te worden. Het is namelijk zo dat de users de output-content meteen weer copyen naar een topic op het forum dat erbij hoort, dus het mag best via /temp/ gebeuren.

[ Voor 3% gewijzigd door TommyGun op 09-04-2007 21:07 ]

“In a world without walls and fences, who needs Windows and Gates".


Acties:
  • 0 Henk 'm!

  • Xander
  • Registratie: Oktober 2002
  • Laatst online: 00:21
FragFrog schreef op maandag 09 april 2007 @ 21:05:
[...]

De TS wil de geuploade data ook opslaan, dus ik ga er vanuit dat hij deze later nogmaals weer wil kunnen geven.
Ik heb dus nooit begrepen dat hij het op wilde slaan. Kennelijk was dat ook zijn bedoeling niet, vandaar mijn opmerking... :)

PC specs!---Pulse mee voor GoT!
[22:49:37] <@Remy> ik wil een opblaasbare dSLR :+

Pagina: 1