PHP String/File Validation in UploadScript schlägt falschen Alarm

smallwall

Lt. Junior Grade
Registriert
Feb. 2014
Beiträge
446
Edit: Problem fixed, kann gelöscht werden.

Hi, ich habe ein UploadScript in dem ich folgende Funktion zur validierung nutze

PHP:
    function is_pgn($text) {

        $hasEvent = (strpos($text, "[Event ") !== false) ? true : false;
        $hasSite = (strpos($text, "[Site ") !== false) ? true : false;
        $hasWhite = (strpos($text, "[White ") !== false) ? true : false;
        $hasBlack = (strpos($text, "[Black ") !== false) ? true : false;
        $hasResult = (strpos($text, "[Result ") !== false) ? true : false;

        if ($hasEvent && $hasBlack && $hasSite && $hasWhite && $hasResult) {
            return true;
        }
    }

Call:
PHP:
 if (is_pgn($file_contents)) {
                ..... 
                } else {
                    // not valid .pgn, you can delete file...
                    die("Not valid .pgn");
                }

Hier habe ich einige Beispieldateien, die ihr euch anschauen könnt http://www.devphp.de/pgn/demopgn/

Alle Dateien werden korrekt als .pgn erkannt, nur die Oberliga.pgn nicht. Die Erkennung läuft halt so, dass in die Datei geschaut wird, ob "[Event " etc. vorkommt, und wenn alle Werte vorkommen, wird true gegeben.

Ich verstehe nicht, wieso die Oberliga.pgn aussortiert wird. Ich habe noch andere Dateien, die aussortiert werden, und bei denen das gleiche: Sie müssten true liefern, nachdem sie die Funktion durchlaufen haben.

Habt ihr eine Idee oder Hinweis, was dort schief läuft?

Das UploadScript ist unter http://www.devphp.de/pgn/upload3.php (bzw. das Formular dazu) zu finden, Ihr könnt gerne mal probieren, euch die Datei herunter zu laden und dort hoch zu laden, bei mir wird die() angesteuert, aus unerklärlichen Gründen.

mfg

Ach lol, in der Datei ist kein "[Site ", wieso nicht? Das ist invalid .pgn, zurecht. Um sie trotzdem anzunehmen bau ich den check aus.
 
Zuletzt bearbeitet:
nur mal so am rande, ist

Code:
$hasEvent = (strpos($text, "[Event ") !== false) ? true : false;
nicht das gleiche wie
Code:
$hasEvent = (strpos($text, "[Event ") !== false)

du sagst jetzt: Wenn die Aussage wahr ist, setzte die variable auf wahr. Wenn sie unwahr ist setzt die variable auf unwahr. Du könntest aber auch einfach auf das ergebniss der aussage setzten.

außerdem guck dir mal reguläre ausdrücke und entsprechend preg_match (bzw. preg_match_all) an, die sollten das wesentlich effektiver parsen als strpos.

Immerhin öffnest du die datei ganze 5 mal, nehme zwar an das die gesuchten teile im header stehen aber trotzdem. Ist die position an der sich die infos befinden denn überhaupt variable und vorallem case-sesnitve? oder kann da auch mal [site stehen?
 
Zuletzt bearbeitet:
Ja, regexp und preg_match ist noch nicht in meinem Repertoire. Aber die Datei wird nicht 5x geöffnet. Es wird 5x im String gesucht. Bisher habe ich noch nichts case insensitives gesehen. Die abgefragten Strings stehen vor jeder Partie, die größte die ich hab ist 1500 Partien lang.
 
Zurück
Oben