PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : NFO Problem


Entity
02.04.2011, 22:41
Hab folgendes Problem mit dem NFO Zeug

Obwohl ich keine NFO hochlade beim Uppen, erzeugt er trotzdem ein leeres bild so das ziemlich viel Datenmüll angesammelt wird.


Normal müsste es so, das wenn ne NFO geuppt wird muss er ein Bild erzeugen ansonsten nicht


Dieses müsste dafür zuständig sein

// Create NFO image
tr_msg("NFO-Bild erzeugen");
if (gen_nfo_pic($nfo, $GLOBALS["TORRENTNFO_DIR"]."/nfo-$id.png") == 0)
tr_status("err");
else
tr_status("ok");habt ihr evt rat? komme nicht drauf wie ich das lösen soll

Schwamm
02.04.2011, 22:51
jaaa aus welche phph hast du die denn wenn ich mal fragen darf
weil ich hatte auch so mal eine kleine Problem

Entity
02.04.2011, 22:52
aus der takeupload natürlich :D

Schwamm
02.04.2011, 23:04
also ich habe bei mir drin stehen



// Create NFO image
tr_msg("NFO-Bild erzeugen");
if (gen_nfo_pic($nfo, $GLOBALS["BITBUCKET_DIR"]."/nfo-$id.png") == 0)

tr_status("err");
else

tr_status("ok");

Entity
02.04.2011, 23:05
das ist das gleiche wie meins

Schwamm
02.04.2011, 23:09
nein das stimmt nicht dein ist


// Create NFO image
tr_msg("NFO-Bild erzeugen");
if (gen_nfo_pic($nfo, $GLOBALS["TORRENTNFO_DIR"]."/nfo-$id.png") == 0)
tr_status("err");
else
tr_status("ok");



und meins ist

/ Create NFO image
tr_msg("NFO-Bild erzeugen");
if (gen_nfo_pic($nfo, $GLOBALS["BITBUCKET_DIR"]."/nfo-$id.png") == 0)

tr_status("err");
else

tr_status("ok");

also du hast ["TORRENTNFO_DIR"] drin und ich

GLOBALS["BITBUCKET_DIR"]

Entity
02.04.2011, 23:10
das hat aber nix damit zutuen meine bilder werden nur woanders gelagert als wie bei dir im Bitbucket

Schwamm
02.04.2011, 23:11
jaaa also denn hast du jaaa bis jetzt alles richtig

Entity
02.04.2011, 23:11
les dir mal mein ersten post durch

Schwamm
02.04.2011, 23:19
also jaaa habe ich jetzt grade !!!!
aber es musss denn mehr sein

june
02.04.2011, 23:22
Das sieht für mich so aus, als ob das Bild anhand des Codes immer erzeugt wird, mach einfach ne Überprüfung ob ne NFO hochgeladen wurde außenrum

Stifler
02.04.2011, 23:38
Äm wenn ich mir die gen_nfo_pic so ansehe gibt die nur ein false zurück wenn bei imagepng ein Fehler auftritt!
Erstellt wird es trotzdem auch wenn es nur ein 0 Byte Bild ist!

Es gibt viele Möglichkeiten Festzustellen ob eine NFO hochgeladen wurde

1.
if($_FILES['nfo']['size'] > 0)
//ja
else
//nein

2.
if(trim($nfo) != "")
//ja
else
//nein

3.
if(trim($_FILES['nfo']['name']) != "")
//ja
else
//nein

am besten du holst dir aus der $_FILES die Error
$nfo_error = $_FILES['nfo']['error'];
und führst eine neue Überprüfung durch!

und zwar
4.
if(!$nfo_error) {
gen_nfo_pic($nfo, $GLOBALS["TORRENTNFO_DIR"]."/nfo-$id.png");
tr_status("ok");
} else {
tr_status("err");
}

damit ist die Sache erledigt!

Entity
02.04.2011, 23:41
aber das problem besteht dann weiterhin so

Stifler
02.04.2011, 23:53
Schwachsinn.

Wenn wirklich keine NFO oder sonst was im nfo input Feld angeben wird ist die size 0, der Name leer, der Inhalt leer und der Error true!

mit all diesen Abfragen ist es unmöglich dass eine NFO erstellt werden kann!

Also entweder du gibst eine an und merkst es nicht oder deine Variablen stimmen nicht!

Entity
02.04.2011, 23:56
sorry stimmt habs hinbekommen man sollte auch die php abspeichern :D

danke dir

Stifler
03.04.2011, 00:04
Und wennst ganz pfiffig sein willst machst folgendes:

$allowed_nfos = array("nfo");
$nfo = $_FILES['nfo'];

if(trim($nfo['name']) != "" && trim($nfo['tmp_name']) != "" && $nfo['size']) > 0 && in_array(end(explode(".", strtolower($nfo['name']))), $allowed_nfos)) {
gen_nfo_pic($nfo['tmp_name'], $GLOBALS["TORRENTNFO_DIR"]."/nfo-$id.png");
tr_status("ok");
} else {
tr_status("err");
}

tantetoni2
03.04.2011, 11:46
Schwachsinn.

Wenn wirklich keine NFO oder sonst was im nfo input Feld angeben wird ist die size 0, der Name leer, der Inhalt leer und der Error true!

mit all diesen Abfragen ist es unmöglich dass eine NFO erstellt werden kann!

Also entweder du gibst eine an und merkst es nicht oder deine Variablen stimmen nicht!

falsch wenn kein bild angegeben ist size nicht 0 sondern null also nix nur der error hat die nummer 4
und error ist immer gegeben

heist das funzt nicht
$nfo_error = $_FILES['nfo']['error'];

if(!$nfo_error) {...
siehe
http://www.php.net/manual/en/features.file-upload.errors.php

entity machs mal so

$allowdExtensions = 'nfo|txt';
if( !empty( $_FILES['nfo'] ) && $_FILES['nfo']['error'] < 4 &&
preg_match( '/(' . $allowdExtensions . ')/i', strrchr ( $_FILES['nfo']['name'], '.' ) ) {
if ( gen_nfo_pic( $_FILES['nfo']['tmp_name'], $GLOBALS['TORRENTNFO_DIR'] . '/nfo-' . $id . '.png' ) ) ) {
tr_status( 'ok' );
}
else {
tr_status( 'err' );
if ( file_exists( $GLOBALS['TORRENTNFO_DIR'] . '/nfo-' . $id . '.png' ) ) {
unlink( $GLOBALS['TORRENTNFO_DIR'] . '/nfo-' . $id . '.png' );
}
}
}
else {
tr_status( 'err' );
}

gotthummer
03.04.2011, 12:43
Ich würd den ganzen nfo Bild kram ausbaun ist doch eh unnütz

Entity
03.04.2011, 12:50
TT deins hat in der Zeile nen Parse error: syntax error, unexpected '{' in
preg_match( '/(' . $allowdExtensions . ')/i', strrchr ( $_FILES['nfo']['name'], '.' ) ) {


hab noch nicht geschaut wo bin gerade erst wach :D muss erst mal wach werden ^^

@GH mein Team wünscht sich das so dann sollen sie es so bekommen. ich halte auch nicht viel von NFO

tantetoni2
03.04.2011, 12:57
entity dann mach vor der { eine ) dann stimmts wieder hab ich übersehen ;)

Entity
03.04.2011, 13:05
OK funktioniert soweit nur bei deiner funktion macht er nicht das richtige NFO Bild

bei deinem hab ich nur ein Bild mit dem Text /tmp/php9loALc

tantetoni2
03.04.2011, 13:23
naja ist ja auch klar der erste parameter der funktion gen_nfo_pic ist ja auch der text, sorry dann so

if( !empty( $_FILES['nfo'] ) && $_FILES['nfo']['error'] < 4 &&
preg_match( '/(' . $allowdExtensions . ')/i', strrchr ( $_FILES['nfo']['name'], '.' ) ) ) {
$nfo = str_replace( "\x0d\x0d\x0a", "\x0d\x0a", file_get_contents( $_FILES['nfo']['tmp_name'] ) );
if ( gen_nfo_pic( $nfo, $GLOBALS['TORRENTNFO_DIR'] . '/nfo-' . $id . '.png' ) ) {
tr_status( 'ok' );
}
else {
tr_status( 'err' );
if ( file_exists( $GLOBALS['TORRENTNFO_DIR'] . '/nfo-' . $id . '.png' ) ) {
unlink( $GLOBALS['TORRENTNFO_DIR'] . '/nfo-' . $id . '.png' );
}
}
}
else {
tr_status( 'err' );
}

Entity
03.04.2011, 13:31
Ok Super funktioniert nun. Deins ist übersichtlicher wie meins :-)

vor der { am ende nur noch ne ) wegnehmen dann passt es
if ( gen_nfo_pic( $nfo, $GLOBALS['TORRENTNFO_DIR'] . '/nfo-' . $id . '.png' ) ) {
danke Dir tantetoni2 (http://www.netvision-technik.de/forum/member.php?u=398)

Stifler
03.04.2011, 14:52
if(!$nfo_error) {...
reicht absolut für seine und andere Bedürfnisse aus!
weil 0 -> "Value: 0; There is no error, the file uploaded with success."
und alles was über 0 geht ist true!! 0 ist false!
preg_match bei so einer überprüfung zu verwenden halte ich für unsinn.. da ist das array + in_array wesentlich schneller!

Aber jeder wie er glaubt

tantetoni2
03.04.2011, 15:40
na dann mach mal ein test, in_array ist ne mächtige performence bremse prüfe mal if ( 0 === false )

vielleicht solltest du dich nochmal mit opperanden und Operatoren beschäftigen

Stifler
03.04.2011, 15:54
if(in_array('html',array('htm','html','shtm','shtml')))

und

if(preg_match('/^.*htm.*$/','html'))

for Schleife mit $i<=6000

Fazit in_array ist ca. 40% schneller!

preg_match() = 0.1394340000
in_array() = 0.1061300000

Würde dir mal Gut tun nicht immer aus Jux und Tollerei den Obergscheiten raushängen zu lassen und hin und wider mal zur Kenntnis nehmen dass ein anderer auch Recht hat!
Das macht zwar Eindruck bei den Anfängern ist aber extremst ärgerlich bei Leuten die sich auch auskennen!

Das RegEx ne langsame Gurcke sollte jeder wissen und mit Arrays zu Arbeiten wo man kann ist auch nicht verkehrt!

tantetoni2
03.04.2011, 16:49
ämm ich bin von deinen end(explode(".", strtolower($nfo['name']))) ausgegangen, allerdings kommt das auch immer auf die situation an, viele wissen nich mal das in_array sämtliche sachen wie eine sting vergleich macht, aber einzeln wie dein beispiel oben ist es natürlich schneller.
es gibt viele situationen wo preg_match schneller ist als in_array wenn ich es finde kann ich nachher mal ein sehr gute bespiel posten

function microtime_float() {
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}

$ext = strrchr ( 'abcs.shtml', '.' );
echo 'extension: ' . $ext;

$s = microtime_float();
for ( $i = 0; $i < 2000; ++$i ) {
if( in_array( end(explode(".", strtolower('abcs.shtml'))) , array('htm','html','shtm','shtml') ) )
continue;
}
echo '<br /><br />' . (microtime_float()-$s);


$s = microtime_float();
for ( $i = 0; $i < 2000; ++$i ) {
if( preg_match( '/s?html?/i' ,strrchr ( 'abcs.shtml', '.' ) ) )
continue;
}
echo '<br /><br />' . (microtime_float()-$s);

wenn du die funktionen für die dateiendungen nicht in die schleife packen würdst wäre in_array wieder schneller es kommt auf die situation drauf an

was natürlich noch besser ist ist folgendes

$extensions = array_flip( array( '.html','.htm', '.shtml', '.shtm' ) );
$ext = strrchr ( 'abcs.shtml', '.' );
echo 'extension: ' . $ext;

$s = microtime_float();
for ( $i = 0; $i < 2000; ++$i ) {
if( isset( $extensions[$ext] ) )
continue;
}
echo '<br /><br />' . (microtime_float()-$s);

Stifler
03.04.2011, 17:08
So oder so nicht alles schlecht reden was ich poste!!

TUT sein Dienst! &copy; by Zero

tantetoni2
03.04.2011, 17:10
ich rede doch nicht alles schlecht, deine idee mit dem like was zb astrein, auch wenns nicht besonders abgesichert war, aber wenn du zb 20 erweiterungen in dem array hast ist es langsamer als das preg_match beispiel
function microtime_float() {
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}

$ext = end(explode(".", strtolower('abcs.shtml')));
$s = microtime_float();

for ( $i = 0; $i < 2000; ++$i ) {
if( in_array( $ex, array('htm','html','shtm','shtml', 'txt', 'doc','zip','rar','rtf', 'php') ) )
continue;
}
echo '<br /><br />in_array: ' . (microtime_float()-$s);

$ext = strrchr ( 'abcs.shtml', '.' );
$s = microtime_float();

for ( $i = 0; $i < 2000; ++$i ) {
if( preg_match( '/s?html?|txt|doc|zip|rar|rtf|php/i' ,$ext ) )
continue;
}
echo '<br /><br />preg_match: ' . (microtime_float()-$s);

die masse machts ;)

Stifler
03.04.2011, 17:32
WIe du sagst es kommt auf den Zweck an aber ich finde es ist nicht zu viel verlangt wenn eine nfo auf die Endung .nfo hat und deshalb wäre es auch nur 1 Endung zum überprüfen im Array.
Man könnte auch den Mime Type überprüfen text/plain ich mach das z.B bei der Torrent Datei!

if(!isset($dict) || $ftype != "application/x-bittorrent") {
torrent_error("Das ist keine gültige Torrent-Datei!");
}