Archiv verlassen und diese Seite im Standarddesign anzeigen : NFO Problem
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
jaaa aus welche phph hast du die denn wenn ich mal fragen darf
weil ich hatte auch so mal eine kleine Problem
aus der takeupload natürlich :D
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");
das ist das gleiche wie meins
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"]
das hat aber nix damit zutuen meine bilder werden nur woanders gelagert als wie bei dir im Bitbucket
jaaa also denn hast du jaaa bis jetzt alles richtig
les dir mal mein ersten post durch
also jaaa habe ich jetzt grade !!!!
aber es musss denn mehr sein
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
Ä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!
aber das problem besteht dann weiterhin so
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!
sorry stimmt habs hinbekommen man sollte auch die php abspeichern :D
danke dir
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
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 ;)
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' );
}
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)
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
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);
So oder so nicht alles schlecht reden was ich poste!!
TUT sein Dienst! © 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 ;)
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!");
}
vBulletin® v3.8.9, Copyright ©2000-2024, vBulletin Solutions, Inc.