Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2016-06-21 20:27:55

  ghost25 - Użytkownik

ghost25
Użytkownik
Zarejestrowany: 2015-04-13

Skrypty PHP pomóżcie znaleźć błąd

Mam dwa skrypty PHP. Pierwszy umieszcza parę plików na serwerze i modyfikuje index.html:

Kod:

<?php
$nazwa_gry = $_POST["nazwa"];
mkdir($nazwa_gry);
mkdir($nazwa_gry . "/assets/");
$target_dir = $nazwa_gry . "/assets/";

//tlo
$tlo = $target_dir . "tlo.jpg";
$uploadOk = 1;
$tlotype = pathinfo($tlo,PATHINFO_EXTENSION);
// Allow certain file formats
if($tlotype != "jpg") {
    echo "Tlo musi byc jpg! ";
    $uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 1) {
    if (move_uploaded_file($_FILES["tlo"]["tmp_name"], $tlo)) {
        echo "Plik ". basename( $_FILES["tlo"]["name"]). " zostal wgrany na serwer. ";
    } else {
        echo "Blad!";
    }
}
//tlo

//bird
$bird = $target_dir . "bird.png";
$uploadOk = 1;
$birdtype = pathinfo($bird,PATHINFO_EXTENSION);
// Allow certain file formats
if($birdtype != "png") {
    echo "Bird musi byc png! ";
    $uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 1) {
    if (move_uploaded_file($_FILES["bird"]["tmp_name"], $bird)) {
        echo "Plik ". basename( $_FILES["bird"]["name"]). " zostal wgrany na serwer. ";
    } else {
        echo "Blad! ";
    }
}
//bird

//pipe
$pipe = $target_dir . "pipe.png";
$uploadOk = 1;
$pipetype = pathinfo($pipe,PATHINFO_EXTENSION);
// Allow certain file formats
if($pipetype != "png") {
    echo "Przeszkoda musi byc png! ";
    $uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 1) {
    if (move_uploaded_file($_FILES["pipe"]["tmp_name"], $pipe)) {
        echo "Plik ". basename( $_FILES["pipe"]["name"]). " zostal wgrany na serwer. ";
    } else {
        echo "Blad! ";
    }
}
//pipe

//splash
$splash = $target_dir . "splash.png";
$uploadOk = 1;
$splashtype = pathinfo($splash,PATHINFO_EXTENSION);
// Allow certain file formats
if($splashtype != "png") {
    echo "Ekran powitalny musi byc png!";
    $uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 1) {
    if (move_uploaded_file($_FILES["splash"]["tmp_name"], $splash)) {
        echo "Plik ". basename( $_FILES["splash"]["name"]). " zostal wgrany na serwer. ";
    } else {
        echo "Blad! ";
    }
}
//splash

//icon
$icon = "./index_files/" . $nazwa_gry . ".png";
$uploadOk = 1;
$icontype = pathinfo($icon,PATHINFO_EXTENSION);
// Allow certain file formats
if($icontype != "png") {
    echo "Obraz wyswietlany na stronie glownej musi byc png! ";
    $uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 1) {
    if (move_uploaded_file($_FILES["icon"]["tmp_name"], $icon)) {
        echo "Plik ". basename( $_FILES["icon"]["name"]). " zostal wgrany na serwer. ";
    } else {
        echo "Blad! ";
    }
}
//icon

//kopiuj zrodla
$main = copy ("michal/main.js", $nazwa_gry . "/main.js");
$phaser = copy ("michal/phaser.min.js", $nazwa_gry . "/phaser.min.js");
if ($main == 1) {
    echo "Udalo sie skopiowac glowny kod gry z Vappy Michala! ";
}
else {
    echo "Nie udalo sie skopiowac glownego kodu gry z Vappy Michala! ";
}
if ($phaser == 1) {
    echo "Udalo sie skopiowac framework Phaser z Vappy Michala! ";
}
else {
    echo "Nie udalo sie skopiowac frameworka Phaser z Vappy Michala! ";
}

//zmien index michala
$source='michal/index.html';
$target=$nazwa_gry . "/index.html";

// copy operation
$sh=fopen($source, 'r');
$th=fopen($target, 'w');
while (!feof($sh)) {
    $line=fgets($sh);
    if (strpos($line, 'Vappy Michał')!==false) {
        $line="<title> " . $nazwa_gry . " </title>" . PHP_EOL;
    }
    fwrite($th, $line);
}

fclose($sh);
fclose($th);
//zmien zrodla michala
//kopiuj zrodla

//dodaj do strony glownej
$source='index.html';
$target='index.tmp';

// copy operation
$sh=fopen($source, 'r');
$th=fopen($target, 'w');
while (!feof($sh)) {
    $line=fgets($sh);
    if (strpos($line, "<! -- Tutaj dodawac nowe gry -- >")!==false) {
        $line="<div class=\"card\"><img src=\"" . $icon . "\"><h3>" . $nazwa_gry . "</h3><a href=\"" . $nazwa_gry . "/index.html" . "\">Zagraj<a> <br></div>" . PHP_EOL . "<! -- Tutaj dodawac nowe gry -- >" . PHP_EOL;
    }
    fwrite($th, $line);
}

fclose($sh);
fclose($th);

// delete old source file
unlink($source);
// rename target file to source file
rename($target, $source);
//dodaj do strony glownej

//ustaw haslo
$haslo = $_POST["haslo"];
$haslo_md5 = md5($haslo);
$plik_haslo_path = $nazwa_gry . "/haslo.txt";
$plik_haslo=fopen($plik_haslo_path, 'w');
fwrite($plik_haslo, $haslo_md5);
fclose($plik_haslo);
//ustaw haslo

echo "Jezeli wszystko poszlo dobrze to twoja gra jest juz na stronie glownej! ";
?>

A drugi ma odwrócić jego działanie, czyli usunąć pliki wgrane na serwer i linię dopisaną do index.html:

Kod:

<?php
//funkcja usuwania folderu
function removeDir($path) {
$dir = new DirectoryIterator($path);
foreach ($dir as $fileinfo) {
if ($fileinfo->isFile() || $fileinfo->isLink()) {
unlink($fileinfo->getPathName());
} elseif (!$fileinfo->isDot() && $fileinfo->isDir()) {
removeDir($fileinfo->getPathName());
}
}
rmdir($path);
}
//funkcja usuwania folderu

$nazwa = $_POST["nazwa"];
$haslo = $_POST["haslo"];
$icon = "./index_files/" . $nazwa . ".png";
$haslo_md5 = md5($haslo);
$haslo_plik = fopen($nazwa . "/haslo.txt", "r");
$haslo_z_pliku = fgets($haslo_plik);
fclose($haslo_plik);
if($haslo_md5  == $haslo_z_pliku) {
        removeDir($nazwa);
        unlink($icon);
        
        
        $source='index.html';
        $target='index.tmp';

        // copy operation
        $sh=fopen($source, 'r');
        $th=fopen($target, 'w');
        while (!feof($sh)) {
            $line=fgets($sh);
            if (strpos($line, "<div class=\"card\"><img src=\"" . $icon . "\"><h3>" . $nazwa . "</h3><a href=\"" . $nazwa . "/index.html" . "\">Zagraj<a> <br></div>" . PHP_EOL . "<! -- Tutaj dodawac nowe gry -- >" . PHP_EOL)!==false) {
                $line="<! -- Tutaj dodawac nowe gry -- >";
            }
            fwrite($th, $line);
        }

        fclose($sh);
        fclose($th);

        // delete old source file
        unlink($source);
        // rename target file to source file
        rename($target, $source);
        
        
        echo "Twoja gra zostala usunieta!";
}
else {
        echo "Niepoprawna kombinacja nazwy i hasla!";
}
?>

Ale jak zwykle coś musi nie działać. Drugi skrypt usuwa prawidłowo pliki, ale już index.html nie chce zmodyfikować. Pewnie jak zwykle gdzieś jest jakiś banalny błąd, ale siedzę już kilka godzin i go nie widzę.


http://i.imgur.com/fyAZ9.gif

Offline

 

#2  2016-06-21 22:24:22

  pasman - Użytkownik

pasman
Użytkownik
Zarejestrowany: 2015-12-16

Re: Skrypty PHP pomóżcie znaleźć błąd

modyfikowanie index.html nie jest dobrą praktyką.

poza tym czy ścieżki $source , $target są kompletne ?

Offline

 

#3  2016-06-22 16:51:58

  ghost25 - Użytkownik

ghost25
Użytkownik
Zarejestrowany: 2015-04-13

Re: Skrypty PHP pomóżcie znaleźć błąd

$source i $target są kompletne, skrypty są w tym samym folderze co index.html


http://i.imgur.com/fyAZ9.gif

Offline

 

#4  2016-06-22 20:05:31

  Piotr3ks - Też człowiek :-)

Piotr3ks
Też człowiek :-)
Zarejestrowany: 2007-06-24

Re: Skrypty PHP pomóżcie znaleźć błąd

Może uprawnienia do pliku nie pozwalają?

Offline

 

#5  2016-06-23 15:03:33

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: Skrypty PHP pomóżcie znaleźć błąd

Może by tak włączyć raportowanie błędów w skrypcie i nie zgadywać. Sam powie co go boli.
W razie czego http://stackoverflow.com/questions/1053424/how-do-i … rs-to-display

Offline

 

#6  2016-06-23 17:21:27

  ghost25 - Użytkownik

ghost25
Użytkownik
Zarejestrowany: 2015-04-13

Re: Skrypty PHP pomóżcie znaleźć błąd

Piotr3ks, uprawnienia do index.html są prawidłowe, bo pierwszy skrypt działa dobrze. kazmikaze, dopisałem

Kod:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

i nie informuje o żadnych błędach.


http://i.imgur.com/fyAZ9.gif

Offline

 

#7  2016-06-23 19:49:40

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: Skrypty PHP pomóżcie znaleźć błąd

No to działa, tylko pewnie jest jakiś błąd w logice. To teraz trzeba pomyśleć przejść po kolei i zobaczyć co się dzieje. Idealnie jakbyś miał jakiś debugger. Ale jak nie ma to możesz umieszczać echo "tekst" by wiedzieć czy wchodzi gdzie trzeba. Np. czy wchodzi w twój if, który sprawdza czy ciąg się znajduje w linii. Ważna uwaga, jeśli strpos zwróci 0, co prawdopodobne to jest to false i nie wejdzie do if-a.

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)