Hirdetés

2024. május 21., kedd

Gyorskeresés

Útvonal

Fórumok  »  Szoftverfejlesztés  »  PHP programozás (kiemelt téma)

Hozzászólások

(#20001) pelyib válasza btz (#19997) üzenetére


pelyib
tag

Gratula az elert eredmenyhez.
Miben mas a te alkalmazasod mint egy szimpla gallery app? pl: https://piwigo.org/

Par eszrevetel:
- mysqli helyett PDO
- egy framework, vagy legalabb egy router lib hogy egy belepesi pontja legyen az alkalmazasnak => nem kell minden fajlban duplikalni a kodot ellenorizni a sessiont => csak egy folder legyen elerheto a webservernek (tipikusan web vagy public neven)
- template engine hasznalata, vagy legalabbis view kiszervezese
- PSR hasznalata => tobbi PHP fejlesztonek konnyebb lesz olvasnia a kodot
- hasznalj 1 fajta karaktert behuzasra space VS tab (PSR a space-t ajanlja)
- injectalj, e helyett

function __construct()
{
require_once "DataSource.php";
$this->ds = new DataSource();
}

ezt

public function __construct(DataSource $source)
{
$this->ds = $source;
}

- injectalas igaz a DB connection configra is
- PHP verzio nincs megemlitve,jobban mondva semmilyen requirements nincs megemlitve, 7.2 legyen legalabb, MySQL ?, egyeb?
- ezt meg lehetne forditani:

if(!empty($_SESSION["userId"])) {
// amit ved
}
} else {
require_once './view/login-form.php';
}

erre:

if(true === empty($_SESSION["userId"]))
{
require_once './view/login-form.php';
exit;
}

//amit ved

- "class" folder atneveznem "src"-re

(#20002) disy68 válasza jattila48 (#20000) üzenetére


disy68
aktív tag

Ha a program visszatérési értéke az exit code-ot jelenti, akkor érthető, mert az exit code-ok csak 255-ig értelmezettek linux rendszereknél míg windows-on 499-ig. Ha valóban erről van szó, akkor ezt ne így használd semmiképp sem.

“Yeah, well, you know, that’s just, like, your opinion, man.” — The Dude

(#20003) jattila48 válasza disy68 (#20002) üzenetére


jattila48
aktív tag

Hogy mit jelent a program visszatérési értéke, az azon múlik, hogy az őt meghívó PHP szkript hogy értelmezi ezt az értéket. A lényeg az, hogy a program 4 byte-os intet ad vissza, amit a php feltehetőleg már csak 1 karakterként lát. A kérdés az, hogy ez miért van így. Ha az exec a bash közbeiktatásával hívja a programot, akkor megvan a magyarázat, mert a bash csak karakternyi egész értéket ad vissza. Csakhogy a dokumentáció nem ezt állítja. A shell_exec PHP fv. az, amely a shell segítségével hívja az adott programot. A Windows cmd-ben tudtommal nincs ilyen korlátozás, hogy maximum 499-et adhat vissza egy batch program. Nem tudom, erre gondoltál-e.

[ Szerkesztve ]

„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár

(#20004) jattila48 válasza jattila48 (#20003) üzenetére


jattila48
aktív tag

Közben a C exit fv.-től olvasom, hogy az argumentumaként megadott egész érték alsó 8 byte-ja lesz a hívónak visszaadott statusz kód. A programom viszont egyszerűen return-nel adja vissza az értéket, nem hív exit-et.

„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár

(#20005) jattila48 válasza jattila48 (#20004) üzenetére


jattila48
aktív tag

Lehet, hogy a Linux-on az int main(int,char **) fv. return-nel is csak az alsó 8 bitet adja vissza? Windowsban nem így van. Ritkán programozok Linux-ban, ez még fel sem tűnt.

„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár

(#20006) btz válasza pelyib (#20001) üzenetére


btz
addikt

Üdv!

Először is köszönöm, ezbben leledzik minden PHP tudásom, amit össze tudtam szedni a cél érdekében. (Nem foglalkozom napi szinten programozással)

Nem ismerem az általad ajánlott PHP galleryt-t de így első ránézésre azt mondom, hogy az enyém jóval egyszerűbb céleszköz kamerakép nézegetésre, mindazonáltal jobban szemügyre veszem majd az általad ajánlott Piwigo scriptet is.

PDO-t már nézegettem, ha jól tudom az előnye abban rejlik, hogy könnyedén lehet változtatni az SQL típusokat és teljesen objektumorientált, de jelenleg a PHP tudásom nincs azon a szinten, hogy egy könnyű félórás szabadidőben csak úgy lecseréljem. Szívesen veszek minden forkot, ami a PDO-ra építkezik adatbázis tekintetében, ebből én is építkezni tudnék PHP ügyileg :)

Az aktruális scripten való bejelentkezési pontot már én fabrikáltam rá. Igen, sajnos ezzel kódismétlés van. Erre is szívesen várnék egy változatot, ami egy ponton beléptet és vissza tud dobni a refer oldalra.

"csak egy folder legyen elerheto a webservernek (tipikusan web vagy public neven)"
Ezt nem értem pontosan, de jelenleg is így van. Egy mappában van a dashboard és a képek mappa is ami htaccessel le van védve, így csak az viewer applikációban nézhetők a képek.

Probálom minél jobban szétválasztani a vieweket a PHP változóktól és minden egyébtől.

Amint lesz időm rendezem a kód sorait olvashatóság szempontjából. :)

public function __construct(DataSource $source)
{
$this->ds = $source;
}

Ez az injektálási eljárás pontosan mitől is jobb? Illetve nem nagyon értem, hogy a require_once nélkül akkor hogy is érem el vele a DataSource.php fájlt?

A readme fájlban meg fogom említeni, hogy milyen PHP verziókon fut, csak előtte le kéne magamnak is tesztelni, eddig az egész 7.4-en ment , nem néztem meg, hogy mondjuk 5.6-on van e nyűgje :D

if(true === empty($_SESSION["userId"]))
{
require_once './view/login-form.php';
exit;
}

//amit ved

Ez jó ötlet, azthiszem ez lesz az első a listán amit majd cserélek. Ennél legalább dereng is, hogy miért jobb ha így csinálom :)

A Class folder a PHPPOT cucca volt eredetileg, de persze bele nyúltam mivel kellett néhány módosítás itt ott.

Köszi a hasznos tippeket, ahogy haladok a PHP-vel való ismerkedésben próbálom behúzni a kódba a hasznos módosításokat. :R

ⓑⓣⓩ

(#20007) mobal válasza btz (#20006) üzenetére


mobal
MODERÁTOR

if(true === empty($_SESSION["userId"]))

Ez így felesleges. Az if egy true-t vagy false-t vár alapból. Elég az

if (empty($_SESSION['userId']))

[ Szerkesztve ]

"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."

(#20008) btz válasza mobal (#20007) üzenetére


btz
addikt

pelyib tanácsolta ezt, de amúgy a minél rövidebb kód annál jobb elvet szoktam követni.

Ennek megfelelően így alakítottam át a kódot az index.php esetén és így a camlist.php esetén.

[ Szerkesztve ]

ⓑⓣⓩ

(#20009) disy68 válasza jattila48 (#20003) üzenetére


disy68
aktív tag

Az exit code és fogalma az nem értelmezés kérdése. Linux alatt az exit code 0-255 között míg Windows alatt 0-499 között értelmezett (foglalt és szabad exit kódok).
Általában a programok a standard out/standard error csatornákat fogják írni, ez lesz a kimenete a programnak, a tényleges adat (persze lehet ezen kívül ezer meg egy módon kimenetet generálni, pl. fájlba írni, de ez most nem érdekes).
"A programom viszont egyszerűen return-nel adja vissza az értéket, nem hív exit-et."

A main-ből hívott return az kvázi az exit-nek fog megfelelni. A main-ből nem térünk vissza return-nel, hanem a standard out-ra kiírjuk az adatot, amivel csinálhat a hívó, amit szeretne. Ez okozza nálad is a problémát. Írd ki a program végén az eredményt és azt használd php-ből.

“Yeah, well, you know, that’s just, like, your opinion, man.” — The Dude

(#20010) mobal válasza btz (#20008) üzenetére


mobal
MODERÁTOR

Szerintem teljesen felesleges leelenőrizni, hogy a gyári empty függvény visszaztérési értéke értékre és típusra is megegyezik. Ha az empty hibásan működik ott komoly gond van! :)

"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."

(#20011) jattila48 válasza disy68 (#20009) üzenetére


jattila48
aktív tag

Akkor nem vagyok tisztában az exit kód fogalmával, de most sem lett világosabb. Végülis pontosan mi akkor az exit kód? Windows-ban biztos, hogy vissza lehet adni return-nel a main fv.-ből 499-nél nagyobb értéket is, ilyet már csináltam (pl. CreateProcess => WaitForSingleObject => GetExitCodeProcess ). Az lehet, hogy az exit fv. lecsonkolja az int értéket, de windowsban miért 499-ig, miért nem 255-ig ? A main fv. visszatérési értéke miért int (Linuxban is), ha nem tud 4 byte-os egész értéket visszaadni?
Egyáltalán nem biztos, hogy a main fv.-ből bármit is ki akarok írni az stdout-ra, viszont szeretném pl. batch-ből meghívni, és a visszatérési értékével kezdeni valamit. Ez sokkal egyszerűbb, mint stdout-ra írni, aztán valahogy ezt visszaolvasni. Egyébként ezt a konkrét problémát megoldottam másképp (nem adok vissza 256-ot).

[ Szerkesztve ]

„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár

(#20012) sztanozs válasza jattila48 (#20011) üzenetére


sztanozs
veterán

POSIX rendszerekben a visszatérési érték 0-255 között lehet (vélelmezhetően 8-bites rendszerekhet való kompatibilitási okok miatt).
Az int mérete rendszerenként más és más, általában a rendszer natív kódszélességét jelenti (x86 rendszereken 32 bit, 64 bites rendszereken lehet 64 bit, de pl 8 bites rendszereken csak 8 bit). A word (modern rendszerekben long) dupla int hosszú.

256-ból úgy lesz 0, hogy a 256-tal (8bit) való maradékos osztás eredményét adja vissza a rendszer - illetve a visszatérési érték RETVAL & 0xff

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#20013) pelyib válasza btz (#20006) üzenetére


pelyib
tag

Piwig csak egy példa, biztos vagyok benne, hogy tele a net self hosted gallery app-l ami tud jogosultságot kezelni.

"csak egy folder legyen elerheto a webservernek (tipikusan web vagy public neven)"
Ezt nem értem pontosan, de jelenleg is így van. Egy mappában van a dashboard és a képek mappa is ami htaccessel le van védve, így csak az viewer applikációban nézhetők a képek.
Lehet én nézek be valamit, de jelenleg ./ a docroot a webszervernek, ami azt jelenti, h pl az SQL installer fájl is pulikusan elérhető (beirom a böngészőbe és meg tudom nyitni), illetve a class folder is elérhető. Csak az legyen elérhető a webszerveren keresztül aminek kell. Pl rossz esteben ki lehet szedni a DB credential-t.

Ez az injektálási eljárás pontosan mitől is jobb? Illetve nem nagyon értem, hogy a require_once nélkül akkor hogy is érem el vele a DataSource.php fájlt?
Egyrészt láthatóak lesznek az osztályod függőségei, hisz ott van az interface-n (public function __construct(DataSource $source)) illetve megadja a lehetőséget, hogy szabadon kicseréld annélkül hogy ott változtatni kelljen ahol használod.
Példa

A readme fájlban meg fogom említeni, hogy milyen PHP verziókon fut
Bár az is több mint a semmi, de a Composer vagy Docker jobban segíthet annak aki maga is akarja használni.

Composer használata megoldja a require_once kérdését is (autoloader). Ez így lehet nem sokat segít de tele a net leírással hogy miként kell beállítani és használni.

[Ez] így biztos jó?

[ Szerkesztve ]

(#20014) jattila48 válasza sztanozs (#20012) üzenetére


jattila48
aktív tag

Azt tudom, hogy az int mérete általában rendszerfüggő. Engem most csak az intel x86 és x64 rendszerek érdekelnek, ezeken az int 4 byte hosszú. Nem hiszem, hogy egy int f() -ként definiált fv. csak úgy lecsonkolná a visszatérési értékét 8 bitre. Márpedig az int main(int, char **) fv. éppen olyan közönséges fv., mint bármelyik, nem lehet olyan speciális tulajdonsága, hogy a return-nel visszaadott int értéket 8 bitre csonkolja. Szerintem a kutya máshol van elásva. Az OK, hogy az exit lecsonkolja az argumentumaként kapott int-et 8 bitre (legalábbis Linuxon), de a return biztos, hogy nem. Windows-ban biztos, hogy nincs is így, mert ahogy említettem, a CreateProcess => WaitForSingleObject => GetExitCodeProcess API hívás sorozattal a végén megkapom mind a 4 byte-ot. Linux-on vagy az exit lehet a "bűnös", de mivel ezt nem használom, akkor a parent process által hívott valamelyik wait* fv., vagy a PHP valóban bash-on keresztül hívja a programot, és akkor a bash lesz a hunyó. De nagyon valószínű, hogy ez nem a main fv. lényegi viselkedése.

Azt, hogy "POSIX rendszerekben a visszatérési érték 0-255 között lehet" hogy érted? Minek a visszatérési érétékét mondod? A main fv.-ét? Nem hinném, hogy a POSIX ilyet állítana (legalábbis igen csodálkoznék rajta).

Amit Windows-ról írtatok, hogy a maximális exit kód 499, ilyenről még nem hallottam, pedig igen régóta programozok Windowst. Nem lehet, hogy ez valami hiba család maximális értéke, amit pl. a GetLastError ad vissza (a GetLastError ennél egyébként nagyobb értékekekt is vissza szokott adni).

[ Szerkesztve ]

„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár

(#20015) jattila48 válasza jattila48 (#20014) üzenetére


jattila48
aktív tag

Közben beledebuggoltam a programba (Windows alatt, Linux-on még nem), és a rendszer (Windows RTL, Linuxon libc) a main meghívása után valóban meghívja az exit fv.-t, aminek a main-ből return-nel visszaadott értéket adja át. Az exit ezt az értéket lehet, hogy Linux-on 8 bitre csonkolja, Windows-on nem. Vagyis szerintem itt lesz a kutya elásva, az exit-nél. Akkor is meg lesz hívva (a libc által), ha a main-ből return-nel térek vissza. Minden esetre az továbbra is igaz, hogy ez nem a main fv. specialitása. A válaszokat köszönöm, probléma felderítve. Most már legalább ezt is tudom. Igaz rá ment egy napom, hogy kiderítsem, linuxon miért nem működött a PHP szkriptem.
A Windows max. 499-es visszatérési értéke mellékszál, de azért még érdekel. Ha tudtok róla bővebbet, kérlek ne tartsátok magatokban.

[ Szerkesztve ]

„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár

(#20016) disy68 válasza jattila48 (#20014) üzenetére


disy68
aktív tag

Exit code avagy exit status

"Márpedig az int main(int, char **) fv. éppen olyan közönséges fv., mint bármelyik"
Ez nem igaz, a main függvény végén lesz egy system exit call, vagy a return által visszaadott értékkel vagy default 0, amennyiben nem volt explicit exit hívás vagy bármi egyéb runtime error.

A fentiek alapján látszik, hogy az exit code az nem adat átadásra szolgál, hanem a process befejézés állapotának a közlésére. Processek közötti kommunikáció vagy adatcsere az nem ilyen egyszerű. Erről itt találsz egy összefoglalót. A táblázatban az anonymous pipe, amit én is írtam a standard out, ami a te esetedben a bevált és használt megoldás. Bármi más az vagy lassabb lesz (pl. file-ok) vagy sokkal komplexebb (pl. socket vagy message queue-k). Persze ragaszkodhatsz az exit code megerőszakolásához is, ez a te dolgod.

A standard out-ra kerülő adat a visszatérési érték a php shell_exec és exec függvényénél is (a megkötések benne vannak a dokumentációban).

A windows vonatkozást én néztem be, sorry, figyelmetlenül olvastam a dokumentációt.

“Yeah, well, you know, that’s just, like, your opinion, man.” — The Dude

(#20017) venic


venic
kezdő

Sziasztok!
Irtam egy kisebb programot, ami a felhasználó által beirt adatok alapján kiszámol valamit.
A beirt adatok adatbázisba kerülnek, majd onnan történik a számolás.
Eddig működne is, csak most azon gondolkozom, ha véletlen feltenném internetre, akkor valószinű gond lenne, ha egyszerre 2 felhasználó is lenne, mert összeakadnának a beirt adatok, szóval valahogy szét szeretném szeparálni, hogy 1 felhasználó által beirt adatok csak hozzá tartozzanak és ne keveredjenek a beirt adatok.
Gondolom lehetne regisztrációval megoldani, de egyelőre anélkül szeretném.
Szerintetek ezt hogy lenne érdemes megoldani?
Köszi előre is.

(#20018) bandi0000 válasza venic (#20017) üzenetére


bandi0000
nagyúr

Csak egy kérdés, miért szükséges eltárolni az adatokat?

Max ha nem akarsz regisztrációval foglalkozni, minden adatcsomaghoz generálsz egy egyedi id-t és úgy mented el

Xbox One: bandymnc

(#20019) bhonti válasza venic (#20017) üzenetére


bhonti
tag

Sütivel tudnád azonosítani az illető gépet.

http://1kis.info.hu - Informatikus mindenkinek... 501065096 balazs@honti.tech

(#20020) venic válasza bandi0000 (#20018) üzenetére


venic
kezdő

Mutatok egy példát, ehhez hasonlót szeretnék, talán igy jobban érthető lesz.
Ezen az oldalon is lehet regisztráció nélkül is beirni, hogy miket ettél egy nap.
És ha beirod az ételeket, utána kijön egy táblázat, ahol összegzi.
Csak ugye ez a gondom, hogy mig beir a felhasználó 2 adatot, közben beirhat egy másik felhasználó egy másikat.
Nekem is ilyesmi, hogy több adatot lehetne beirni és később ezekből számol, ahogy itt is végülis.
https://kaloriabazis.hu/

(#20021) bhonti válasza venic (#20020) üzenetére


bhonti
tag

Vagy kliensoldalon összegyűjtöd (js) amiket fel akar vinni, aztán a végén, 1 menetben beküldi.

http://1kis.info.hu - Informatikus mindenkinek... 501065096 balazs@honti.tech

(#20022) venic válasza bhonti (#20021) üzenetére


venic
kezdő

Köszi szépen, megpróbálom...

(#20023) bandi0000 válasza venic (#20020) üzenetére


bandi0000
nagyúr

Nem tudom hogy építetted fel a backendet, de amit bhonti kolléga mond, kb úgy kellene csinálni, mintha/ vagy ha van egy REST API-d, akkor frontenden beírogatja amit akar a felhasználó, és elküldi a szervernek, az kiszámolja és visszaküldi az eredményt, és így nem fog ütközni semmit

Xbox One: bandymnc

(#20024) venic válasza bandi0000 (#20023) üzenetére


venic
kezdő

Úgy szeretném, hogy beir valamit a felhasználó és akkor már ezzel is történik számolás, majd ha megint hozzáir valamit, akkor módosul a számolás... szóval közben is van számolás, minden egyes adat beirás után, nemcsak a végén.
Szóval most úgy van felépitve, hogy beirsz valamit, akkor az adat megy az adatbázisba, majd a szükséges adatokból számol. Ha újra beirsz valamit, akkor az megint megy az adatbázisba, de számolásnál már a korábbi és a mostani beirt adatot is figyelembe véve történik a számolás.

(#20025) bhonti válasza venic (#20024) üzenetére


bhonti
tag

Teljesen jó lenne úgy is, ha mindig hozzáírnád a felhasználó/gép/böngésző azonosítóját is.

http://1kis.info.hu - Informatikus mindenkinek... 501065096 balazs@honti.tech

(#20026) venic válasza bhonti (#20025) üzenetére


venic
kezdő

Köszi szépen :)
Nekem is valami hasonló motoszkált a fejemben, csak nem tudtam ez mennyire jó ötlet, vagy van-e valami jobb megoldás. Köszi a megerősítést , hogy akkor nem annyira rossz irány :)

(#20027) bandi0000 válasza venic (#20024) üzenetére


bandi0000
nagyúr

Én mêg mindig nem értem ezt az eltàrolást, hacsak nem valami marha bonyolult sok időt igénybe vevő szàmolást csinálsz

Gondolj egy online szàmológépre, ahol összeadsz 2 szàmot és az "=" gombra kattintva elküldi az adatokat a szervernek, aki visszaadja az eredményt, ettől független frontenden megtarthatod a 2 szàmot amihez hozzàír megint egyet, megint a gombra kattintva adja az eredményt

Persze ettől független csinálhatod azt amit javasoltak feljebb, de az olyan megkerülő megoldàs

Xbox One: bandymnc

(#20028) venic válasza bandi0000 (#20027) üzenetére


venic
kezdő

Nem biztos, hogy választ tudok adni a kérdésedre :)
De mondjuk nem a beirt adatokból számolok, hanem a beirt info alapján még az adatbázisban vannak az adatok, ahonnan veszem a számokat amivel számolok.
Amit belinkeltem oldalt (kaloriabazis.hu), ha azt vesszük példának, akkor pl beirod hogy almát ettél, és akkor az adatbázisban meg kell nézni, annak mennyi a szénhidrát fehérje stb tartalma és akkor azzal kell számolni.
Illetve egy étel adatfelvételekor 3, tehát 1 küldés során 3 érték megy az adatbázisba, nemcsak 1.
Persze létrehozhatnék változókat a beirt adatoknak (vagy nem tudom, hogy gondolod), csak jelenleg nekem az most bonyolultabbnak tűnik.

(#20029) jattila48 válasza disy68 (#20016) üzenetére


jattila48
aktív tag

Továbbra is fenntartom, hogy a main fv. semmiben sem speciális, nem hívja meg (legalábbis magától) az exit-et, és nem csonkolja az int visszatérési értékét. Egyébként a linkereknek megadhatod, hogy mi legyen a belépési pont, a main csupán a default. Ahogy az előző hozzászólásomban írtam, az exit végülis valóban meg lesz hívva, de nem a main, hanem a main fv.-t hívó entitás (RTL, libc,...) fogja azt meghívni. Leegyszerűsítve nagyjából így:
exit(main(...));
Amikor a rendszer egy processzt kerál (pl. a shell), akkor CreateProcess rendszerhívással hozza létre (Windowsban) az exe fájlból. Először az exe-hez linkelt Startup (RTL, libc) fv. indul el, amely különböző inicializálások után meghívja a main fv.-t, majd annak visszatérési értékével (ha a main nem hívott explicite exit-et), az exit rendszerhívást. A processz indító entitás, pedig WaitForSingleObject-tel várakozik a processz befejeződésére, ami az exit végrehajtásával következik be. Az exit által kreált exit kódot a GetExitCodeProcess hívásával szerzi meg. Windows-ban semmi különös nem történik, visszakapom a 4 bájtos visszatérő értéket. Linux-on azonban, vagy az exit, vagy a wait* fv. (valószínűleg az utóbbi) 8 bitre csonkolja azt. Hogy ez a viselkedés POSIX szabvány-e vagy nem, azt nem tudom (újabban valószínűleg nem az), de mindenesetre semmiképpen nem a main fv. specialitása.
Az IPC módokat ismerem (kb. 30 éve programozok), szerintem az most itt nem releváns.
"A standard out-ra kerülő adat a visszatérési érték a php shell_exec és exec függvényénél is "
Ez szerintem nem így van, az exec visszatérési értéke (exec 3. argumentuma) a hívott exe program visszatérési értéke (amit végül is az exit->wait* állít elő), az stdout-ra írt értékeket pedig az exec 2. argumentumában kapom vissza tömbben.

[ Szerkesztve ]

„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár

(#20030) jattila48 válasza jattila48 (#20029) üzenetére


jattila48
aktív tag

A PHP exec visszatérési értékén a 3. argumentumát értem. A PHP értelemben vett visszatérési értéke az stdout-ra írt utolsó sor (ami egyébként a 2. argumentum utolsó eleme is lesz) sztringként. A 3. argumentumban kapom vissza az exe program visszatérési értékét, ezért értem azt az "igazi" visszatérési értéknek. Bocs, ha esetleg zavarosan fogalmaztam.

„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár

(#20031) jattila48 válasza jattila48 (#20030) üzenetére


jattila48
aktív tag

Közben éppen az általad linkelt Wikipédia cikkben megtaláltam, hogy a waitid -del visszakaphatod mind a 4 byte-ot. Tehát valóban a többi wait* fv. az, amelyik lecsonkolja az exit kódot. Így méginkább igaz, hogy a main fv.-nek semmi köze a csonkoláshoz, ez nem az ő speciális viselkedése.

„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár

(#20032) supercow


supercow
őstag

Sziasztok veteránok,
Egy új Laravel munkát kezdek, azoktól kérnék ötletet akik hasonlóan felépített rendszeren dolgoztak már.
A végső cél a rendszerben CAD és PDF fájlok generálása egy gyártási rendszernek / gépsornak. A PDF a megrendelések melléklete, rajta a méretekkel, amolyan műszaki rajz szinten "preview". A CAD dxf és/vagy CNC kimenet megy a gyártósornak.
Példának legyenek KRESZ táblák. Amikor egy új táblát készít a user, elsőre ki kell választania milyen táblát csinál mondjuk útjelző tábla az autópálya szélén, melyik szabvány szerint (pl magyar, német, kínai, esetleg 2018-as Rev2 olasz KRESZ stb) ezután kiválasztja a tábla méretét, szöveget, rögzítési pontokat stb.
A választható tábla alapméretek, szöveg betűtípusa, a betűk mérete, betűk közötti távolság, háttérszín, tábla minimális és maximális mérete, betűk széltől mért min. távolsága stb stb mind a szabványban van és néha összefüggnek (pl 400mm-es táblán 254mm betűvel kell), ezek a "build szabályok" amiket be kell tartani hogy jó bemenetet kapjon a CNC gép, ami majd kivágja a táblát alamíniumból vagy a fényvisszaverő fóliából.
A kérdésem az, hogy hogyan szerveznétek a kódot hogy ezeket a szabályokat rugalmasan lehessen definiálni, illetve későbbiekben minimális munkával új szabályokat vagy teljesen új szabványt lehessen hozzáadni.

In nomine Pasta, et Fusilli, et Spaghetti Sancti. Ramen.

(#20033) mobal válasza supercow (#20032) üzenetére


mobal
MODERÁTOR

Építs belőle egy "fát (nem tudom ez a jó szó erre)". Vedd a "fő" tulajdonságokat és kezd hozzá szűrni a többit. Én valahogy így állnék hozzá.

Ezt ha papíron leírod akkor szerintem látni fogod a megoldást.

"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."

(#20034) Ispy


Ispy
veterán

Sziasztok!

Elakadtam...hátha van valakinek valami jó ötlete.

PHP-ból hívok meg sqlsrv-vel egy tárolt eljárást, ami összekészít egy json-t és azt visszaadja. De a visszakapott adat 2033 hosszú blokkokra szétszedve jön (11db), amit az istenért nem tudok utána php-ban összerakni, hogy abból valid json text legyen, próbáltam már loopot, implode-ot, akkor sem add vissza semmit a json_decode. Szóval ott vannak az adatok egy arrayben, vagy meg van egy stringben, csak nem jól összefűzve.

"Debugging is like being the detective in a crime movie where you're also the murderer."

(#20035) mobal válasza Ispy (#20034) üzenetére


mobal
MODERÁTOR

Adatbázis nem arra való, hogy jsont generálj. Szerintem a koncepció nem jó... nyilván ez nem lesz megoldás. Miért kell szétdarabolni? Vagy 11 külön hívás?

"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."

(#20036) nevemfel válasza Ispy (#20034) üzenetére


nevemfel
senior tag

A json_decode nagyon nem szereti, ha nem UTF-8-ban kapja az adatot. Régebben jellemzően ez volt az oka annak, hogy üres adattal tért vissza.

Forget your troubles, c'mon get happy

(#20037) Ispy válasza mobal (#20035) üzenetére


Ispy
veterán

Hát pedig az ms sqlnek complett kódjai vannak, hogy jsont készíts vagy kiolvass, ez a része kész is van. Csak amikor a fetch array-el visszakapom az adatot (ami itt tk. egy string), akkor ezt a stringet 11 részben kapom meg, ha array, ha meg string, akkor olyan, mintha sortörésekkel lenne összerakva a 11 rész. Tehát ebben a formában már nem json. Ha kimásolom egy text editorba, kézzel megszüntettem a töréseket, akkor kész a json.

"Debugging is like being the detective in a crime movie where you're also the murderer."

(#20038) Ispy válasza nevemfel (#20036) üzenetére


Ispy
veterán

Nem üres, csak darabokban jön vissza.

"Debugging is like being the detective in a crime movie where you're also the murderer."

(#20039) Ispy válasza Ispy (#20038) üzenetére


Ispy
veterán

Egész pontosan 2033 karakterenként kapott vissza egy string blockot.

[kép]

[ Szerkesztve ]

"Debugging is like being the detective in a crime movie where you're also the murderer."

(#20040) mobal válasza Ispy (#20037) üzenetére


mobal
MODERÁTOR

Az oké, de akkor sem biztos, hogy jó ötlet. Egyszer kell csak cserélni adatábzist, máris problémát fogo okozni.

"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."

(#20041) Ispy válasza Ispy (#20039) üzenetére


Ispy
veterán

Közben gugli kisegített, szóval az sql driver szedi szét az outputot [link] , php oldalon így lehet összerakni megint:

while (sqlsrv_fetch($stmt)) {
    $data .= sqlsrv_get_field($stmt, 0, SQLSRV_PHPTYPE_STRING('UTF-8'));
}

[ Szerkesztve ]

"Debugging is like being the detective in a crime movie where you're also the murderer."

(#20042) Ispy válasza mobal (#20040) üzenetére


Ispy
veterán

De ez az adatbázis nem lesz cserélve, pont ez a lényege, hogy az üzleti logika ott van tárolva, ezért akarom ott összerakni az outputot, nem pedig a php apiban, aminek kb. annyi a dolga, hogy a kérést elküldje a db-nek és visszaadja a db válaszát. Nem szeretném egyessével összeszedegetni az adatokat php-ban és ott összerakni a json (6 különböző táblából jönnek adatok, amik különböző relációkban vannak egymással).

[ Szerkesztve ]

"Debugging is like being the detective in a crime movie where you're also the murderer."

(#20043) Ispy válasza Ispy (#20041) üzenetére


Ispy
veterán

nem, mégsem jó....

"Debugging is like being the detective in a crime movie where you're also the murderer."

(#20044) mobal válasza Ispy (#20042) üzenetére


mobal
MODERÁTOR

Igen. Tudom, hogy ott az üzleti logika és ennek a jólétét kérdőjelezem meg. Láttam már sok olyat... :)

"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."

(#20045) Ispy válasza mobal (#20044) üzenetére


Ispy
veterán

Kifejtenéd? Nem értem pontosan mi ezzel a gond.

"Debugging is like being the detective in a crime movie where you're also the murderer."

(#20046) mobal válasza Ispy (#20045) üzenetére


mobal
MODERÁTOR

Nem oda való. Fentebb leírtam, ha adatbázist kell cserélni akkor problémás, attól függetlenül, hogy a Te esetedben nem lesz. Meg elég problémás mindenre új tárolt eljárást kreálni.

"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."

(#20047) Ispy válasza mobal (#20046) üzenetére


Ispy
veterán

Minden eljárás saját verzióval rendelkezik, 1001, 1002 stb., az api csak ezekhez az eljárásokhoz fog hozzáférni, ha az adatbázis oldalon bármi változik, akkor csak csinálni kell egy 1003-as verziót, ami visszaadja a szükséges adatokat. Így simán lehet, hogy az android app az 1001-es kódot használja, a .net-es alkalmazás meg már az 1003-as kódot, mert ott valami frissítés lett csinálva már, de az androidban még nem lett beépítve a módosítás. A tárolt eljárásban meg tk. bármit lehet szimulálni, ha kell.

Btw. inkább megírok 1000 tárolt eljárást, mint 1000 php kódot, de persze kinek mi.

"Debugging is like being the detective in a crime movie where you're also the murderer."

(#20048) mobal válasza Ispy (#20047) üzenetére


mobal
MODERÁTOR

És a nagy részét duplikálod. De úgy csinálod ahogy akarod, én csak megosztottam a tapasztalatom. :)

Kis méretben működhet jól. Olvansivaló: [link]

"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."

(#20049) Ispy válasza mobal (#20048) üzenetére


Ispy
veterán

Akkor jó, kis méretben lesz, ha esetleg majd több száz fős céggé növi ki magát a dolog, akkor majd...meglátjuk, látom azért a vélemények erősen megoszlanak.

"Debugging is like being the detective in a crime movie where you're also the murderer."

(#20050) Ispy


Ispy
veterán

Közben megoldottam a rejtélyt, megy rendben a dolog, csak a postmanban nem váltottam nézetett, ezért nem a raw adatokat teszteltem, hanem a pretty-t, mybad, lehet nem kéne hétvégén dolgoznom. :B

"Debugging is like being the detective in a crime movie where you're also the murderer."

Útvonal

Fórumok  »  Szoftverfejlesztés  »  PHP programozás (kiemelt téma)
Copyright © 2000-2024 PROHARDVER Informatikai Kft.