- bitpork: MOD Júni 13 Augusztus 2- szombat jelen állás szerint.
- Gurulunk, WAZE?!
- gban: Ingyen kellene, de tegnapra
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- sziku69: Fűzzük össze a szavakat :)
- Argos: Szeretem az ecetfát
- sziku69: Szólánc.
- Luck Dragon: Asszociációs játék. :)
- f(x)=exp(x): A laposföld elmebaj: Vissza a jövőbe!
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
Új hozzászólás Aktív témák
-
.-..-.
tag
válasz
sztanozs #21793 üzenetére
Nem tudom miből kellene a legújabb, mert ez a Latest-Stable PhpMyAdmin és PHP jelenleg.
Figyelmenkívül hagyhatom, de a hibaüzenetek miatt, nem indul a PhpMyAdmin, mert a http header már egyszer létezik a PHP hibaüzenetek miatt. (már ha jól értelmezem)
Próbából felraktam a PhpMyAdmin 6.0-Snapshot-ot, na ott nincs ilyen üzenet, de jó lenne Stable ágon maradni, ami jelenleg az 5.2.2.
A PMA 6.0-Snapshot amúgy valami "The sodium extension is missing. Please check your PHP configuration." üzenettel fogad.
Hogy mi az a Sodium kiegészítő, még ismeretlen számomra, de megnézem a PHP manual-t.Valahogy le tudom tiltani a hibaüzenetet a PhpMyAdmin 5.2.2 esetén úgy, hogy a php.ini-ben ne kelljen kompletten visszavenni mindenre vonatkozóan?
-
lanszelot
addikt
válasz
sztanozs #21654 üzenetére
Loaded Modules:
core mod_win32 mpm_winnt http_core mod_so mod_actions mod_alias mod_allowmethods mod_asis mod_auth_basic mod_authn_core mod_authn_file mod_authz_core mod_authz_groupfile mod_authz_host mod_authz_user mod_autoindex mod_cgi mod_dir mod_env mod_include mod_isapi mod_log_config mod_mime mod_negotiation mod_setenvif mod_phpez pedig a php ini
[kép] -
lanszelot
addikt
válasz
sztanozs #21488 üzenetére
Először is köszönöm szépen a választ.
Nem hozzá adni, hanem javítani nem lehet.
Ha magyar tv adások 1966 lekérem, nekem az üres. De ha rákeresel pl: "Én, Strasznov Ignác, a szélhámos" , akkor benne van a listában. Tehát javítani kellene.
De 1966 -ban ott volt még a "Princ, a katona" , azt se hozza ha az 1966 -os évszámot lekérem.
De van még ilyen. Benne van, de valamiért nem hozza az adott évszámnál. -
sztanozs
veterán
-
lanszelot
addikt
válasz
sztanozs #21481 üzenetére
Én nem a Tenkes Kapitány -t keresem.
A magyar sorozatokat.
Példának írtam a Tenkes kapitányt.
Rákeresek az évszámra, és csak a magyar sorozatok jöjjenek ki
Vagy magyar film abban az évben.
Nem kód érdekel, hanem hogy aCURLOPT_URL => "https://
az url -be mit kell beírni, hogy csak a magyart hozza ki
Bocsánat ha félre érthetően irtam -
sztanozs
veterán
válasz
sztanozs #21480 üzenetére
ha alapon (en-US) hagyod a nyelvet, akkor is megtalaja, csak akkor angol nyelvu lesz az eredmeny:
{
"page": 1,
"results": [
{
"adult": false,
"backdrop_path": "/3HqYJYPMvpkDTaPTTGJFAMUo3bE.jpg",
"genre_ids": [
10759,
10751
],
"id": 70371,
"origin_country": [
"HU"
],
"original_language": "hu",
"original_name": "A Tenkes kapitánya",
"overview": "During the Rákóczi's War of Independence in South Baranya, in Vienna, Colonel Eberstein is assigned by the Council of Warriors to dispose of the Kuruc army operating in the vicinity of Siklós.",
"popularity": 7.121,
"poster_path": "/bNElDStJNFol3wh0vZLQ0CGGCh7.jpg",
"first_air_date": "1964-01-11",
"name": "Captain Tenkes",
"vote_average": 6.3,
"vote_count": 3
}
],
"total_pages": 1,
"total_results": 1
} -
lanszelot
addikt
válasz
sztanozs #21430 üzenetére
Eloszor is koszonom szepen a valaszt.
Meg csinaltam a teljes oldalt, persze van benne 2 hiba:
- elso 80 sor, ne mtudom hogy olvastassam be a nevet ami google
- masik 54 sor, itt nem tudom mit irtam el. ezt a berakaskor hozza<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Web Linkes</title>
</head>
<body>
<div class="container">
<h1 class="page-header text-center">Web Linkek</h1>
<div class="row">
<div class="urlap">
<form method="POST" action="index.php">
<div class="urlap-doboz">
<label>Nev</label>
<input type="text" class="urlap-szoveg" name="nev">
</div>
<div class="urlap-doboz">
<label>Kep</label>
<input type="text" class="urlap-szoveg" name="kep">
</div>
<div class="urlap-doboz">
<label>Link</label>
<input type="text" class="urlap-szoveg" name="link">
</div>
<button type="submit" class="gomb" name="add">Add</button>
</form>
<?php
if (isset($_SESSION['message'])) {
?>
<div class="alert" style="margin-top:20px;">
<?php echo $_SESSION['message']; ?>
</div>
<?php
unset($_SESSION['message']);
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
add();
}
function add()
{
if (isset($_POST['add'])) {
$data = file_get_contents('study.json');
$data_array = json_decode($data);
$input = array(
'kep' => $_POST['kep'],
'link' => $_POST['link']
);
$data_array[$_POST['nev']] = $input;
$data_array = json_encode($data_array, JSON_PRETTY_PRINT);
file_put_contents('study.json', $data_array);
$_SESSION['message'] = 'Hozzaadva';
} else {
$_SESSION['message'] = 'Hianyos';
}
}
?>
</div>
<div class="tabla">
<table class="tablazat">
<thead>
<th>Nev</th>
<th>Kep</th>
<th>Link</th>
</thead>
<tbody>
<?php
$data = file_get_contents('study.json');
$data = json_decode($data);
foreach ($data as $row) {
echo "
<tr>
<td>" . $row->nev . "</td>
<td>" . $row->kep . "</td>
<td>" . $row->link . "</td>
</tr>
";
}
?>
</tbody>
</table>
</div>
</div>
</div>
</body>
</html>Tudom kicsit mas, de a form bekeres miatt valtoztatnom kellett
A kiiratas nem szerepelt benne, de mondom miert ne
Igaz a kepet meg nem keri be es tolti fel, de az egy masik tortenetjson:
{
"google": {
"kep": "google.jpg",
"link": "www.google.com"
}
}ehhez adnam pl a youtube-t a form -al, vagy barmi mas oldalt.
(nincs magyar billentyum, bocsanat erte) -
lanszelot
addikt
válasz
sztanozs #21428 üzenetére
Köszönöm szépen a választ.
2 okból nem jó:
- Nem hozzá adja, hanem csak az az egy van a json-ban, a többi törlődik.
- formázatlan /ezt gondoltam, hogy így lesz, mert semmilyen formázás nincs a kódban/
bár használható, de átláthatatlan.viszont most mindegyik jót eredményez, nincs szögletes zárójelben [google] ami azelőtt volt, és most kapcsos zárójelek vannak.
-
lanszelot
addikt
válasz
sztanozs #21426 üzenetére
igen, nagyon kezdő vagyok. De ez nem azt jelenti nem tudom az alapokat.
A json -hoz semmit se értek, erre írtam, hogy fogalmam sincs mi vonatkozik ram a több oldalas leírásból.
Nem tudom melyik verziójú php fut: infinityfree weboldalon lomoszolok.
Most volt pár percem, feldobtam, de nem ír semmi a json file-ba.
Nem tudom mit rontottam el. Biztos valamit elírtam, mert nagyon fáradt vagyok.$file = "study.json";
$kep = "youtube.jpg";
$link = "youtube.com";
$eredetijson = (json_decode($file));
$tomb = array("kep" => $kep, "link" => $link);
$fotomb = array("gmail" => $tomb);
$res = array_merge((array)$eredetijson, (array)$fotomb);
$ujjson = json_encode($res);
$file2 = "study_old.json";
$eredetijson2 = (json_decode($file2));
$myArray = array("gmail" => array("kep" => "john.jpg", "link" => "john.com"));
$res2 = array_merge((array)$eredetijson2, (array)$myArray);
$myJSONArray = json_encode($myArray);
echo $myJSONArray;lekértem a pontos helét és azt raktam be, de úgy se.
$utvonal = realpath("study.json");
print "Absolute path is: " . $utvonal;így kértem le
valahol elakad a php. be kellene tenni, hogy kiírja hol, de már nincs erőm rá.
-
lanszelot
addikt
válasz
sztanozs #21424 üzenetére
Kipróbáltam, ott van fent mit kaptam eredménynek.
Nem a kép, az a sandbox.
Feljebb, az amit a szerverre rakva, változókkal úgy ahogy írta, csak adtam értéket a változóknak előtte, nem form -al kértem be a változókat.
Írtam hogy hétvégén lesz időm ismét a szerveren tesztelni.
Telefonról csak sandbox -ban tudom tesztelni.
Nem tudom honnan veszed hogy nem értem.
És mit ártottam neked, hogy támadsz?
Semmi rosszat nem írtam. -
-
Gardaai
senior tag
válasz
sztanozs #21355 üzenetére
Kerestem (sokáig
) egyet ahol előjön a hiba: [link]
A valós linket nem tudom megosztani bizonyos okok miatt. De teljesen ugyan ez a probléma.A részeknél (1. rész, 2. rész...) létrehoztam egy query-t ami így néz ki:
$finder->query("//div[@class='details-main-panel']/div[@class='buttons buttons2']/a[@id='megoszto_link']");
Localon hibátlanul lefut, szerveren üres a query. Ami érdekes, hogy ha belemegyek egy részbe és ott vannak a linkek felsorolva, azokat se látja. Viszont ott már nincs rajtuk rel attribútum. Tehát valószínűleg nincs köze hozzá, szimplán az egész blokk dinamikusan lehet betöltve.
-
Panhard
tag
válasz
sztanozs #21308 üzenetére
Sikerült megoldani, köszönöm! Viszont már rájöttem, hogy mégsem tudom használni ezt a megoldást. Több ilyen xml fájlt kellene beolvasnom, amik több száz sorosak is lehetnek. De jobban belenéztem a fájlokba, és nem nagyon követik ezt a formátumot, amit írtam példának. Valahol több szintű, valahol kevesebb. Az adat, amit keresnék bennük ott van minden objektumban, csak a hozzá vezető út többféle. Úgy hogy inkább xml helyett css-be fogok exportálni, annál minden sor ugyanúgy néz ki.
-
-
hiperFizikus
senior tag
válasz
sztanozs #21242 üzenetére
No most megtehetitek ... mobiltelefonos fájlokat is megoszthass vele .
Én nem tudom megcsinálni, már csak azért sem, mert lassú vagyok .
De fogjunk össze mi itt PHP programozás fórumozók, és csináljuk át úgy, hogy mobiltelefonos fájlok is mehessenek általa !Egyfajta házi tik-tok lehetne, cenzúra nélkül ♥
-
hiperFizikus
senior tag
válasz
sztanozs #21221 üzenetére
Utána néztem a YouTube videók között:
A Windows 7 -esen, ami nekem is van, lehet szervert letölteni .
És a kliens csak kliensként, a szerver meg szerverkén is és kliensként is működhet .
A kérdésem most az, hogy ugye a kliens oldalon vannak a böngészők, mint a Chrome is; van-e valamiféle kliens oldali böngészővel analóg, kereső valami a szerver oldalon ?
-
hiperFizikus
senior tag
válasz
sztanozs #21151 üzenetére
Most épen 2 napig kavartam a kódon egy helyben, de új ötlet alapján ismét lendületbe jöttem .
A 003 verziót csinálom, de sokat markoltam benne egyszerre, de így is már kifele vagyok a felétől nézve ! Még 3 nagyobb alaki szerkezetet kell megcsinálnom hozzá, meg sok aprókat, és a diagnosztikát felhozni, meg a dokumentációját alaposabbá tenni . Így sem lesz még a funkcióknak alakjuk és paraméterlistájuk, meg a szimultán értékadás sem, de a ciklusok és az elágazások igen .
De már zavar az egyhangúsága a gépelésnek, senki sem vigasztal engem ...
-
nevemfel
senior tag
válasz
sztanozs #21108 üzenetére
password_hash + password_verify. Nem kell se salt, se MD5, se SHA, elintézi belül.
-
nevemfel
senior tag
válasz
sztanozs #21105 üzenetére
Jelenleg ott tartunk, hogy prepared statement sincs a kódban, úgyhogy talán nem az a legnagyobb probléma, hogy nem elég erős a hash függvény. Ha nem plaintextben lesznek eltárolva a jelszavak, az már jó irány.
Egyébként én inkább a php password hash függvényeit ajánlanám. Nagyon egyszerű használni őket, és elég biztonságosak. Lényegében a pasword_hash és a password_verify függvényt kell használni, és nagyjából ennyi.
-
lanszelot
addikt
válasz
sztanozs #21061 üzenetére
Bocsánat, félre értettél.
Azt próbáltam elmagyarázni miért nem jó a #21059 -es.
Azt tudom hogy lehet html form -ot változókban tárolni.
A #21059 -eshez próbáltam rámutatni, hogy az "oldal" nem kapja meg az inputot sehonnan. A "kep" nem tartalmazhat karaktert, sem a "link" mert inputból kapja.
A linket azért dobtam hogy mit értek html form/input alatt.
Amiket meg tudok találni oktató anyagokban azzal nincs gondom, mert meg keresem.
De vannak dolgok amiket sehol se találok, ha találok azok nem működnek.Azért próbáltam leírni részletesen mit is akarok.
Tehat van egy json file. Abból php beolvassa az $array változóba az adatokat. -erre találtam oktató anyagot.
Majd html form/input ból az adatok php változókba kerülnek. - ez is tiszta.
Ezekkel a változókkal /ami jelen esetben $oldal , $kep, $link/ az $array tömbbe hozzá adja az adatokat - na erre sehol se találtam semmit. /Tömbbe, objektumot változókkal nem létrehozni, hanem hozzáadni/
Létrehozni létre tudom hozni, azzal nincs gond. Hozzá írni nem tudok, mindig felül írja azt ami $array -ben van.
Tehát se a megfelelő /tömbbe objektum változókkal/ kód -ot nem találtam sehol.
Se a tömb-höz hozzá adni, nem felülírni.
Egyiket se találtam sehol.---nem tanultam sehol php t, nincs vele célom, nem akarok ebben dolgozni, csak szórakozás nekem. Megtanultam az alapokat, és kitalálok honlapokat, hogy így fejlődjek. Ezért nem értem, ha nem értek valamit, mert nagyon kezdő vagyok.
van aki horgol, vagy fest, én tanulgatok ---
-
lanszelot
addikt
válasz
sztanozs #21059 üzenetére
a for ciklus nem jó.
Nem is értem miért kell, és mit csinál a $xFor ciklusban lévő kód nem jó.
html form/input -ból kapja az adatokat. tehát "oldal" önmagában honnan tudná, hogy az "oldal" input micsoda.
"kep" -nél és "link" -nél sem lehet link, hisz az inputból kapja meg.
$array nem üres, azt a legelején a json -ból olvasssa ki, és ahhoz kellene hozzá fűznie, nem felülírni.Gondolom, hogy én magyarázom bénán, csak codepen nem tud php-t.
-
lanszelot
addikt
válasz
sztanozs #21057 üzenetére
Először is köszönöm szépen.
Nem nagyon értem.
Nem éretem mit csinál a $x
Html form -al viszem be mind, input mezővel. oldal a: google, kep a: google.jpg, link a: www.google.com /oldal, kep, link/
illetve ez a formátum biztosan nem jó "www.site$x.com" hiszen nem minden oldal www , pláne nem com, és a login.xbox sem csak xbox.
Illetve a google, és a mail az jsonból van beolvasva, nem így hozom létre. És az a json lesz feülírva. -
-
válasz
sztanozs #21021 üzenetére
Értem, ez így tiszta. A forráskódban a PHP kódot valóban nem lehet elérni kliens számára láthatóan, de a JS-t igen. Namost, az első PHP kódom mikor lefuttatja a lekérdezést, az hívja be a JS-t is. Tehát: Ameddig nincs bejelentkezés a megfelelő adatokkal, addig nem látszanak a JS kódok sem. Számomra ez volt a fő lényeg.
De mindattól függetlenül amit írtál, az alap probléma fent áll és magyarázat nem született rá: Miért frissíti le magát az oldal, miután lefut a JS kód? Hiszen, mint magad is írtad, a JS kliens oldalon fut, szerver felé lekérdezés nem történik.
-
sztanozs
veterán
-
-
válasz
sztanozs #20988 üzenetére
Az tiszta sor, hogy nem fogja látni és éppen ez a lényeg.
A művelet vége az lenne, hogy ha minden adat bekerült (text & num input-ok), be van pipálva a megfelelő bepipálandó és ki van választva legördülőről a kívánt, akkor az összes beviteli eredmény szerinti kód fut le. Az a kód pedig egy (vagy több), a szerveren lévő fájlt szerkeszt. Többnyire JSON-t. Ezért is választottam a PHP-t, mint kódot.Szóval, hogy rövidre zárjuk a dolgokat: A kliens azt látja a második PHP lefutása után a Submit-et követően, hogy lefrissül az oldal. Azonban, a beküldött kódjaimat tekintve szerver oldalon végrehajtódik a művelet, igaz?
Ha igen, akkor nincs további kérdésem. Ha nem, akkor miért nem?(A végrehajtott művelet alatt értsd: Az echo helyett pl egy txt fájl szerkesztése van)
Ui.: Jelenleg nem tudom letesztelni, ezért kérdezem, hogy ha mégsem jó, akkor mire a tesztig eljutnék, legyen egy konkrétum. Köszönöm!
-
-
válasz
sztanozs #20977 üzenetére
Éppen ezaz. Én nem töltök vissza semmit.
Az első PHP kódnak kell behívnia és megjelenitenie azt a tartalmat, amely tartalmazza a többi gombot.
Ám a többi gomb programja lehetne annyi is, hogy console.log-ban küld egy üzenetet, de nem ez történik, hanem újratölti az oldalt.
Ha manuálisan külön veszem a két kódot, akkor az utóbbi működik. De ha előtte van az, aminek előtte kell lennie, akkor már nem. És ezt nem értem.Szerk: Az első verzióban még DIV tartalom módosítás volt, de úgy sem működött, alapból próbaként csináltam include-ot belőle.
-
Taci
addikt
válasz
sztanozs #20912 üzenetére
Nagyon szépen köszönöm a felajánlásodat, de nem foglak privátban zaklatni ezzel. Az egy dolog, hogy beírom ide, aztán ha valaki épp rálát és rá is ér, ad 1-2 tanácsot - de amíg van mit átéznem saját kútfőből is, semmiképp nem fogok mást piszkálni ezzel.
Kb. 1100 rekord / 80 mp-ről indultam optimalizálni, kb. 18e / 80 mp körül van most, de ha azt mondod, ez még mindig nem az igazi, átnézem a többi részt is. (Igazából élvezem, persze sok időt elvisz egy olyan területre, amiről azt hittem, már készen van, de attól még élvezem.
)
Köszönöm még egyszer a felajánlást!
-
Taci
addikt
válasz
sztanozs #20898 üzenetére
Tehát ha jól értem, akkor ebből
$kategoriak = array(
'szorakozas' => ['elozetes', 'film', 'sorozat', 'hbo', 'mozi'],
'kultura' => ['mozi', 'szinhaz', 'múzeum', 'koncert', 'film'],
'masszázs' => ['eufória']
);
ezt csináltad:
$kulcsok = array(
"elozetes" => "szorakozas",
"film" => "szorakozas",
"film" => "kultura",
"sorozat" => "szorakozas",
"hbo" => "szorakozas",
"mozi" => "szorakozas",
"mozi" => "kultura",
"szinhaz" => "kultura",
"múzeum" => "kultura",
"koncert" => "kultura",
"eufória" => "masszázs",
);
És akkor azt mondod, hogy így ezen belül az array_key_exists (key_exists) gyorsabban megtalálja az értéket, és egyből ott van hozzá a kategória neve is értékként.
Kipróbálom, köszi.Reggel amúgy rákerestem arra, hogy "php in_array slow performance", és volt egy válasz valahol, ahol azt ajánlotta, hogy a
$categories_szorakozas = array(
"elozetes",
"film",
"sorozat",
"hbo",
"mozi",
);
helyett legyen:
$categories_szorakozas = array(
"elozetes" => true,
"film" => true,
"sorozat" => true,
"hbo" => true,
"mozi" => true,
);
és így array_key_exists-tel ellenőrizni. Átírtam, futtattam egy tesztet (előzővel és ezzel is ugyanúgy 10 mp-re limitálva), és az in_array 10mp alatt 77 rekordot tudott feldolgozni, míg ez a másik fajt az array_key_exists-tel csak 38-at... Szóval vissza is írtam.
De a te változatodnak sokkal több értelme van, szóval teszek azzal is egy próbát.
Meg amúgy (bár nem hiszem, hogy túl sok időbe kerül az a kezdeti, "kulcsok" táblát feltöltő művelet, de) megcsinálhatom eleve úgy a "kategoriak" tömböt, hogy eleve abban a formában legyen. -
Taci
addikt
válasz
sztanozs #20893 üzenetére
#20894: Ah, az azért már nem elhanyagolható sebességbeli különbség...
Csak jó lenne tudni ki is használni.
A Pythonba nem kezdenék bele, bőven elég ez is, köszönöm. Látod, ezzel sem haladok épp villámtempóban.
A tömbbe a kulcsszavakat kézzel írom bele. Jönnek külső forrásból a bejegyzések, hozzájuk az általuk megadott kulcsszavak, tagek, kategóriák, én pedig azokat rendezgetem magamnak a saját kategóriáimba. (Enélkül nagyon össze-vissza lenne minden, átláthatatlanul.)
Ezen a táblázatos tároláson el kell gondolkodnom, ki kell próbálnom. És igazán nem is értem.
Most simán csak in_array()-jel nézem meg, hogy az adott kulcsszó benne van-e valamelyik kategóriához tartozó kulcsszavai között. De ehhez ugye végig kell mennem a külső forrásból megadott kulcsszavakon (foreach), aztán a kategóriákhoz beállított kulcsszavakon is (foreach).
Ha táblázat van tömb helyett, az én tapasztalatommal kapásból feltöltenék egy tömböt a táblázat adaival, és foreach-et használék, hogy bejárjam. De sejtésem szerint nem ez az ajánlásod lényege.(A linkeket átnézem alaposan, amint odaérek. Köszönöm.)
Upd.: És azt is, amit most küldtél, még csak most látom, a hozzászólás elküldése után. Köszönöm szépen ismét a segítségedet és a türelmedet!
-
sztanozs
veterán
válasz
sztanozs #20895 üzenetére
és egy némileg lassabb implementáció PHP-ben:
<?php
$A = [];
$B = [];
foreach (range('A', 'Z') as $a){
foreach (range('A', 'Z') as $b){
foreach (range('A', 'Z') as $c){
$A[] = $a.$b.$c;
$B[$a.$b.$c] = 0;
}
}
}
echo count($A).'<BR>';
echo count($B).'<BR>';
$time_start = microtime(true);
for($i=0; $i<10000; $i++){
in_array('ZZZ', $A);
}
$time_end = microtime(true);
$execution_time = ($time_end - $time_start);
echo $execution_time.'<BR>';
$time_start = microtime(true);
for($i=0; $i<10000; $i++){
key_exists('ZZZ', $B);
}
$time_end = microtime(true);
$execution_time = ($time_end - $time_start);
echo $execution_time.'<BR>';
?>A különbség 1 sec vs 0.5 milisec.
-
Taci
addikt
válasz
sztanozs #20888 üzenetére
Mindenek előtt köszönöm, hogy kódot is írtál!
Viszont talán nem egy dologról beszélünk. (simán benne van, ti látjátok a jó utat, én meg továbbra is vakon vagyok)
SQL-lel nem lehet (jelen pillanatban) ezt megcsinálni, mert a kulcsszavak nem táblázatban vannak, hanem simán egy tömbben.
De amúgy ha a kulcsszavak táblázatban lennének, akkor sem lenne gyorsabb szerintem, sőt, hiszen azért csak gyorsabb egy kész tömbön végigmenni, mint előtte a tömb elemeit SQL-ből lekérni.Mutatok egy éles példát:
Külső forrásból ez a sztring érkezik:
$rekord_kulcsszavak = "Kultúra,előzetes,eufória,filmtv,hbo,második évad,rév marcell,sam levinson,sorozat,zendaya";Ezt szétbontom tömbbe, elemenként.
Ezeket az elemeket egyesével megnézem, milyen kategóriákhoz tartoznak (a kategóriákhoz tartozó kulcsszavak alapján), és azokat írom be a KUlcsokKAtegóriák táblába:
- Kultúra --> kultura
- előzetes --> szorakozas
- eufória --> nincs ilyen kulcsszó
- filmtv --> nincs ilyen kulcsszó
- hbo --> szorakozas, már benne van a kategóriában, skip
- második évad --> nincs ilyen kulcsszó
- rév marcell --> nincs ilyen kulcsszó
- sam levinson --> nincs ilyen kulcsszó
- sorozat --> szorakozas, már benne van a kategóriában, skip
- zendaya --> nincs ilyen kulcsszóTehát a rekordhoz a kultura és a szorakozas kategóriák kerülnek mentésre.
@biker: Amikor bekerül egy rekord a fő táblába, az az infó is mentve van vele, hogy milyen verziójú kategória tömb alapján lett kategóriákba besorolva. Így amikor ez a szkript elindul, elsőnek csak azt ellenőrzi, melyik rekordnál van más (régebbi) verzió. Így csak azokat a rekordokat nézi át, amik régi verzióval készültek. Nincs felesleges művelet.
Viszont ha aztán frissítenem kell a kategóriákhoz tartozó kulcsszavakat, akkor muszáj vagyok emelni a verziószámot is, mert nem tudhatom, melyik rekord fog új/más kategóriá(k)ba kerülni.A fenti példánál maradva:
Mondjuk azokkal a kulcsszavakkal az 1.0-s verzióban a következő kategóriákba kerülne a rekord: kultura, szorakozas, és mondjuk az "eufória" miatt a masszazs kategóriába (csak egy példa).
Aztán ezt észreveszem, hogy hopp, az "eufória" kulcsszó nem jó a masszazs kategóriába, úgyhogy kiszedem onnan.
Ekkor ha nem emelek verziót (1.0 marad), akkor az a rekord skippelve lesz, így marad a masszazs kategóriában, hibásan.
De verziót emelek (1.1 lesz), így újra ellenőrzive lesz, és kikerül a rossz kategóriából. De ennek sajnos az az ára, hogy verzióemelésnél mindet újra át kell nézetnem, mert nem tudhatom, melyik fog változni, addig, amíg nem ellenőrzöm újra. Viszont a következő változtatásig ez a szkript skippelni fogja az összeset már, mert 1.1-re át lett írva mind. -
Taci
addikt
válasz
sztanozs #20883 üzenetére
Már csak rákérdezek, mert ezt a feladatot nem látom máshogy (könnyebben, főleg gyorsabban) megoldhatónak:
Adott 40 kategória. Minden kategóriában vannak kulcsszavak, van, amiben csak 20, van amiben 240, van amiben 600.
Minden rekordhoz tartoznak szintén kulcsszavak, egy, vagy akár több is.A szkript ezeket a rekordokhoz tartozó kulcsszavakat vizsgálja végig a kategóriák kulcsszavain, az összesen, és ha valamelyikben egyezés van, azt a kategóriát bejegyzi neki.
Így alakul ki a végére, hogy az adott rekord milyen kategóriákba kerül.
Aztán ezek a kategóriás kulcsszavak változhatnak, bekerül pár, kikerül pár, és ez alapján a rekordokat is módosítani kell.A 90 mp jelenleg arra elegendő, hogy ezeket az ellenőrzéseket és bejegyzéseket megcsinálja kb. átlag 1200 elemhez.
Lefuttattam 3 mp-cel, 32-re volt ideje.Ezen akárhogy nézem, gyorsítani csak úgy tudnék, ha vagy kategóriákat törölnék, vagy kulcsszavakat. Egyiket sem akarom, sőt, kulcsszavakból egészen biztosan még több lesz.
Ez amúgy csak pár egymásba ágyazott
foreach
, semmi több:-- foreach - a kategóriák listájából a kategóriák neveire
---- foreach - a kategóriák neveihez tartozó tömb elemeire, amik a kategóriák kulcsszavai
------ foreach - a rekordokhoz tartozó kulcsszavakraEzután már csak a megfelelő rekordot hozza létre, módosítja vagy törli.
Ebben a kontextusban, ezekkel a számokkal is olyan szörnyűnek hangzik? Csak mert 0 viszonyítási alapom van, nem látnám, hogy bárhol "pazarolnék", nem tudom, hogyan lehetne ezen gyorsítani.
-
Taci
addikt
válasz
sztanozs #20883 üzenetére
*Naprendszeren kívül - nagyban gondolkodom.
Ezért is írtam, hogy ez a része nem lényeges most. Nyilván átnézem újra, mindent logolva, mi tart mégis ennyi ideig.
Előbb futtat egy lekérdezést, ahol csak a rekordhoz tartozó verziószámot ellenőrzi. Ha nem a legfrissebb (amit egy tömbből ellenőriz a legelején), akkor ezekből visszaad egy listát (id-k).
Aztán ezen a nem legfrissebb verziójú rekordokon végig futtat pár ellenőrzést, sztringekből, és JOIN-olt táblákból dolgozik, aminek a végén kap egy eredményt, és attól függően kell a JOIN-olt táblákban update-elni, törölni vagy hozzáadni (vagy mindet).Ez legutóbb 6 percig tartott 8150 rekordnál.
Ahogy a részletes logot nézem, azt látom, hogy van olyan rekord, ahol akár 4 mp-be is kerül a processz, máshol meg 1 mp-en belül megvan 2-3.
Én is szívom a fogam, mert azért tényleg nem DNS-t vizsgál a szkript... De ezt úgyis átnézem, mert ez így sok.
Lehet, itt az én gépem (tesztkörnyezet - XAMPP) teljesítménye a szűk keresztmetszet, és szolgáltatónál repülni fog.De ettől függetlenül...
...csak annak az elvére szeretnék ráérezni, hogyan lehet vajon ezt megcsinálni, ha mindenképp kezelnem kellene ezt a helyzetet (szkript futása nem fér 90 mp-be bele).
Ma reggel az jutott eszembe, hogy vajon ha a Cron job meghívja a szkriptet, aztán azt 85 mp-nél commit-olom, majd meghívatom vele rekurzívan saját magát addig, amíg végig nem megy minden elemen, akkor vajon a 2. hívás (és a többi) még a Cron job-hoz tartozik?
Ezt fogom majd kipróbálni. -
#45252096
törölt tag
válasz
sztanozs #20879 üzenetére
OOO tenyleg, de hulye vagyok, koszonom az eszrevetelt. Verebre agyuval
Az eredmenyfrissitest ugy gondoltam (befejezodottre allitast), hogy azt valami kulson apin keresztul kerdeznem le. Es ehhez ugye kell scheduler, ami minden nap tobbszor is megnezi, hogy van-e mar eredmeny, vagy esetleg elmaradt-e valami miatt a meccs. Lehet eleg lenne naponta ketszer, nem szukseges azonnali eredmeny.
Es mondjuk ejjel frissitenem a ranglistat, az alapjan, kinek hogy sikerult a tippelgetes. -
pmonitor
aktív tag
válasz
sztanozs #20857 üzenetére
>nem a php2/php3 korában vagyunk, hogy ezt meg lehetne csinálni.
Akkor megnyugodtam.
A contact form javítva. Köszi, hogy szóltál. Na, ilyenre gondoltam, hogy vki. esetleg figyelmeztetne vmilyen hiányosságra a .txt-vel kapcsolatban(pl. vmi. beállítási problémára). A webprogramozásban nem vagyok otthon. Magyarul: örülök, hogy össze raktam vhogy az oldalt.
szerk.: egyébként a contact oldalon kinn van az e-mail címem is.
-
pmonitor
aktív tag
válasz
sztanozs #20855 üzenetére
A webhelyszolgáltatómnak nem tudom az álláspontját, de valszeg. nem. Mondjuk nem úgy gondoltam az engedélyt, hogy feltörik a webhely szolgáltatómat, vagy az én jelszavamat. Mert azt tudom, hogy a dróton el lehet kapni. Végül is így mindenhez hozzá lehet férni. Csak konkrétan ehhez az egy file-hoz másik szerverről. Amiről szó volt.
Ez ellen lehet, hogy a szolgáltatóm sem tiltakozna. -
Taci
addikt
válasz
sztanozs #20817 üzenetére
A regex (a minta) mégsem tökéletes még.
Ránéznél erre a példára, kérlek? Remélhetőleg neked hátha hamar szemet szúr, mi lehet a hiba.[link] (Csak két helyen kell a kommentelést
//
leszedni/beírni.)Adott a
–
(hosszabb kötőjel) karakter, aminek a kódja:–
.1. változat:
- Ha nincs a végén pontosvessző, és a te kódodat ({1-9}{0-9}*
) használom, nem rakja végére a pontosvesszőt. (helytelen)
- Az "enyém" ([0-9]*
) igen. (helyes)2. változat:
- Ha van pontosvessző, és a te kódodat használom, akkor nem bántja, marad minden jó a formában, és a végén a _decode átalakítja a megfelelő hosszú kötőjelre. (helyes)
- Az "enyém" viszont ezt csinálja belőle:̵1;
, a 3. számjegy után berak egy pontosvesszőt. És nem értem, miért. (helytelen)És a
{ }
és[ ]
közötti különbségre sem tudtam még rájönni. Te az előbbivel írod, én azt a formát viszont csak a számosságnál találtam meg, az általad használt formában nem:
n{x,y} Matches any string that contains a sequence of X to Y n'sRá tudnál nézni erre, kérlek?
-
Taci
addikt
válasz
sztanozs #20820 üzenetére
Asztali legfrissebb Chrome-ban, Firefox-ban és Operában is néztem, ugyanaz mindenhol. Ami fura, \-rel írva (pl. \047 az aposztróf) már jól fordítja.
megszünteted az injection lehetőségét
Pontosan hogyan? Hisz' eddig csak megkönnyítettem a dolgát azzal, hogy nem a böngészőnek kell dekódolnia, nem?Mármint itt van példának ez:
$link = "jAvAsCriPT:alert(\047Hacked!')";
A regexet használva, majd dekódolva a böngészőnek már semmi dolga nincs, mert egyből ezt kapja:jAvAsCriPT:alert('Hacked!')
Ez hogy szüntette meg az injection lehetőségét?
Mert eredetileg azért akartam ezt csinálni, hogy megtalálhassam a potenciálisan veszélyes kifejezéseket (javascript, script, onerror stb stb stb - nagyon hosszú lista, de talán megéri), amiknek amúgy semmi keresnivalójuk nincs egy linkben - aztán vagy csak ezeket a talált "rossz" kifejezéseket törölni, vagy az egész linket skippelni. (valószínűleg ez utóbbi)
De ha csak a decode --> regex --> decode lépéseket csinálom, az hogyan szünteti meg a támadási felületet?
-
Taci
addikt
válasz
sztanozs #20817 üzenetére
Pont azért írtam azt a példát az előbb, mert annál sajnos még hibázik a kódod.
De ennél így leegyszerűsítve is:$link="'";
A'
az aposztróf ('
).Ez a kimenete a kódodnál:
9
És a böngésző így jeleníti meg: [ismeretlen karakter]9Esetleg annyi változtatás kellhet, hogy
0[0-7]+
helyett0[0-7]{2,}
legyen?
Mert a 8-as számrendszerbeliek ha jól láttam, talán minimum 3 karakteresek. -
Taci
addikt
válasz
sztanozs #20815 üzenetére
Köszönöm szépen!
Első lépésként _decode-ot hívni tényleg nagyon jó ötlet.Ha ehelyett:
$pattern = '/(&#(?:X[0-9a-f]+|0[0-7]+|[1-9]\d*)(?!;))/i';
így lenne:$pattern = '/(&#(?:X[0-9a-f]+|[0-9]+)(?!;))/i';
akkor miben hibázhatna? Mert így igazából a 2. feltétel le is fedhetné a 8-ast és a 10-est is.Sőt, most találtam egy példát is, amiben az első hibás eredményt ad, a második pedig jót:
$link="javascript:alert('Hacked!')";
Itt az elsővel az output (_decode előtt):
javascript:alert(9Hacked!')
A másodikkal pedig (_decode előtt):javascript:alert('Hacked!')
Persze ez lehet csak egy egyszeri "mázli", de biztos okkal csináltad úgy az elsőt, ahogy, és csak szeretném megérteni.
Köszönöm.
-
Taci
addikt
válasz
sztanozs #20799 üzenetére
Mint kiderült, mégsem értem...
Ez a sor nekem elég összetett:
$pattern = '/(&#(?:X[0-9a-f]*|0{0-8}*|{1-9}{0-9}*)(?!;))/i';
Részekre szedve:
-&#
ezzel kezdődő mintákat keres
- amik így folytatódhatnak:
-X[0-9a-f]*
: tehát a következő karakter az X (a végén lévő /i miatt kis- és nagybetű is), utána pedig a 16-os (HEX) számrendszer miatt 0-9 és a-f karakterek szerepelhetnek, a * miatt 0 vagy több számban. Szóval ez a része azt hiszem, rendben (mármint értem), ezzel van lekezelve, ha Hex kódolásban lennének a karakterek.
-0{0-8}*
: Ez a rész nem teljesen tiszta. Ha jól értem, ez azt jelenti, hogy a&#
után hány darab 0 karakter állhat, és itt az van megadva, hogy 0-tól 8 db-ig akármennyi. Tehát ez alapján a minta lehetne&#
,�
,�
, ...,�
? Ezt nem értem, hogy mire való - vagy rosszul értelmezem.
-{1-9}{0-9}*
: Ezt a részt egyáltalán nem értem. Kapcsos zárójel elvileg azt jelenti, hogy az előtte álló karaktert hányszor ismételje meg. De a|
miatt a&#
van előtte. Szóval nem értem.- A végén van még a
(?!;)
. Ezt sem értem, hogy mit csinálhat.- És a legeljén lévő
?:
-ról pedig csak a nevét találtam: Non-Capturing Groups. De a működését nem bírom felfogni. Talán "csak" a művelet sebességéhez van köze?
(?: ), in contrast to ( ), is used to avoid capturing text, generally so as to have fewer back references thrown in with those you do want or to improve speed performance.-
$replacement = '${1};';
Itt pedig az $1 a backreference lenne. A kapcsos zárójeleknek itt a Non-Capturing Groups-hoz van köze? Ezt sem igazán értem. Mert ugye itt adod meg, hogy ha megtalálja a mintát, akkor mire cserélje: eredeti + zárja le pontosvesszővel.
Az én felületes "tudásommal" ha magam írtam volna, akkor ezt írtam volna:$replacement = '$1' . ';';
Miben különbözik az általad írt?Összességében a cél nyilván az, hogy felismerje, ha Dec vagy Hex kódolású karakterekről van szó (Dec:   Ẁ ♦ - Hex: ~ ˆ ∼ ), és ha nincs pontosvessző a végén, akkor egészítse ki vele.
Csak a részletekben vesztem el, és szeretném érteni, mi-mit-miért csinál. (Bocsánat, ha evidens dolgokra kérdezek rá, próbáltam megérteni a részleteket, utána járni, de ez egy számomra elég bonyolult "képlet".)
Ezt a pár dolgot pár mondatban el tudnád, magyarázni, kérlek?
-
Taci
addikt
válasz
sztanozs #20796 üzenetére
Igen, persze.
Egy "PHP Fiddle"-szerű helyen meg is csináltam egy kipróbálható és szerkeszthető példát: [link]
@disy68: Igen, és az alapján
A
lenne azA
karakter. [link]
A "baj" az, hogy a böngésző értelmezni tudja, aA
-bőlA
karaktert fordít, és így értelmezni is tudja. Ezt szeretném én is "elkapni", ellenőrizhetővé tenni, de nem megy. -
Taci
addikt
válasz
sztanozs #20787 üzenetére
Arra gondoltam, megcsinálom azt, hogy szűröm az adott kontextusban rosszindulatúnak számító kifejezésekre, és ha van benne ilyen, akkor megpróbálom "tisztítani" (vagy simán csak skip, mert ha már "fertőzött", akkor valid tartalomrész amúgy sem nagyon lesz benne).
Pl. ha kép linkjét várom, akkor abban nem lehet javascript, onerror, onfocus stb.
Viszont mivel nem csak a
javascript:alert('Hacked!')
valid, hanem ajAvascript:alert('Hacked!')
is, ezért így gondoltam az ellenőrzés (egy részét) megcsinálni:if (stripos(htmlspecialchars_decode($linkToCheck), $dirty_content) !== FALSE){
echo "XSS-találat!";
}
Ettől azt várnám, hogy ha
$linkToCheck = "jAvascript:alert('Hacked!')";
akkor ahtmlspecialchars_decode
ezt visszaírjajAvascript:alert('Hacked!')
-re,
astripos
pedig mivel case insensitive, így ha arra keresek, hogy "javascript:"$dirty_content = "javascript:";
akkor sikerül elkapni.De nem, a _decode nem, vagy nem úgy működik, ahogy várnám, és találatot itt továbbra is csak akkor ad, ha a speciális HTML entity-re keresek, pl.:
jA
Mit rontok el?
-
Taci
addikt
válasz
sztanozs #20785 üzenetére
Köszönöm (a JS topikban is) a linkeket. Ezeket már megtaláltam, átnéztem, értelmeztem (legalábbis folyamatban van.)
Ha html tagbe illesztesz be, akkor mindent célszerű kódolni, ami nem lehet URL-ben...
Itt erre gondolsz?
htmlspecialchars()&
(ampersand) becomes&
"
(double quote) becomes"
'
(single quote) becomes'
<
(less than) becomes<
>
(greater than) becomes>
----------
Az adatbázisba raktározó részt már régen csináltam, így most meg kellett néznem, mi-miért van.
És azt találtam, hogy mivel a különböző források eltérően kezelik a tartalmakat, össze-vissza kapom az adatot. Pl.:
Egyik helyről így kapom:
szöveg első része – szöveg másik része
(ez a "hosszabb" kötőjel: –)A másik helyről pedig már így:
szöveg első része – szöveg másik része
Ugyanígy az idézőjelekkel is pl.
Ezért eredetileg úgy csináltam, hogy mindegy, melyik forrásból érkezett az adat, így tároltam el:
htmlspecialchars_decode($description, ENT_QUOTES);
Megjelenítésre pedig így adtam át:
htmlspecialchars($description, ENT_QUOTES);
Ez mondjuk a "hosszabb" kötőjelen pont nem segített, de az a legkevesebb, átíratom majd, ha ilyet talál, írja át normál kötőjelre.
A kérdésem most az lenne, mivel már eléggé bekutyultam magam a sok új infóval és teendővel:
Ez-e a jó irány, hogy
htmlspecialchars_decode
használatával tároljam, és a megjelenítéshez menjen ahtmlspecialchars
?
Vagy eleve már a decode --> encode után kaptottat tároljam?Bocs, ha túl kézenfekvő dolgot kérdezek, de már nem látok tisztán.
Ez egy tisztább példa lesz:
$description = "&" . ' "' . " '" . " <" . " >" . " –"
. " &" . " "" . " '" . " <" . " >" . " –"
. " <b>bold text</b>";
Tehát mindkét változatban megkapom ezeket a karaktereket. Nekem ami fontos lenne, hogy:
- kijelezve "szépen" legyenek
- viszont a kódolás miatt ahtmlspecialchars
is használva legyen.Ezt jelenleg így tudom elérni.
$description = htmlspecialchars_decode($description, ENT_QUOTES);
$description = htmlspecialchars($description, ENT_QUOTES);
echo $description;
Kivéve a hosszabb kötőjelet, de az nem érdekel.
Az output:& " ' < > – & " ' < > – <b>bold text</b>
Mentsem akkor ezt a tartalmat (előbb dekód, aztán kód) az adatbázisba, és simán adjam át a HTML kódba illesztésre?
Bocs a hosszú megfogalmazásért.
-
Taci
addikt
válasz
sztanozs #20676 üzenetére
Tehát ha a user hiába ad meg a linkelt példában lévő kártékonynak szánt inputot a $name változóhoz (a linkelt példában ez volt email címhez: bswan@microsoft.com'; DROP TABLE CustomerTable; PRINT 'Gotcha!'--), mindkét verzióval "védve vagyok"?
Ha igen, miért? (Ha 1-2 mondatban, vagy akár csak 1 magyarázó linkkel el tudnád mondani. - közben lentebb azt hiszem, meg is találtam rá a választ)
Ha jól értem, azért "kellene" az sqlsrv_query, mert:
When you execute this query using parameterized values and the same user input , only the INSERT query is executed.Viszont a Prepared Statement-tel (bind_param) is paraméterezek. Ezért lenne az a fajta verzió is "védett"?
Úgy látom, ez lehet az oka, igen ( [link] ):
A prepared statement is a parameterized and reusable SQL query which forces the developer to write the SQL command and the user-provided data separately. The SQL command is executed safely, preventing SQL Injection vulnerabilities.Köszönöm!
-
Taci
addikt
válasz
sztanozs #20655 üzenetére
De fura, teljesen meg voltam győződve róla, hogy egy sima getElementsByTagName lesz, nem gondoltam, hogy ez ennyire "lehetetlen" feladat php-ben, "szépen".
A forrás sajnos nem "megbízható", bármikor változtathatnak, ezért is szerettem volna a sztringek vágásánál egy "szebb" módot, mert ha ott változtatnak valami radikálisat (vagy akár kicsit is, de "rossz helyen"), akkor hibára futhat a kód.
De akkor maradok ennél. Köszönöm.
Neked is a választ, Mike. -
Taci
addikt
válasz
sztanozs #20634 üzenetére
Igazából én jelenleg a 200-at, a 301 és 302-t kezelem.
Az összes többit szeretném csak simán a logomba összeszedni, hogy ha olyan link kerül elő, amit máshogy kell kezelni, tudjam, hogy arra mit dobott - plusz a php error logot szeretném tisztán tartani, mert ha ott van bejegyzés, akkor azzal foglalkoznom kell.
Egy HTTP status code-dal vagy DNS hibával nem (kapott linkek, nincs ráhatásom, se a szerverjeik állapotára).Elképzelhető, hogy nem működő linket kapok, vagy a szerverrel van valami, és nincs header (így a
get_headers
hibára fut, ami így a php error logba kerül), de ezt a lehetőséget is szeretném lekezelni, hogy a saját logomba kerüljön.Hogyan tudnám megoldani?
Köszi. -
Taci
addikt
-
Taci
addikt
válasz
sztanozs #20628 üzenetére
Igen, erre jutottam én is. Még próbálom ezt meghegeszteni, mert sokkal kényelmesebb és menedzselhetőbb lenne, ha lenne 1 feldolgozó szkriptem, és azt hívná meg minden forrás - de hát már látom, hogy a vége az lesz, hogy mindegyik kap egy saját, testre szabott szkriptet, mert azzal, hogy kezelek egy nem standard-ként működőt, esélyes, hogy elrontom a többit (ahogy most is történik), amik meg amúgy tökéletesen, a standardok szerint működnek.
Köszi.
-
Taci
addikt
válasz
sztanozs #20625 üzenetére
Nincs itt nagy baj, se tervezési hiba. (@polymorphin) Sok helyen van meghívva már a függvény, el akartam kerülni, hogy mindenhol át kelljen írni a paraméterezés miatt.
De ha aglobal
kerülendő (mi miatt amúgy?), akkor inkább átírom.@SUPREME7: Írtam is, hogy a global-lal próbáltam, de valamiért az egyik függvénynél/értéknél nem volt hajlandó működni. De mindegy is, nem is javasolt, meg inkább megcsinálom az átírást.
Köszi.
Amúgy az bonyolítja be nagyon nálam, hogy 23 db külső forrásból kell dolgoznom, és 24 féle képpen kezelik a dolgokat, amit nekem egy szkriptben kell lekezelni, és ez néha kuszává teszi.
Most a legtöbb probléma a következő miatt jött fel:
Írtam korábban, hogy ellenőriznem kellett, hogy valid linkekkel dolgozom-e. Ott ugye jött az átirányítás "problémája". Megoldottam.
De aztán jött az, hogycurl
-lel (is) kell dolgoznom ezeknek a linkeknek a tartalmán. És most pont az átirányítós probléma miatt jött fel egy újabb:
"failed to open stream: Redirection limit reached, aborting"Kiszedtem hát a header-ből a "Location" alól (persze ettől bonyolultabban), mert ugye így megvan a végső cím, és akkor nem lesz ilyen átirányítós probléma.
De aztán jött egy olyan forrás, ahol nemes egyszerűséggel a "Location"-be (már ha épp így írják, és nem csupa kisbetűvel) már nem a teljes átirányított linket rakják be (mert hát ugye miért is lenne egységes), csak a domain utáni részt. Pl. ha a domain https://www.oldal.hu/, és a "Location"-be csak annyi kerül, hogy "/aloldal/cikk.html".És ez mind abba a funkcióba kellett hogy kerüljön, aminek csak annyi dolga lett volna eredetileg, hogy valid-e a link vagy sem.
Na az ilyenek teszik egyre bonyolultabbá és kuszábbá a szkriptet. -
-
-
Taci
addikt
válasz
sztanozs #20549 üzenetére
Köszönöm szépen a segítséget mindenkinek, sikerült "átállnom" utf8mb4-re.
Mivel még csak teszt adatbázis, ezért csináltam backup-ot minden táblából, módosítottam minden PHP kódot, amivel létrehozom a táblákat, és rendben létrejött minden a megfelelő formában, tartalommal feltöltve. Persze még tesztelnem kell alaposan mindent, de remélem, rendben lesz.
A keresésnél úgy döntöttem, nem kell az _as, mert ha valaki pl. angol billentyűzetkiosztással keres (vagy akárcsak mobilon is), nem fogja az ékezetes betűket beírogatni (mobilról én sem tenném).
---------------------------
Egy másik kérdés PHP-hoz kapcsolódóan:
Valószínűleg sokszor ki lett már tárgyalva, és a saját kutatásom (aka. Google-keresés) szerint nincs különösebb jelentősége, de:
Kell foglalkozni az egyszeres (fél-) idézőjel'
és a dupla idézőjel"
közti különbséggel?Az összes PHP kódomat a "normállal" írtam
"
- kivéve persze ahol pont mondjuk sztringbe akartam dupla idézőjelet írni.Azt tudom, hogy a dupla idézőjelesbe írt változók kiértékelődnek:
$s = "dollars";
echo 'This costs a lot of $s.'; // This costs a lot of $s.
echo "This costs a lot of $s."; // This costs a lot of dollars.
És biztos van még ilyen különbség. De a kódjaimat már megírtam, szóval már minden működik, úgyhogy ezzel a részével már nem kell foglalkoznom.
Szóval engem inkább az érdekelne, vagy van-e (nagy) jelentősége teljesítményben, ha a duplát
"
használom az egyes (fél)'
helyett?
Régebben biztosan számított, de a mai (és tegnapi) gépek és rendszerek teljesítményénél talán ez már egyáltalán nem fontos.
De azért inkább rákérdezek.Köszönöm.
-
Taci
addikt
válasz
sztanozs #20530 üzenetére
Ezzel a collation-dologgal most bekavarodtam.
Nézegetem, hogy mit kellene használni, és ezt a linket találtam:
http://mysql.rjweb.org/utf8mb4_collations.htmlItt kapásból néztem a két magyart:
utf8mb4_hu_0900_ai_ci
utf8mb4_hungarian_ci
De már az első karaktereknél látszik, hogy pl. A-betűnek kezeli az á-t is, és kb. minden hasonlót:
A=a=ª=À=Á=Â=Ã=Ä=Å=à=á=â=ã=ä=å=Ā=ā=Ă=ă=Ą=ąPlusz ugye mert _ci, case insensitive, tehát nem különbözteti meg a kis- és nagybetűket.
Tehát nekem a magyar-specifikus collation-ök nem jók. Ahogy nézem, ez lehet jó, hogy külön kezelje az ékezetes betűket:
latin1_general_ci
Itt külön van kezelve az "A" az "Á"-tól, bár jobban örülnék, ha ezeket együtt kezelné:
À=à Á=á
Mert simán kinézem, hogy néhány helyen még rosszul szerepelnek az ékezetek, így ezt sajnos külön kezeli, és ha a cikkben "àlom" van, a keresés az "álomra" (fordítva áll az ékezet) nem hoz majd eredményt. De ez legyen a legkisebb probléma, ezzel még együtt tudok élni.Jól látom, hogy a
latin1_general_ci
-t kell használnom, ha meg akarom különböztetni a keresést ékezetes karakterek alapján?Azt nem igazán találom, hogy az
utf8mb4_bin
hogyan működik ezekhez képest.----------
Ez a COLLATE parancsot amúgy jól használom? Vagy az adatbázis létrehozásakor kellett volna?
Mert ilyet is találtam:CREATE DATABASE Jira CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
Én igazából "csak" keresni szeretnék, az ékezetes betűket külön kezelve.
De most ezzel eléggé bekavarodtam.Tereljetek irányba, kérlek.
Köszi.
-
Taci
addikt
válasz
sztanozs #20525 üzenetére
Most jutottam csak oda, hogy rá tudjak nézni, de valóban ott volt a hiba, megtaláltam, javítottam, működik. Köszi.
Most csinálom a keresést az oldalon.
Azt vettem észre, hogy alapból átkonvertál mindent ékezet nélkülire, oda-vissza.
Tehát ha arra keresek, hogy "alma", akkor dob olyan találatokat, amikben olyan szavak szerepelnek, mint pl.: "álmaink", "álmából" stb.
Mondjuk azt is kidobja, hogy "fájdalmak", de max akkor úgy keresek, hogy első karaktertől kezdve, vagy pedig szóköz legyen előtte, vagy vessző.
Hogyan tudom úgy indítani a keresést, hogy ha ékezettel írom be a keresőszót, akkor csak az ékezeteseket mutassa, ha pedig ékezet nélkül, akkor úgy?
Pl. beírom, hogy "édes", és kidobja, hogy "ezredes", vagy "verekedés".
Ez így nem jó.
Bár néha meg pont kapóra jön, mert pl. most rákerestem, hogy "kocsma", és kidobta azt is, hogy "kocsmáját", ami így pont szerencsés találat volt, de talán ez a ritkább.
Van valami bevált módszer a pontos(abb) keresésre?
De gyorsan ránéztem a példa kedvéért a Telex keresőjére, ott is inkább csak az ékezetekre figyelnek (ha "alma" a keresett szó, nem dobja azt, hogy "álma"), illetve néztem azt is, hogy ha "alma" a keresés, a "hatalma" nincs a találatok között, szóval gondolom úgy lesz, ahogy írtam, első karaktertől vagy szóköz után (vagy lehet még vessző, pont és pontosvessző is, hátha el van gépelve).
Köszi.
-
coco2
őstag
válasz
sztanozs #20483 üzenetére
Bekoppantottam az általad idézett kódpéldát és kicseréltem az $input stringet a #20476-ban megadott-ra. Ezt dobta ki:
&fields=privacy\u00252Cname\u00252Clink&limit=1
ehelyett:&fields=privacy%2Cname%2Clink&limit=1
A kódpélda nem működik. Próbáld ki, és meglátod. Azért van rá szükség.
-
válasz
sztanozs #20399 üzenetére
Azért szenvedek, mert a tartalmi részeket ezzel szerkesztem és van adminisztratív dolgunk is (pl. levél írása) ahol ez van berakva.
Egyébként CKEditor 4.8
Azt szeretném, ha nem is kellene ezzel foglalkozni. Tehát, módosításkor egy szó végére kattintok, beszúrok plusz egy szóközt és gépelem a szöveget (nem marad dupla szóköz), ilyenkor a szövegszerkesztő ne szúrja be a nem törhető szóközt.
Azért gáz, mert sokszor szétesik a tartalom, ha ilyen szóköz marad benne, viszont mivel nem statikus oldalakat szerkesztek, nincs arra idő, hogy másolgassam a kész anyagot. Ráadásul nem is kódolva nézem, hanem mint szövegszerkesztő használom. Kolléganőim szintén, akik meg végképp nem tudják mi az a forráskód...
-
Taci
addikt
válasz
sztanozs #20321 üzenetére
Ezt találtam eddig a legjobb példának, ami alapján remélhetőleg meg tudom csinálni a saját változatomat:
https://codepen.io/timseverien/pen/XXYaZe -
Taci
addikt
válasz
sztanozs #20319 üzenetére
kell egy prepare persze még bele
Ahh, annyit szenvedtem vele, hogy végig hibaüzenetet dobott (Call to a member function bind_param() on bool), mert nem tetszik neki a lekérdezés. De nem tudtam rájönni, mi a baja, mert adatbázisban futtatva (és a "?" paramétereket átírva persze) tökéletesen futott.
Aztán így 2 óra szenvedés után végül arra jutottam, hogy teljesen lecsupaszítom és visszakövetem a kódot, és végül rájöttem, hogy táblát nem lehet paraméterezni, azon halt el végig...
"SELECT * FROM ? ORDER BY ? DESC LIMIT ? OFFSET ?"
Ott FROM utáni paraméternél csúszott el. De így végre megvan.De így összerakva már működik az infinity scroll-szerű megoldásom is. Így már ezt el tudom tenni, hogy oké, van egy működőképes változatom (erre a kérdéskörre), így nézhetem a pagination-t, és ha azzal nem menne (valamiért), akkor erre vissza tudok állni.
Milliószor akartam írni, segítséget kérni (ebben a prepare-es elakadásban is), de örülök, hogy végül nem tettem, és magamtól találtam rá a megoldásra, így sokkal jobb tapasztalat.
Köszönöm az iránymutatásotokat!
-
coco2
őstag
válasz
sztanozs #20291 üzenetére
@sztanozs:
Köszönöm a figyelmeztetést. Egy spa / api szerver készül éppen, file hozzáféréseket nem tervezek paraméterbe rakni.
@nevemfel:
Köszönöm a tippet. Beállítottam normálisra az elérési jogokat, és most már működik, amit nem értettem. Illetve egy apróság még alant.
@supercow:
Elfogadom a gondolatot, és átszerkesztem a site-ot. Egyetlen nyitott kérdés maradt htaccess használatára, az pedig a bináris anyagok átlinkelése a stie-ról, ami kvázi sávszélesség támadása. Még nézem, hogy azt a rewrite rule-t berakhatom-e a virtual server beállítások közé, vagy annak viszont tényleg htaccess-be kell kerülnie. Ilyesmi:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?mydomain.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]
Más:
Egy index.php-ba ennyit raktam bele:
<?php var_dump(file_get_contents("index.php")); ?>
Ha valami html állományt linkelek be, vagy bármi mást, arra működik, szépen képernyőre dobja a tartalmát. Viszont ha php állományt, arra üres stringet kapok vissza - furcsa mód a string korrekt hosszúságával, de akkor is üres string.
A szerveren egyébként be van állítva script cache ezekkel:
"opcache.enable=1"
"opcache.memory_consumption=128"
"opcache.interned_strings_buffer=8"
"opcache.max_accelerated_files=1000"
"opcache.use_cwd=1"
"opcache.validate_timestamps=1"
"opcache.revalidate_freq=2"
"opcache.revalidate_path=0"
"opcache.max_file_size=0"
Az ember azt hinné, a php file-ok nem kerülnek blokkolás alá vagy olyasmi. Pláne, hogy kívülről text editorral bele tudok nyúlni akármelyikbe.Van valami kézenfekvő magyarázat a jelenségre?
-
coco2
őstag
válasz
sztanozs #20289 üzenetére
Csak hogy megnyugtassam magam, hirtelen rápróbáltam, hogy document root fölötti mappában létezett a "dead.letter" file, és hogy mit lép az apache-om a "www.mydomain.com/../dead.letter" -re. Visszaírta "www.mydomain.com/dead.letter" -re, pedig úgy emlékszem, nincs ilyen céllal rewrite rule-om. Ha működik is valami védelem, az alap beállítás lehet. Valós tud még lenni az a veszély a jelenkori világban?
-
don_peter
senior tag
válasz
sztanozs #20277 üzenetére
Ez működik és jól listáz.
Kérdésem az, hogy ez nem e bonyolultabb mint a dupla csoportosításos megoldásom?
Illetve kérnék egy magyarázatot az inner join () részhez, hogy teljesen tiszta legyen számomra mit is csinál az a rész. Nem alkalmaztam még ezt a csatolást. Köszi előre is a türelmed. -
don_peter
senior tag
-
don_peter
senior tag
válasz
sztanozs #20267 üzenetére
Sajnos az összeállított kódod hibás listát eredményez, de majd ha lesz kicsi időm átnézem, mert talán irányvonalnak nem rossz.ui: jelzem, hogy 2021-es dátummal is születtek bejegyzések, a helyes lista az előző bejegyzéseim egyikében szerepel kóddal és képpel illusztrálva..
Második kódod ugyan úgy hibás, első dátum 2019-03-16.
Új hozzászólás Aktív témák
Hirdetés
- Háztartási gépek
- EAFC 25
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Everest / AIDA64 topik
- Azonnali alaplapos kérdések órája
- NVIDIA GeForce RTX 4080 /4080S / 4090 (AD103 / 102)
- bitpork: MOD Júni 13 Augusztus 2- szombat jelen állás szerint.
- Megvan, milyen chipet használ a Pura 80 Ultra
- The Elder Scrolls V: Skyrim
- One otthoni szolgáltatások (TV, internet, telefon)
- További aktív témák...
- MSI RTX 4070 SUPER 12GB GAMING X SLIM WHITE - 20 hónap garancia
- GIGABYTE RTX 4070 SUPER WINDFORCE OC 12GB - 20 hónap garancia
- iKing.Hu - Samsung S25 Ultra - Titanium Black - Használt, karcmentes
- Apple Ipad 10.generáció
- Új HP Pavilion x360 14-ek Érintős hajtogatós Laptop Tab 14" -35% i5-1335U 8/512 FHD IPS Iris Xe
- Honor Pad X8 64GB, Wi-Fi, 1 Év Garanciával
- DOKKOLÓ BAZÁR! Lenovo, HP, DELL és egyéb más dokkolók (TELJES SZETTEK)
- Azonnali készpénzes Sony Playstation 4 Slim / PS4 Pro felvásárlás személyesen/csomagküldéssel
- BESZÁMÍTÁS! Microsoft XBOX Series X 1TB SSD fekete játékkonzol extra kontrollerrel dokkolóval
- DDR3 BAZÁR! 8GB 16GB 1333MHz 1600MHz 2400MHz DDR3 memória garanciával hibátlan működéssel
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged