A što kad nađem bug u PHPu :s

Da, ali ja sam krenuo dalje sa kodom…i sad ti vraćam što je bilo ranije. No neke su stvari zaista nebitne…kao to recimo. Šteta što mi toliko ne vjeruješ…a i sebi toliko ne vjeruješ…jer što bi to moralo biti u tom foreachu, da kasnije bude to što je xd. Ali dobro…sumnje nikad dosta.

Samo sam ja to sve bio prečačkao uzduž i poprijeko. Full precizno sam izolirao uzroke problema, pa mi je jasno da nisu bili tamo!!!. Bitniji je onda dio kako razbijam URL.
Ali što se i toga tiče, probao sam ga razbiti i sa codeom koji si ti gore stavio…pa je problem bio isti.

A što se tiče rekonstrukcije codea, budem ja vratio code u stanje bugiranja, pa ću sve copy-paste. Ali to sad nemogu, jer velim…otišao sam ja dalje sa codeom.

Imaš gore tu funkciju!!!

Posalji nam ispis putanja koje prosljedjujes funkciji gdje se desavaju nelogicnosti. Ne nakucavanje, niti pretpostavke na osnovu ulaznih parametara, vec copy/paste ispisa odmah prije poziva te funkcije.

$neki_url = $to . $ito;
echo $neki_url;
if (funkcija($neki_url)) {
echo "proslo";die();
} else {
echo "nije";die();
}

Zaista ne kužiš stvari…tebi se nakon ovoga više ne obraćam!
Zadnji put ću ti znači reći:
-em nemaš pojma sa svojim glupim pitanjima
-em ne kužiš da radim na codu, otišao sam dalje sa alternativnom verzijom…nemogu napraviti copy paste, kad sad imam alternativu koja radi.
-da, samostalno sam više puta vraćao code u stanje koje ne radi…i to sam sad napravio i za vas. Ali to radim iz glave…i može uletiti ovako glupi tipfeler. No suština zbog koje buguje, to NE mogu fulati. Jer se to ne radi o nekom tamo točki zarezu zbog kojeg će PHP vrisnuti…nego je stvar očita, pošto sam ju precizno istjerao. (Samo još neznam hoću li moći isto simulirati na drugom računali, drugi OS, drugi XAMPP, druga verzija PHPa …a i druga okolna sintaksa, ako izdvojim samo krucijalna stvari.)

No previše sam riječi za tebe potrošio na tvoja glupa pitanja…sorry, ali te više ne čitam!

Kod mene ovo najnormalnije radi. I generira folder kako i treba. Evo kod

<?php
    ini_set('display_errors', 1);
    error_reporting(E_ALL);

    $Config = [
        'rootDomain' => 'http://localhost/css/index.php',
        'script_name_max_length' => 6
    ];

    //define('rootDomain', 'http://localhost/css/index.php');
    //$rootDomain = "http://localhost/css/index.php";
    
    function getURL() 
    {
        $PageURL = 'http';
        if (isset($_SERVER["HTTP"]) && $_SERVER["HTTPS"] == "on")
        {
            $PageURL .= "s";
        }
        
        $PageURL .= "://";
        
        if ($_SERVER["SERVER_PORT"] != "80")
        {
            $PageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
        }
        else
        {
            $PageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
        }
        
        return $PageURL;
    }

    function getUrlParams($url,$rootDomain)
    {
        $rootDomain=rtrim($rootDomain,'/');
        
        $index=strpos($url,$rootDomain);
        
        if($index===false)
        {
            die('Moras podesiti parametar "rootDomain" u index.php!');
        }
        
        $url=trim(substr($url,$index+strlen($rootDomain)),'/');
        
        $parts=explode("/",$url);
        
        return $parts;
    }


    function generirajSkripte($pageFolderName,$path,$scriptName,$f=array())
    {
        // echo 'hocem li generirati: '.$pageFolderName.', '.$path.', '.$scriptName;br();
        // echo 'to je path: '.$pageFolderName.$path;br();

        if(!file_exists ($pageFolderName)){if (!mkdir($pageFolderName, 0777, true)) {dies('Failed to create folders...');}}

        if(!file_exists($pageFolderName.$path)) 
        {
            //echo 'ne postoji: '.$pageFolderName.'/'.$path;br();

            //ako ne postoji kreiran folder..prvo njega radi
            if (!mkdir($pageFolderName.$path, 0777, true))
            {
                die('Failed to create folders...');
            }

            //model.php
            $file=fopen($pageFolderName.$path.$scriptName."_m.php", "w");  
            fwrite($file, "<?php \n\n\n\n\n?>"); fclose($file);

            //wiev php (content)
            $file=fopen($pageFolderName.$path.$scriptName."_w.php", "w"); 
            $fileTxt=isset($f['text_w']) ? $f['text_w'] : ""; 
            fwrite($file, $fileTxt );
            fclose($file);

            //file.js
            $file=fopen($pageFolderName.$path.$scriptName.".js", "w");
            fwrite($file, "/*\n onload(function()\n\t{\n\t});\n*/"); 
            fclose($file);

            //file.css
            $file=fopen($pageFolderName.$path.$scriptName.".css", "w");
            fclose($file);


            echo 'Generirane su auto skripte za path: '.$pageFolderName.$path . "<br/>";
        }
    }


   function urlToScriptName($urlPart) 
   {
       global $Config;
       return isset($Config['script_name_max_length']) ? substr($urlPart,0,$Config['script_name_max_length']) : substr($urlPart,0,7);
   }

    $UrlParts = getUrlParams(getURL(),$Config['rootDomain']);

    print_r($UrlParts);

    $PageNames=array();
    $ScriptNames=array();

    for( $x=0; $x < count($UrlParts); $x++)
    {
        $PageNames[$x]=($UrlParts[$x]=="") ? 'main': $UrlParts[$x];
        $ScriptNames[$x]= urlToScriptName($PageNames[$x]);
    }
    

    
    generirajSkripte("pages/",$PageNames[0].'/'.$PageNames[0].'/',$ScriptNames[0]);
    generirajSkripte("pages/",$PageNames[0].'/'.$PageNames[1].'/',$ScriptNames[1]);
    
    print_r($PageNames);
    echo "<br />";
    print_r($ScriptNames);
    
    ?>

Ne trebas isprobavati. Direktorijum ce biti napravljen imao/nemao slash na kraju kao ulaznu varijablu.
mkdir(_DIR_ . ‘test001’);
i
mkdir(_DIR_ . ‘test001/’);
ce napraviti identican direktorijum.
Sada je bitno koliko vladas ulaznim podatkom da li je atribut generirajSkripte() sa slash-om ili bez.

  1. prvi mkdir ti pravi $pageFolderName // inicijalni slucaj kad nema niti jednog generisanog direktorijuma
  2. druga provjera koristi noSlashRight f-ju sto ce skinuti slash sa kraja vec concatenate-ovanog stringa.
    Dakle ulazna varijabla $pageFolderName mora da ima slash na kraju.
    Da li si definitivan u tome da argument generirajSkripte() funkcije $pageFolderName u svim iteracijam i slucajevima je inicijalno postavljen sa slash-om na kraju? Ukoliko postoji promil sanse da se funkciji proslijedi string bez slash-a, nece dobro da radi.
    P.s. nemoj da se ljutis na (pod)pitanja koja ti se postavljaju. Samo se trudimo da imamo uvid u kod koji i ti imas.
    A evo nesto za ljutnju (kako kome):
    http://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/
    tako da ne moram u 50pct postova op-era citati rijec cudno, PHP ne valja ili zasaretalo ili kako vec.
    Plus, sav relevantan kod bi bio na jednom mjestu, a ne bi’ mor’o listati 50 postova da vidim koja funkcija veze koju.
    Mislim meni je veoma pomoglo da metodoloski pocnem obradjivati sopstvena pitanja i probleme.
    Fun fact: ako mislis da je problem do PHP-a, ne znam sta cekas da postavis issue na PHP.net, ubijedjen sam da ce ti odgovor stici u manje od 30 minuta.
    @creatifcode Dobar catch.

Sad onda simuliraj i nastavak. Sad u dnu svoje skripte moraš includati nekakav HTML. Za dobru simulaciju je možda potrebno da taj HTML includa još neki drugi HTML. (To recimo još nisam probao, dali bug ovisi o dubinji includanja) …no ni kod mene nema buga, ako naknadno ne includam HTML :D. O tome ti govorim cijelo vrijeme!

E sad, taj HTML koji includaš, mora imati IMG tag…a taj img tag neka ima sljedeći src=‘img/profile.png’

E sad neznam još jednu stvar, ja sam fulao sa relativnim pathom od toga imga, pa se taj image uzastopice pokušavao učitati…jer ga browsers nije pronalazio. (Iako sumnjam da to ima veze, vrag zna.)

Uglavnom, ja sam korekcijom src-a tog img taga, utjecao na ponašanje buga :smiley:

Zato sto ne znas debagirati stvari. Predajes parametre funkciji i pretpostavljas tj. ti tvrdis bez provjere da je finalni rezultat mnogih konkatenacija i rtrim-ova potpuno ispravan. A istovremeno imas problem na toj funkciji. Meni to govori da nesto nije u redu sa putanjom a ti uporno pricas o php bug-u. Da, sigurno je php bug.

1 Like

Isto tako je presmijesno tvrditi kako php preskoci echo liniju i execute-a onu ispod.

I o kakvih html include-ovima pricas? mkdir ce napraviti ili nece napraviti folder sve sto dodje ispod nema apsolutno nikakve veze sa tom funkcijom niti ce nekakav naknadni include nekakvog fantomskog html-a to poremetiti.

Ocke je pitanje, ali imam i ocke odgovor. Fora je u tome da se bug pojavljivao i kad nisam ništa iterirao.
Direktno sam samo pozivao isključivo jednu akciju koja bugira:

generirajSkripte("pages/",$PageNames[0].'/'.$PageNames[1].'/',$ScriptNames[1]);

plus to da u debuging verziji funkcije generirajSkripte() niti nisam radio ovaj inicijalni korak da kreiram glavni folder (pages). …sve sam to ogolio.
Znači debuging verzija funkcije je:

function generirajSkripte($pageFolderName,$path,$scriptName)
	{
	if(!file_exists(rtrim($pageFolderName.$path,'/')))
		{
		echo 'test echooooooooooooo<br/>';
		if(!mkdir(rtrim($pageFolderName.$path,'/'),0777,true)){die('failed to create...');}
		echo 'generirane su auto skripte za path: '.$pageFolderName.$path;
		}
	}

…i ni dlaka više od toga!

A druga bitna stvar, ti da si sve i u pravu, ona i sljedeće nebi radilo:

generirajSkripte("pages/",'developingStyles/fonts/',$ScriptNames[1]);

A to RADI, dok ono gore ne radi :slight_smile:

E sad moram raditi ne stignem se vise zajebavati. Nastavim vjerojatno navecer.

Nemaš pojma što bi dao da upsiješ ovo izrekonstruirat…ali bum probao i ja …sažeti bug u što manji code. Pa podjelim.

Btw. jel se dobije što ako se zaista pronađe nelogičnost unutar PHP-a :smiley:

Fazon je da moras biti definitivan da $pageFolderName je proslijedjen sa slash-om na kraju stringa u sam ulaz funkcije inace (barem jedan dio koda koji smo vidjeli) nece raditi. Recimo ova linija $file=fopen($pageFolderName.$path.$scriptName."_m.php", "w");
Ni manje ni vise, vec mora.
A ti moras znati stanje ulaznih varijabli u funkciju.
Druga iteracije skripte moguce da radi jer preskoci prvi file_exists()?
Ako budes imao vremena sklopi kod u neki sljedeci post jer mi je zamorno da pratim problematican kod na 20+ postova.
Izoliraj kod koji pravi problem i postuj to, a ne kad ti se trazi nesto da postavljas kvazi kod ili nesto drugo.
Vjeruj da je tesko ovako pratiti. Taman se fokusiramo na jedan detalj, ti nam uvaljujes totalno opozitni pristup problemu. Makar je moja percepcija takva. NHF

Gdje se ne razumijemo, jelda da po tvojoj logici ovo oboje ili radi ili ne radi:

v1:

generirajSkripte("pages/",$PageNames[0].'/'.$PageNames[1].'/',$ScriptNames[1]);

v2:

generirajSkripte("pages/",'developingStyles/fonts/',$ScriptNames[1]);

…s time da varijable iz v1 u potpunosti odgovaraju stringovima iz v2 !!!

Epa, problem je da kod mene v1 ne radi, a v2 radi. Ti za to kriviš code unutar funkcije generirajSkripte() ?? Ili mi ne vjeruješ da varijable iz v1 odgovaraju stringu iz v2 ??

Ako ne vjeruješ, evo i ispitao sam:
http://www.forum.hr/showthread.php?t=888634 (post #6 i #7)

ili da citiram pitanje:

Hm, znaci nema entitya…
Ajde probaj ovo, da nema koji razmak
echo (‘developingStyles/fonts/’ == $Pages[0].’/’.$Pages[1].’/’) ? ‘Y’ : ‘N’;

Koju verziju php-a koristis i na kojem OS-u? Jel ima sto u error.logu?

I moj odgovor:

Ovo gore je 'Y'!
PHP je Version 5.5.15
..a OS je WIN 8.1.

…i ovih Y nisam dobio aprokrimativno iz glave, nego sam to strojno dobio. Ma sve sam si ja to strojno isporevjeravao i popisao vrijednosti varijable u svim koracima gdje sam im mogao pristupiti. (Osim kod echo linije koja bude preskočena)

Pogledaj i ovaj post: http://www.forum.hr/showpost.php?p=54807819&postcount=12 …koji je odličan rezime svih ponašanja unutar if uvjeta!!!

A da li ta slika postoji na serveru?
Šta se nalazi u .htaccess fajlu?
Da li npr. ukoliko slika ne postoji, zahtev img/profile.png bude preusmeren npr. na create_folders.php/img/profile.png pa otud ti folderi?

> function generirajSkripte($pageFolderName,$path,$scriptName)
>     {
>     if(!file_exists(rtrim($pageFolderName.$path,'/')))
>         {
>         echo 'test echooooooooooooo';
>         if(!mkdir(rtrim($pageFolderName.$path,'/'),0777,true)){die('failed to create...');}; //čudna linija
>         echo 'generirane su auto skripte za path: '.$pageFolderName.$path;
>         }
>     }  

//result: dobijem čudne foldere, ali NE ispiše se ‘test echo’

Ako ti ne ispise echooo niti neki error pod uslovom da je ukljucen error reporting onda nije ni usao u taj blok if statement-a niti je taj mkdir napravio “cudne” foldere.

Ma ja sam to sa slikom popravio pathove…a problem je svejedno ostao. Jedino ako nešto interno se ugnjezdilo u RAM memoriju dok je browser vrtio i tražio sliku. (Ali to je sve client side…nebi trebalo utjecati na PHP)
S druge strane…i da se zbunio RAM, nebi bilo buga nakon restarta kompa (i to sam čak pokušao).
Bome kao u onom vicu kad krepa fićo kojeg su vozili informatičari…pa su svi probali izaći i ponovno ući u fiću xd.

Nego sad rekonstruiram kod…i već sam sve debelo sažeo i ekstraktirao ga iz cijelog projekta…a bug je još tu :D. Baš me zanima koliko ću moći ukloniti okoline, a da bug ostane. Čim to rješim, valjda će stvari postati jasnije …svim nevjernim tomama :wink:

Čitaj dalje i razmišljaj o svemu OPAŽENOM, pa ćeš vidjeti da sam tu sumnju eliminirao! Recimo ako blokiram taj uvjet sa if(0) …onda nema čudnih foldera. Ili ako zakomentiram taj mkdir, također nema čudnih foldera. I na mnoge druge načine sam još to si dokazao. Uz to sam pobrinuo da nigdje drugdje unutar projekta nemam mkdir(), da nebi slučajno bilo da neki drugi mkdir nešto radi u ovisnosti ovoga. (Mada bi to samo po sebi već bilo totalno neočekivano)

Mozda negdje dva puta pozivas tu funkciju. Kazem jos jednom vrlo je tesko dat odgovor i debugirati nesto gdje nemamo identican kod cijelog projekta u kojem se bug dogodio.

Kako je to molim te client side, kad se sve to odvija na serveru u PHP okruzenju, to nema veze sa client sideom. I mozda je stvarno bila greska do htaccess-a.

Posalji i htaccess da vidimo i to cudo