php include [megoldva]

sziasztok.

Kezdek megőrülni egyetlen problémával.

PHP-ban az


    include ('/tmp/file.log');

eddig mindig működött. Ha
php script.php
parancsot futtattam, akkor is, és ha böngészővel nyitottam meg, akkor is. Szépen beolvasta a file.log tartalmát.

Most azonban nem teszi, pedig a file létezik, nincs zárolva, nincsenek benne különleges karakterek, jogok is megvannak...
parancssorban megvan a kimenetben, de a firefox nem eszi meg, és ezt nem értem. Ugyanis vannak fájlok, melyeket rendesen megesz így a böngésző, de ezt az egyet nem.
Próbáltam már zárójel nélkül is, más idézőjellel, kerestem az anomáliát sokféleképpen, de nem értem.

Hozzászólások

a file tartalma mindössze ennyi:

netstat: 30294

vsftpd: 151

ntpd: 508

httpd: 153 299 301 302 304 309 2244 12948

Tök jó, tudom valahogy befolyásolni, hogy mi kerül abba a logfájlba? Mert akkor máris tudok a szervereden kódot futtatni...

Ha a feladat annyi, hogy egy fájl tartalmát kiírd, akkor az fopen/fpassthru/fclose hármas lesz a barátod (ezek nem fogják értelmezni neked a fájlt, mint PHP kódot). Ha ez egy HTML oldal, akkor fopen/fread/fclose/htmlspecialchar lesz a barátod. (ha meg sima txt oldal, függetlenül attól, hogy a fájlon kívül írsz-e ki valamit, akkor még egy rendes mime type-ot állíts neki)

Szerk.: ill. told fel a hibajelentést (error_reporting) és nézegesd a szerver naplóját, vagy kapcsold be ideiglenesen (!) a usernek kiküldést a hibaüzenetekre (.htaccess-ből phpflag display_errors on vagy ini_set('display_errors', true)

BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)

Amikor azt írtam, még nem volt szó arról, hogy ilyen rövid a file :) Az fpassthru-nak az az előnye megvan, hogy simán streameli az egész fájlt gyakorlatilag fd-ről/fd-re és nem húzza be a PHP futtatókörnyezetbe. Rövid fájlokra persze file_get_contents.

BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)

Kis kódrészlet a parancssori kimenetből:


rtl_ais.temp:<BR><BR><PRE>Edge tuning disabled.
DC filter enabled.
RTL AGC disabled.
Internal AIS decoder enabled.
Buffer size: 163.84 mS
Downsample factor: 64
Low pass: 25000 Hz
Output: 48000 Hz
Found 1 device(s):
  0:  Generic, RTL2832U, SN: 77771111153705700

Using device 0: Generic RTL2832U
Found Rafael Micro R820T tuner
Log NMEA sentences to console ON
AIS data will be sent to 127.0.0.1 port 10110
Tuner gain set to 8.70 dB.
Tuner error set to 37 ppm.
Tuned to 162000000 Hz.
Sampling at 1600000 S/s.
</PRE>-----<BR>ais.log last sentences:<BR><BR>!AIVDM,1,1,,B,33Wj8k1P001G?sBK:jA00?vnPDsb,0*2A
!AIVDM,1,1,,A,13WknV5P221G>CFK:whmfOwf00Rk,0*0A
!AIVDM,1,1,,A,13WknV5P211G>QjK:uS62OvJ0<0u,0*5C
!AIVDM,1,1,,B,13WknV5P1@1G>lfK:rVE<OwH0@K@,0*52
!AIVDM,1,1,,A,13Wks`hP1UQG>T4K:uDEmgwhRHQ>,0*7A
!AIVDM,1,1,,B,13WknV5P161G?78K:r2CK?v:0@4H,0*41
!AIVDM,1,1,,A,13Wks`hP1UQG>i@K:s?EngvRR8:?,0*6C
!AIVDM,1,1,,B,13WknV5P0o1G?E0K:rOAoOvf00Sn,0*25
!AIVDM,1,1,,A,33Wj8k1P001G?sBK:jA00?w<PDjJ,0*4B
!AIVDM,1,1,,A,13WknV5P0n1G?EjK:shLR?wd08QB,0*3E
!AIVDM,1,1,,B,13WknV5P131G??bK:tAt7gv:0<0t,0*34
!AIVDM,1,1,,B,13Wks`hP1JQG?DNK:o:5FOv>R620,0*5E
!AIVDM,1,1,,A,13Wks`hP1KQG?LRK:nKUAgvRR620,0*1B
!AIVDM,1,1,,B,33WknV5P171G?1@K:u7cnOvh02pS,0*34<BR>-----<BR><h3><font color=\"#2DFFFF\">Free space: 439M <BR>
Uptime: 5:49 <BR>
System time: 19:40:38   
2017 Feb 15 CET<BR>
Processor: 49.2°<BR>Logger files:<BR>71M Feb 11 17:56 /opt/gps.minicom <BR>
0 Feb 15 19:40 /opt/gps.minicom.RMC.nmea <BR>
671 Feb 15 18:55 /tmp/ais.log <BR>
<BR></font></h3> 19:40:39 up  5:49,  2 users,  load average: 1.12, 0.88, 0.77
<BR><PRE>wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.12.1  netmask 255.255.255.0  broadcast 192.168.12.255
        ether 10:7b:ef:cd:0a:d1  txqueuelen 1000  (Ethernet)
        RX packets 56014  bytes 7125875 (6.7 MiB)
        RX errors 0  dropped 777  overruns 0  frame 0
        TX packets 40844  bytes 13899785 (13.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

(a html-tagek itt nem látszanak)

Szóval ezeket különböző fájlokból veszem include-dal. Minden bejön, kimenet megvan parancssorban, de böngészővel 2 fájlból nem tudok kimenetet varázsolni. Olyanokból, amelyekben még különleges karakter sincs.

Az anomáliát nem értem.

Nem. Az elsők között volt, amit néztem.

A fenti kimenetet nézve ez a másik file tartalma, ami böngészőben nem jelenik meg:

"
rtl_ais.temp:Edge tuning disabled.
DC filter enabled.
RTL AGC disabled.
Internal AIS decoder enabled.
Buffer size: 163.84 mS
Downsample factor: 64
Low pass: 25000 Hz
Output: 48000 Hz
Found 1 device(s):
0: Generic, RTL2832U, SN: 77771111153705700

Using device 0: Generic RTL2832U
Found Rafael Micro R820T tuner
Log NMEA sentences to console ON
AIS data will be sent to 127.0.0.1 port 10110
Tuner gain set to 8.70 dB.
Tuner error set to 37 ppm.
Tuned to 162000000 Hz.
Sampling at 1600000 S/s.
"

A törtvonal nem tetszene neki az S/s-nél?

A másik, ami csak bash-ban jön ki a kimeneten, az ez:


"
!AIVDM,1,1,,B,33Wj8k1P001G?sBK:jA00?vnPDsb,0*2A
!AIVDM,1,1,,A,13WknV5P221G>CFK:whmfOwf00Rk,0*0A
!AIVDM,1,1,,A,13WknV5P211G>QjK:uS62OvJ0<0u,0*5C
!AIVDM,1,1,,B,13WknV5P1@1G>lfK:rVET4K:uDEmgwhRHQ>,0*7A
!AIVDM,1,1,,B,13WknV5P161G?78K:r2CK?v:0@4H,0*41
!AIVDM,1,1,,A,13Wks`hP1UQG>i@K:s?EngvRR8:?,0*6C
!AIVDM,1,1,,B,13WknV5P0o1G?E0K:rOAoOvf00Sn,0*25
!AIVDM,1,1,,A,33Wj8k1P001G?sBK:jA00?wR620,0*5E
!AIVDM,1,1,,A,13Wks`hP1KQG?LRK:nKUAgvRR620,0*1B
!AIVDM,1,1,,B,33WknV5P171G?1@K:u7cnOvh02pS,0*34
"

Itt sem látok beteg karaktert, amitől az include-nak be lkellene hasalnia.

Van:


Warning: include(/tmp/rtl_ais.temp): failed to open stream: No such file or directory in /dev/shm/asd-root/srv/http/domain1.com/nmea/ais.php on line 5

Warning: include(): Failed opening '/tmp/rtl_ais.temp' for inclusion (include_path='.:/usr/share/pear') in /dev/shm/asd-root/srv/http/domain1.com/nmea/ais.php on line 5

Nem, csak berantottak az oldal kodjat a /dev/shm ala, valoszinuleg bootkor szinkronol be. Nem latom be egyebkent, h ennek mi ertelme van azon felul, hogy ha valami csunya dolgot toltenenek fel az oldalnak, akkor azt egy reboot megoldja, de ez igy akar meg valid is lehet.
--
Blog | @hron84
Üzemeltető macik

(Debian-on) alapesetben, ha php_cli-ből hívod az include függvényt, akkor bárhonnan inklúdolhatsz, csak fájlrendszer jogosultságod legyen hozzá.

Ha a php-t az apache hívja/futtatja (mod_php), akkor rövid(relatív) fájlnévvel csak az include_path= mappából enged inklúdolni-olni, vagy az inklúdolásnál meg kell adni külön a teljes elérési utat a fájlnévre. (plusz olvasási joggal kell rendelkezzen a www-data, a fájlra), ellenkező esetben azt a hibaüzenetet adja vissza, hogy a fájl nem létezik.
(Plusz a fent említett /tmp korlátozás is él.)

Két, különálló php.ini van a php_cli-nek és a mod_php-nak, ahol ezek tetszés szerint változtathatók.

Az include nem erre való. Az hogy működött, nem jelenti azt, hogy jó a megoldás.

nézd meg, hogy az

echo file_get_contents('/tmp/file.log');

működik-e, és ha igen, akkor azt kell használni.

Segitek, a Debianon is httpd van, csak apache2 -re at van nevezve. Komolyan, ha ennyire nem ertesz hozza, akkor lepj ket lepest hatra a geptol, es add at a problemat olyannak, aki ert hozza, vagy vedd a faradsagot, es ne csak sikoltozz, hanem olvass utana a bajnak. Mert jelenleg nem _akarod_ megerteni a problemat, csak sikoltozol. Azzal nem megyunk elore.
--
Blog | @hron84
Üzemeltető macik

írd át require -re, illetve előtte legyen error_reporting(E_ALL); és ini_set('display_errors', 1);
Így talán kiírja a hibát is. Valszeg tleg permission para lesz.

Amúgy ilyet valóban nem csinálunk, ez kb egyenértékű azzal, hogy include($_GET['menu']);

Fogadd meg a többiek tanácsát és írd át file_get_contents -re, főleg ha nincs szükséged php fordításra az adott fájlon.

Eredetileg az volt a tervem, hogy a készülő kis eszközömre egy böngészővel is rá tudjak nézni. Lássam, futnak-e a processzek, növekszik-e a log file, amely a GPS-ról nyers NMEA mondatokat rögzít, valamint az AIS-ről vett adathalmazt miután egy php script visszafejtette, rögzítse a hajók adatait (flag, hívőjel, mmsi number)

Eddig 2 percenként egy bash script állította elő a html kimenetet, crontab se kellett hozzá, nem csináltam azt se neki. A BASH a teljes gyökérhez hozzáfér, így olvas a /tmp könyvtárból is, míg mondjuk egy apache nem. Ha mindent átírnék PHP-ba, akkor nem kellene 2 percenként lefutnia egy bonyolult scriptnek, hanem egy kliens böngészője indítaná csak a folyamatot, az is csak akkor, ha a júzer (én) értelmesnek találná ennek meglétét.

A php erőltetését azért láttam jónak, mert az egyetlen AIS-dekóder azzal működött eddig, ami független a chartplottertől.

Így, hogy csak szelektíve képes a PHP a /tmp/ könyvtárból fájlokat olvasni, nem bízhatom benne, nyilván a tudatlanságom az oka. Az erre fordított idő 6 nap volt, elképzelésem a dolgokról az, hogy ha egy hét alatt sem tudok valamit megoldani, marad az, ami bevált, akkor is, ha az a legszutykabb megoldás.
Ettől egyre idegesítőbb az egész, de sebaj.

Te, logikusan vegiggondolva, nem lehet, hogy az a baj, hogy amikor a PHP lefut, akkor konkretan nem letezik az a fajl a /tmp alatt?

Probalj mar meg egy olyat, hogy mielott beolvasod, megfuttatsz rajta egy file_exists-et. Ez sima PHP-s fuggveny, teljes mertekben fuggetlen a hasznalt disztrotol, magyarul Arch alatt is jot kell visszaadjon. A lenyeg az, hogy pontosan ugyanaz legyne a parametere, mint az include/require/file_get_contents hivasnak. Peldaul:



$file = "/tmp/rtl_ais.temp";

if(file_exists($file)) {
   echo file_get_contents($file);
} else {
   echo "Baj van babam, a {$file} nincs a helyen!\n";
}

--
Blog | @hron84
Üzemeltető macik

az a baj, hogy a file létezik. Nem úgy, hogy valamilyen folyamat folyamatosan írja és mindig ugyanaz a tartalma, hanem szervesen létezik. A BASH cat simán hozzáírja a tartalmat egy < pre > < /pre > tag közé, semmi bajom vele.

Eddig a php-re való átállást úgy kezdtem el, hogy exec();ekkel meghívtam a basht-majd azok kimenetét include-dal beolvastam, így hoztam létre a php-vel előállított, valósabb idejű dolgokat. Arra gondoltam, hogy az execeket és az inklúdokat folyamatosan kiváltanám rendes php-kóddal, de előbb persze menjen az, ami eddig is ment bash-ban.
Erre a /tmp/-ből van ami jó include-dal, van. ami nem. 8 megy, 2 file nem. Agyrém...
Így ment el a kedvem egy időre megint a php-től

Na, akkor már legalább az irány jó.
Egyel kevesebb php-hoz inkompetens ember fog php-be kontárkodni.
Ez jól is van így, sőtt külön elismerés a korlátaid felismeréséért!

Amit nem értek, hogy ha már a /tmp-be oda tudod generálni azt a nyüves fájlt, aminek a tartalma úgyis csak akkor változik meg, amikor a cronjobot azt újragenerálja.
Akkor miért nem egyből egy olyan helyre generálod a /tmp helyett, ami a docroot alatt van, neadjisten egy tök üres könyvtárban, pl /usr/local/share/bzsgen oda mondjuk x.txt néven!
És az apache konfigba meg teszel egy erre való utalást, hogy a /truváj az igazivól a /usr/local/share/bzsgen könyvtárból légyen kiszolgálódva?
Talán valami ilyesmi volt még apacson:
Alias /truváj /usr/local/share/bzsgen
<Directory /usr/local/share/bzsgen>
opciok, meg mindenfele directory konfig amik a konyvtarra kellenek
</Directory>

Szóval ha ott már amúgy sem kell parsolni, mi a péknek próbáltál ide még-1 bash-t, php-t, bármi exec/interpretálás/bármi layert rakni, ha az amúgy by design már tök fölösleges?

Ha meg szopatniakartadmagad^Wtanulni szerettél volna, akkor javaslom a fenti hsz-ek figyelembevételét, és vedd a fáradságot a php megismerésére, meg hogy mi az include() és a get_file_contents() közt a különbség.

Javaslom vedd épitő jelleggel a fenti kritikákat, egyszerűen fogtál egy kalapácsot, és hegeszteni akartál vele. Volt amikor össze is jött, de nem azért, mert az úgy jó. Most fentiekben kb. 10x le van irva az az egysoros megoldás, amire cserélned kéne a te megoldásod, vagy próbálhatsz a kalapácsba áramot vezetni, de nem lesz jó.

Ha a bash-szkripted jó, miért nem használod azt?
https://linuxconfig.org/simple-cgi-and-apache-examples-on-ubuntu-linux
Persze ne feledd, hogy ilyenkor nem root-ként fog futni a szkripted, tehát a jogosultságok legyenek rendben!
Meg persze a másik, hogy ekkor már nyilván nem kell a bash-nak végtelenített ciklusban, 2 perces sleep-ekkel futni, elegendő csak egyszer :)

Nem biztos, hogy minden kommenetet végigolvastam, így lehet, hogy már volt akár a kérdés, akár a válasz: meg tudod próbálni azt, hogy az include/readfile/file_get_contents előtt kilistázod az adott könyvtárat? (Mármint a PHP-ból...) Pl lehet, hogy chroot-ban vagy, és más az ottani /tmp...

Eredetileg a file, amit include-dal be akartam illeszteni a php scriptbe, szintén php script, egy string megadásával.

A PHP5 könyv szép piros, kb. 2 kg. Nehéz könyv. 329. oldalán ez van:
a) ,,megfelelő nyelvi konstrukció''
b) ,,az elemzés a beillesztés pontján php-üzemmódból html üzemmódba vált át, a csatolt állományban lévő programkódot szintén szabályszerű PHP-kódhatárolók közé köll fognunk ahhoz, hogy a fájlt futtatni lehessen a programban''

ezután kipróbáltam, hogy mi van akkor, ha az inklúdolni szánt kódban a
< ? p h p
és a
? >
közé zárom a marhaságomat.

Bejött, működik.

Csak tudod... vagy hat éve jelezzük neked többen is, hogy valahogyan nagyon kifacsarod az egész történetet, össze-vissza szétszórtan állsz neki (=gányolsz). Aztán csodálkozol, hogy nem mennek rendesen a dolgok. Ha meg erre felhívják a figyelmed, meg is sértődsz. Így nehéz.

Nem hiszem, hogy barkinek is az fajna, hogy hol talaltal megoldast. Sokkal inkabb a hozzaallasod.

Az olyan bejegyzeseket, amik azzal kezdodtek, hogy rossz uton jarsz, mert az altalad elgondolt megoldas nem arra valo, amit te szeretnel, es valoszinuleg ezert nem mukodik, azokat teljesen ignoraltad, hiaba javasoltak alternativ megoldast. Szerinted ez a megoldas magyarazza azt is, hogy miert nem mukodott a file_get_contents() illetve a readfile()? Vagy azokat ki sem probaltad? Vagy kiprobaltad, csak valaszra nem meltattad a segitseget nyujtani probalokat?
Egyaltalan miert kell az, hogy "a fájlt futtatni lehessen a programban"? Arrol volt szo, hogy egy log file tartalmat akarod latni.

Sic Transit Gloria Mundi

Ahogy ezt a témakört elnézem... Még nem is bzs a legnagyobb probléma. Ő egyszerűen csak buta, és még a saját korlátait sem hajlandó felismerni, beismerni és eszerint cselekedni.
A buta embernek ezt nem róhatod fel, ha egyszerűen nem tudja magáról, hogy az. "Jó az együgyűeknek, mert övék lészen a mennyeknek országa!"

A nagyobb probléma inkább az, hogy ahogy elnézem némelyik szálat itt a válaszok közt, a nyilvánvaló butaság ellenére még mindig van, aki annak a debugjában próbál segíteni, hogy a régebben működő include() miért nem műödik mostanra, és hogyan tegye ezt működővé.
A nyilvánvaló okot már ezügyben is láttuk, hogy az includepath egy picit racionalizálódott.
De számomra, amikor valaki ilyen megoldásban segít, az kb. azon tudósokkal egyenértékű emberiségellenes tett, mint akik az atombomba kifejlesztésében segítkeztek. (Most kifejezetten a tudós/fizikus emberekre gondolok, nem az egyszerű "mérnökökre", akik csak segédszámolásokat végeztek.)
Ti. így még bzs a maga egyszerű medvebocs fejével is találni fog itt pozitív feedback-et, a többi érv ami meg a nyilvánvaló hülyeségre hívná fel a figyelmét, simán kognitív disszonancia áldozata lesz.

Az a helyzet, hogy nem megoldást találtál, hanem tökéletesen elfedted azt a nagy baromságot, amit 6 nap alatt masszívan összeszenvedtél. Nem hallgatsz senkire, ha megoldást kínálnak leszarod és teljes mértékben ignorálod. Ha valaki rámutat arra hogy márpedig taknyolsz és gányolsz, akkor az dögöljön meg.

Annak a könyvnek, ami 2 kilogramm és a 329. oldalán megtaláltad hogy a taknyolásod mégis működjön valahogy, van még legalább 328 egyéb oldala ahol le van írva hogy hogyan is kellene ezt helyesen megoldani. De ha tényleg baszol arra hogy azt a 328 egyéb oldalt elolvasd, akkor ezen fórumbejegyzés alatt is találsz legalább 5 megoldási javaslatot.

De nem. Te nem hallgatsz senkire. Te meggányolod a gányolást. A végén pedig csodálkozol, hogy mindenki nettó idiótának néz.

Egyetlen egy dolgot magyarázz meg nekem legyél szíves, mi a bánatos f*sznak teszel fel kérdést egy fórumban, ha igazából leszarod a válaszokat?
De igazából nekem mindegy is, mindenki arra k*r el 6 napot az életéből (ahelyett hogy !2 perc! alatt megoldaná) amire akar. Ha neked ez jó, akkor legyen, de ne sértődj vérig ha hülyének néznek ha már az vagy.

// Happy debugging, suckers
#define true (rand() > 10)

Annyira igazad van... Ilyenkor igazából pedig csak saját magam rúgtam lábon amikor ezt írtam: "De igazából nekem mindegy is, mindenki arra k*r el 6 napot az életéből"
Igaz csak pár percet, de arra fordítottam hogy bzs-nek valamit átadjak miközben már leszűrhettem volna a tanulságot a korábbiak alapján (és még csak fel sem húztam volna magam:))

// Happy debugging, suckers
#define true (rand() > 10)

Szégyellem, hogy itt oldom meg a problémáimat.
Lassan áttérek más, kevésbé magyar fórumokra, mert ott legalább nem szívják a véremet.

Szégyellem, hogy tag vagyok itt.

Mindent megpróbáltam amit írtatok, és TI nem olvastátok végig a válaszaimat. Hol itt, hol ott láttam olyan sorokat, amelyek ezt igazolják.

Az, hogy végül ide írtam az én megoldásomat, végképp kiverte a biztosítékot nálatok, így egy időre elegem lett ebből. Itt.

Az olyan válaszokról, melyeket emelt szinten, néhány létrafokkal a kérdező feje fölött válaszolnak meg tudván, hogy az illető alapfokon sem érti a dolgokat --- erről nincs véleményem.

Lófaszt, már megbocsájts.
Itt az ékes példája, hogy egy konkrét javaslatra igazából nem reagáltál, szerintem ki se próbáltad, hanem próbáltad bizonygatni hogy a tákold szarod miért jó és hogy annak helyére végül épp és értelmes kód kerül.
Ott az értelmes kód, nem kell tovább gányolni! Próbáld ki! Ha még se megy, reagálj rá!

"Az olyan válaszokról, melyeket emelt szinten, néhány létrafokkal a kérdező feje fölött válaszolnak meg tudván, hogy az illető alapfokon sem érti a dolgokat --- erről nincs véleményem."
Ez nem a kezdőpont, idáig eljutottunk, a fentiek okán a te hatalmas segítségeddel. Most is write-only vagy, semmire nem reagálsz csak a saját hülyeségedet szajkózod

// Happy debugging, suckers
#define true (rand() > 10)

Amit 5 nappal a kapott megoldás után találtál meg? Gratulálok hozzá, a szarod továbbra is szar, csak ragasztottál rá egy matricát, másokat meg telibe köptél.
Nem is ragozom tovább, mert nem vagy képes felfogni a dolgokat magad körül

// Happy debugging, suckers
#define true (rand() > 10)

A megoldásod lehet, hogy működik, de nem jó, és addigra mire ezt megirtad, addigra sokan komplett kódot irtak neked be, ami technikailag is jobb. Emiatt lenne érdemes kipróbálnod azokat a kódokat, mert tényleg nem láttam olyan kommentet, ahol leirtad, hogy kipróbáltad amit irtak mások. Ettől lettek sokan dühösek, hogy ha nem fogadod meg amit mondanak, akkor nem is beszélgetés ez itt.

"Szégyellem, hogy itt oldom meg a problémáimat."
Ahogy korábban többen is jeleztük, Nem oldottad meg a problémát

"Szégyellem, hogy tag vagyok itt."
Ne azt szégyelld, hogy itt vagy, hanem azt hogy egy olyan fórumon ahol nálad profibb emberek vannak, azok konkrét javaslatait szarod telibe, esetleg megsértődsz rajtuk.

"Lassan áttérek más, kevésbé magyar fórumokra, mert ott legalább nem szívják a véremet."
Hogy őszinte legyek, egy marha nagy szívességet tennél vele, de megjegyzem számodra: ezzel a mentalitással sehol nem lesznek kibékülve.

// Happy debugging, suckers
#define true (rand() > 10)