Hirdetés

2024. május 3., péntek

Gyorskeresés

Útvonal

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

Hozzászólások

(#19601) bandi0000 válasza pelyib (#19600) üzenetére


bandi0000
nagyúr

köszönöm, majd ránézek később

Lenne egy triviális kérdésem, nekem visualstudio code-ban úgy megy a PHP, hogy php -S localhost:8080 -el "elindítom", erre van más megoldás? Gondolom ha dedikált szerverre akarom kidobni, akkor nem így fog majd működni

Xbox One: bandymnc

(#19602) pelyib válasza bandi0000 (#19601) üzenetére


pelyib
tag

Általában elé raknak egy dedikált webszervert (Nginx, Apache) ami bizonyos szabályok alapján eldönti, hogy pontosan hogyan szolgálja ki a kérést, esetünkben továbbítja a PHP felé.
Ennek beállítására ~ végtelen leírás van a neten, többek között a Slim oldalán is.

(#19603) mobal válasza DNReNTi (#19595) üzenetére


mobal
MODERÁTOR

Szerintem ez hülyeség. A webalkalmazások nagyon nagy részét meg tudod oldani PHP-val, és nem hoki REST API-t is tudsz kreálni.

Nézz meg egy Laravel-t pl., szerintem semmi szégyenkezni valója nincs például egy Spring mellett (nem, nem azt mondom, hogy tudja az és vagy többet, de jó).

Azt se felejtsük el, hogy tök mindegy milyen nyelven írod a REST API-t az nem a programozási nyelvtől lesz az :)

Amúgy Symfony vagy Laravel amivel foglalkoznék csak - akár kezdőként is.

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

(#19604) DNReNTi válasza mobal (#19603) üzenetére


DNReNTi
őstag

Epp ezert irtam, hogy lehet 'csak az en kezem nem allt ra', meg hogy 'nem megoldhatatlan feladat'. :) Nekem nem ment, nem tetszett, leptem Node-ra, konnyen lehet, hogy azota mar vannak sokkal kiforrottabb megoldasok is, mint amiket en anno hasznaltam. :K

but without you, my life is incomplete, my days are absolutely gray

(#19605) bandi0000


bandi0000
nagyúr

Kérnék egy kis segítséget, youtubon néztem/csináltam ezt a PHP slim authentication-t, elvileg mindent "másoltam" de mégse teljesen úgy működik

Lényeg az, hogy a middleware-s validálásnál van a probléma, a videóba validálás után, a hibákat tartalmazó változót tovább passzolja az egyik view-nak ami lényegében egy form, na már most, úgy kellene működnie, hogy, ha elküldi az adatokat, és hibás, akkor kiír az email mező alá egy hiba üzenetet, amíg nem küldi el, addig nem csinál semmit

Nálam, ahogy belépek az adott view-ba, kiír egy hiba üzenetet: Notice: Undefined index: errors in D:\xampp\htdocs\autenthication\app\Middleware\ValidationErrorsMiddleware.php on line 11

az érintett sor:

$this->container->view->getEnvironment()->addGlobal('errors',$_SESSION['errors']);

ha rá nyomok a küldésre, akkor megszűnik ez a hiba üzenet, de hiába volt hibás a bevitt adat, nem jelenik meg semmi

Már amennyire értek hozzá, olyan, mintha hamarabb akarná használni azt az 'errors' indexet, minthogy egyáltalán lenne benne hiba

ha esetleg kell forráskód felrakom, de nem akartam telepakolni a hsz-t vele, de ha van valakinek ötlete azt megköszönném

Xbox One: bandymnc

(#19606) Gave válasza bandi0000 (#19605) üzenetére


Gave
addikt

Igen, előbb próbálja meg olvasni mint ahogy be van állítva az kulcs/index a tömbön. isset(), vagy array_key_exists() előtesztelés segíthet.

(#19607) pelyib válasza bandi0000 (#19605) üzenetére


pelyib
tag

Ahogy írod, az első betöltésnél még nincs a session-ben ez a kulcs:

!empty($_SESSION['errors'])
? $this->container->view->getEnvironment()->addGlobal('errors',$_SESSION['errors'])
: null;

(#19608) bandi0000 válasza Gave (#19606) üzenetére


bandi0000
nagyúr

köszi, közben rátaláltam, hogy én írtam el szokás szerint, de amúgy érdekes, hogy a videóba nem dob neki ilyen hibát...

Viszont lett kérdésem

Azt tudom, hogy kell validálni az adatokat szerver, és kliens oldalon is, itt jól működik, mert egybe van a kettő, de ha nekem angular kliensem van, akkor mit csináljak ezekkel az üzenetekkel? Mármint kliens oldalon ellenőrzöm, azokat az adatokat, ha az tuti jó, akkor küldi a szervernek, de ha valamiért a kliens és a szerver között megváltozik az adat, akkor az fennakad a szerveren, azzal mit szoktak csinálni?

Xbox One: bandymnc

(#19609) Gave válasza bandi0000 (#19608) üzenetére


Gave
addikt

A szerver oldali validáció a tainted (nem kívánatos) inputot eldobja, nem dolgozza fel, a kliens pedig csak akkor küld, ha az összes kliens oldali mező átment, de ez inkább csak UX kérdés, utómunka. :)

(#19610) Doink válasza bandi0000 (#19608) üzenetére


Doink
aktív tag

Vagy mindenhol validálsz vagy csak szerveren.
Ha csak szerveren akkor visszakapsz egy JSON-t az errorokkal és azt értelem szerűen angularral rábindolod a megfelelő mezőkre.
Ha mind2 oldalon akkor addig nem küldesz semmit amíg böngészőből el tudod dönteni valamiről hogy valid, de ettől függetlenül szerver oldalon mindig validálunk hiszen a böngészővel a user azt csinál amit akar.

A kliens és a szerver között megváltozik az adat:
- Ha arra gondolsz hogy valami csomag elkúródik akkor ezzel nincs dolgod, tcp/ip megoldja
- Ha arra gondolsz hogy felviszel egy új admin usert de valaki már felvitt egyet amíg te töltötted ki a formot akkor a szerveroldali validálás meg fogja oldalni.
- Ha arra gondolsz hogy egyszerre többen szerkesztik ugyan annak a usernek a formját akkor azt úgy tudod megoldani hogy beteszel egy timestampet vagy random karaktersort minden editálásnál és leküldöd a kliensnek, ha nem ugyan azt küldi vissza mint ami a db-ben van akkor valaki már megváltoztatta amíg ő szerkesztette az adatot
- Ha arra gondolsz hogy egy táblázatot/bármilyen kiírást hogyan lehet frissíteni real time ahogy a szerveren változik akkor WebSocket

(#19611) bandi0000 válasza Gave (#19609) üzenetére


bandi0000
nagyúr

De gondolom valamit vissza kell adnia majd a szervernek, amire valamit dob majd a kliens, hogy hiba történt, köszi

Xbox One: bandymnc

(#19612) bandi0000 válasza Doink (#19610) üzenetére


bandi0000
nagyúr

Jah értem köszi

Konkrétan arra gondoltam, hogy valahogy direkt manipulálná az adatot, valami ilyesmi indokot mondott a tanárom annak idején, de igazából így világos mit kell tennem :R

Xbox One: bandymnc

(#19613) radi8tor


radi8tor
MODERÁTOR

Sziasztok!

Tud valaki segíteni abban hogyan tudom ezt az apró kódot úgy módosítani, hogy a title szöveg végén található "[blankspace] (nettó ár)" string nélkül legyen echo-zva?

<?php echo $prod['title']; ?>

:R

[ Szerkesztve ]

⭐ Stella

(#19614) bandi0000 válasza radi8tor (#19613) üzenetére


bandi0000
nagyúr

Én segítenék, de nem nagyon értem, hogy mit akarsz? :D
Lehet én vagyok a láma így hajnali 8 kor :D

Xbox One: bandymnc

(#19615) Doink válasza radi8tor (#19613) üzenetére


Doink
aktív tag

trim()

ha nem erre gondoltál akkor

preg_replace('/\s+\(nettó ár\)$/', '', $prod['title']);

[ Szerkesztve ]

(#19616) radi8tor válasza Doink (#19615) üzenetére


radi8tor
MODERÁTOR

Köszi, preg_replace-s megoldás kellett. :R

⭐ Stella

(#19617) bandi0000


bandi0000
nagyúr

Végigcsináltam a youtubos authentication példát

Jól gondolom akkor, hogy ahhoz hasonlóan kell majd csinálnom nekem is? Frontenden bejelentkezik a felhasználó, és ha sikeres volt, akkor elindítom neki a session-t, és azzal ellenőrzöm majd minden kérésnél, hogy be van e jelentkezve, már amihez feltétel az, például ha csak a saját adatait akarja szerkeszteni, annál az endpointnál ellenőrzöm pl?

Xbox One: bandymnc

(#19618) radi8tor


radi8tor
MODERÁTOR

Erre a kódrészletre panaszkodik néha a rendszer "PHP Notice: Undefined index: shipping_method" -al:

if (strpos($this->session->data['shipping_method']['code'], 'xshippingpro3') || strpos($this->session->data['shipping_method']['code'], 'xshippingpro4')) {
$data['field_comment']['required'] = 'on';
}

Tudtok segíteni benne hogyan lehet ezt orvosolni? :R

⭐ Stella

(#19619) Doink válasza radi8tor (#19618) üzenetére


Doink
aktív tag

isset() -el ellenőrizd hogy létezik mielőtt hivatkozol rá.

(#19620) radi8tor válasza Doink (#19619) üzenetére


radi8tor
MODERÁTOR

Erre én is rájöttem, de sajnos nem értek ennyire PHP-hoz, hogy átírjam. :(

⭐ Stella

(#19621) bandi0000 válasza radi8tor (#19620) üzenetére


bandi0000
nagyúr

Ennyi az egész:

!empty($_SESSION['blah']

Persze az indexet átírod, meg belerakod egy if-be

Xbox One: bandymnc

(#19622) radi8tor válasza bandi0000 (#19621) üzenetére


radi8tor
MODERÁTOR

Tudom nagy kérés, de a lenti kódot át tudná írni nekem valaki rögtön használhatóra? Sajnos ez nekem nem megy.

⭐ Stella

(#19623) bandi0000 válasza radi8tor (#19622) üzenetére


bandi0000
nagyúr

Nem biztos hogy így jó lesz, de próbáld ki, annyi, hogy a fenti kódrészletet rakd a kapcsos zárójelek közé

If(!empty($this->session->data['shipping_method']['code']))
{
Ide
}
[\CODE]

[ Szerkesztve ]

Xbox One: bandymnc

(#19624) bandi0000


bandi0000
nagyúr

Egy elég összetett kérdésem lenne :D

Már lassan végig érek mindenen, ami kellene nekem, egy működő REST API-hoz

-SlimFramework
-Respect Validation
-Middleware
-JWT authentication
-notORM DB

De viszont nem tudom, hogyan tudnék ebből kihozni clean codot, hozzáteszem, hogy eddig nem is figyeltem annyira erre, ezért illene már megtanulni, ebben tud valaki segíteni?

Sok tutorialt néztem, eltérő módon oldották meg a dolgokat, pl valamelyikben egy mappát hoztak létre, gyakorlatilag mindennek egyet, bár abban is volt egy controller osztály, és az is elég sok kódot tartalmazott

A másik amit még ismerek, ez a Skeleton, ott ugye csinál magától egy src mappát abban dependencies,middleware,routes,és setting php fájlokkal, de ha sok az endpointom akkor ebben is rengeteg kód lesz, vagy ez nem gond? Mit ajánlanátok?

Xbox One: bandymnc

(#19625) amdni


amdni
aktív tag

Üdv!

Az alábbi kód miért nem működik? Nem értem:

function UserFv ($connect, $username, $password){
$arr = array();
$sql = mysqli_query($connect, "SELECT id, username, password FROM users where username = '".$username."' and password = '".$password."' ") or die('username or password load error');
while($res = mysqli_fetch_array($sql))
{
array_push($arr,array('id'=>$res['id'],'username'=>$res['username'], 'password'=>$res['password'] ));
}
return $arr;
}
//eddig rendben lefut.
$tomb = UserFv ($connect, $username, $password);
echo $tomb['id'); //ez itt nem működik!

Köszönöm a segítséget és a tanácsokat!

(#19626) Gave válasza amdni (#19625) üzenetére


Gave
addikt

while( $res = mysqli_fetch_array($sql, MYSQLI_ASSOC) )
//így?

(#19627) amdni válasza Gave (#19626) üzenetére


amdni
aktív tag

Pontosítom a problémát: a hibakódot is.

if(array_key_exists('login',$_POST)){
$username = $_POST['username'];
$password = sha1($_POST['password']);
UserSave($username);
$result = UserFv($connect, $username, $password);
var_dump($result); //ez működik, kiírja az értékeket!
if ($result != null){
$_SESSION['uid'] = $result['id'];
$_SESSION['username'] = $result['username'];
header('Location:http://localhost/sp1/admin/index.php');
}
else echo "<script>alert('Rossz felhasznalonev vagy jelszo!');</script>";
}

[ Szerkesztve ]

(#19628) disy68 válasza amdni (#19627) üzenetére


disy68
aktív tag

A $result is egy tömb, így hivatkozz rá: $result[0]["id"]

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

(#19629) amdni válasza disy68 (#19628) üzenetére


amdni
aktív tag

Köszönöm!

(#19630) bandi0000


bandi0000
nagyúr

hogy működik ez az autoload?

Hiába olvasok róla, nem akar működni

projekt mappán belül van egy models mappa, amiben van 2 osztály

az egyik osztályt használom, és mindig erre rinyál, hogy nem találja

namspace Models/Users;

composer.json :

"psr-4": {
"Tests\\": "tests/",
"Models\\":"models",
"":"Validation/"
}

(Amíg a models mappa az src mappán belül volt, és így adtam meg az composer.json-be :"":"src/models" addig működött )

autoloadoltam is már, az se segített, valszeg valamit nem értek a névadásnál, és azért kavarom be rendszert

Xbox One: bandymnc

(#19631) pelyib válasza bandi0000 (#19630) üzenetére


pelyib
tag

Nem hiányzik ott egy "/" a models után?
Amúgy az összes kódot (konfiguració ugye másik mappa) illik a "/src" mappába rakni így egy namespaceben van minden kódod
Teszteket csak deven kellenek behúzni.
Pl ahogy az a Composer doksijában is van.

[ Szerkesztve ]

(#19632) bandi0000 válasza pelyib (#19631) üzenetére


bandi0000
nagyúr

Már közben rájöttem hogy működik, a testet nem én raktam be, hanem ez a slim/skeleton műve, nem tudom jó e ha ezt használom, de sok dolog be van konfigolva

Xbox One: bandymnc

(#19635) adika4444


adika4444
addikt

Hali!

Van egy egyszerűbb fajta PHP oldal, hírlevél kellene rá.

Jelenleg úgy van megoldva, hogy egy SQL táblában tárolom a mail-címeket. Azokat bejárom egy for ciklussal, és mindegyikre mail-t küld a phpmailer.

Viszont itt a szkript lefutása igen lassú. Alternatívaként beraktam egy while ciklusba, és azt szerveren futtatom PHP-val, de az meg felzabálja a memóriát.

A kérdés tehát, hogy hogy küldjek levelet a phpmailerrel, úgy, hogy ne legyen lassú szkriptlefutás?

Sendmail nem játszik. Autholós postfix van, és lehetőség szerint marad is.

Van valami ötlet?

Előre is köszi!

üdv, adika4444

(#19636) Sn00k


Sn00k
veterán

Ha valaki tudna segíteni hogy lehet saját szerveren playert futtatni hogy adjon embed kódot az ne tartsa magában privátban írjon rám és megbeszéljük a részleteket + ezt meg azt amit feltudok neki ajánlani...

3njoy the Lif3

(#19637) pelyib válasza adika4444 (#19635) üzenetére


pelyib
tag

Mit jelent, hogy lassú?
Mi lenne szerinted a gyors, vagy elfogadható futásidő?
Hol futott eddig, ha most már szerveren?
Nem lehet, hogy limit nélkül kéred le DB-ből?

Megnézted már mi pontosan a lassú? MySQL lekérdezés, maga a PHP kód futás (ez ugye tiszta PHP-ra értem, nem arra pl.: amikor vár az SQL szerverre), esetleg maga az email küldés a lassú?

(#19638) Doink válasza adika4444 (#19635) üzenetére


Doink
aktív tag

(#19639) adika4444 válasza pelyib (#19637) üzenetére


adika4444
addikt

A levélküldés a lassú, ugye amíg csatlakozik, elküldi, ilyesmi. És az a gond, hogy ez lassítja a szkriptet a felhasználónál.
Másik probléma, hogy időzített cikkek is vannak, amit a publikálás dátumakor szeretnék elküldeni, tehát futnia kellene valami szkriptnek ami figyeli. Illetve gondoltam még cron + curl párosra, mondjuk 5 percenként vizsgálná, van-e mit küldeni...
(#19638)Doink:
Köszi, ez jónak tűnik:)

üdv, adika4444

(#19640) pelyib válasza adika4444 (#19639) üzenetére


pelyib
tag

Jól gondolod, a user requestet nem kéne ezzel lassítani. Ott csak csináljon meg egy "task"-t a feldolgozónak. A feldolgozót pedig crontab-ból x időközönként a rendszer futattja.

A "task" lehet egy szimpla flag (mező) a DB "bejegyzesek" táblában, vagy akár egy teljesen külön lévő tábla is. Utóbbi lényegesen rugalmasabb. És akár még MySQL szinten is meg tudod oldani trigger-rel.

(#19641) vakondka


vakondka
őstag

Sziasztok,

Le kellene kérnem egy hatalmas xml fájlt, de állandóan timeout van pedig egy amazon AWS EC2-n futtatom 1GB RAM-mal :( (a php.ini-ben beállítottam mindenütt a maximumot)
A kód alapvetően jó, mert ha csak 2019-től kérem le, akkor szépen lefut és kapok egy kb 70MB-os fájlt, viszont régebbi dátum esetén sokkal nagyobb a fájl és elszáll minden.

Van valakinek ötlete mi lehetne a megoldás?

Előre is köszi!

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

ini_set('max_execution_time','0');

ini_set('soap.wsdl_cache_enabled', '0');

ini_set('soap.wsdl_cache_ttl', 900);

ini_set('default_socket_timeout', 1500);

$authcode = 'yxyxyxyxyxyxyx';

$kezdes = microtime(true);

$client = new SoapClient('http://www.chs.hu/services/Vision.asmx?WSDL',

array('trace'=>1,'exceptions'=>0,'features'=>SOAP_SINGLE_ELEMENT_ARRAYS));

$file = 'xml/cikklista_pelda.xml';



$result1 = $client->GetCikkekAuth(array('web_update'=>'2019-01-01T00:00:00','authcode'=>$authcode));

file_put_contents($file,$result1->GetCikkekAuthResult->any);

$befejezes = microtime(true);

echo 'Fájl:<a href="'.$file.'">'.$file.'</a><br>Futási idő: ' . ($befejezes-$kezdes);

?>

https://toptarget.hu - Online Marketing Ügynökség

(#19642) mobal válasza vakondka (#19641) üzenetére


mobal
MODERÁTOR

Biztos szükséged van az egészre?

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

(#19643) vakondka válasza mobal (#19642) üzenetére


vakondka
őstag

Legalább egyszer le kell töltenem az egészet, hogy meglegyen minden termék, később már csak a változások kellenek, ami simán menni fog.

https://toptarget.hu - Online Marketing Ügynökség

(#19644) mobal válasza vakondka (#19643) üzenetére


mobal
MODERÁTOR

Ebben az esetben kézzel csinálnám először.

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

(#19645) vakondka válasza mobal (#19644) üzenetére


vakondka
őstag

Én is, de nem tudom hogy kell :(

https://toptarget.hu - Online Marketing Ügynökség

(#19646) supercow válasza vakondka (#19645) üzenetére


supercow
őstag

Futtasd le máshol az egészre, utána mehet ezen a gépen. Máshol = saját gép, kölcsön szerver, másik on demand vps amit csak 1 órára fizetsz.

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

(#19647) Tapsi válasza vakondka (#19641) üzenetére


Tapsi
addikt

Emlékszem, annak idején rengeteget szívtunk ugyanezzel a rendszerrel, csak nem a CHS-nél. Sajnos nem emlékszem a pontos paraméterre, de a szerver beállításoknál kell keresni a megoldást. A probléma az, hogy túl gyorsan bontja a kapcsolatot. Egy szerver admint bevonnék a dologba, ez üzemeltetési kérdés. Nekem is így sikerült megoldanom.

(#19648) pelyib válasza vakondka (#19641) üzenetére


pelyib
tag

Az API nem biztosit "CreatedAtFrom" es "CreatedAtTo" filterezest amivel lapozva lehetne lekerni?

(#19649) Nagyzoli27


Nagyzoli27
kezdő

Sziasztok!

Meg lehet azt valahogy oldani, hogy egy oldalról behúzni képeket vagy letölteni azt tömegesen és a képek neve az megegyezne az "alt" vagy "title" attribútummal?

Köszönöm!

(#19650) Doink válasza Nagyzoli27 (#19649) üzenetére


Doink
aktív tag

Ha nem spa: curl-el letöltöd az oldalt, felparseolod a htmlt és curl-el letöltöd a képeket.
Ha spa: headless browsert indítasz és azzal tölteted le.

Útvonal

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