- sziku69: Fűzzük össze a szavakat :)
- Luck Dragon: Asszociációs játék. :)
- zebra_hun: Hűthető e kulturáltan a Raptor Lake léghűtővel a kánikulában?
- Magga: PLEX: multimédia az egész lakásban
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- Gurulunk, WAZE?!
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- ubyegon2: Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- user2: Kia Ceed Gold 160 1.5 T-GDI MY2024
- Mr Dini: Mindent a StreamSharkról!
Új hozzászólás Aktív témák
-
válasz
DNReNTi #18952 üzenetére
Hát, az irány az jó. Sőt, már van 7.1 is, ott is van pár hasznos újdonság. De persze még mindig nem az igazi. Amit említésre méltónak tartok, fontos:
- Error nevű Exception a sima errorok helyett
- megadhatók típusok a paramétereknél és visszatérési értéknél (int, string, stb)
- jelentősen gyorsabban fut
- sok idióta cucc deprecated lett vagy eltávolították, értelmesebbre módosult -
válasz
DNReNTi #18950 üzenetére
PHP 7 óta ugye minden error helyett hálistennek Exception van, jóval egyszerűbb kezelni. Vagy is nem. Ha túl sokáig fut a script vagy elfogy a memória, akkor még mindig sima error van és a
register_shutdown_function()
nevezetű izével kell kezelni.Ami meg warning vagy hasonló, arra ott a
set_error_handler()
, ott lehet dobni Exception-t mindenre. Problem solved. -
válasz
PumpkinSeed #18942 üzenetére
Nem kell látnia az exceptiont. Szerinted itt az 5xx hibaoldalak mik? Mind exception. A PHP hibakezelése könnyen testreszabható, bár még 7.1-ben is vannak még sajnos lyukak amire érdemes odafigyelni.
-
válasz
PumpkinSeed #18939 üzenetére
Úgy is kell.
Ha olvastad a bejegyzést, akkor láthatod, hogy én sem használok olyan változót, ami lehet hogy nem létezik. Az empty-t az üres tömb ellenőrzésére használtam mindig, csak aztán kiderült, hogy nem erre való. Az isset függvényt meg csak tömb index létezésének vizsgálatára.
-
Egy kis írás az
empty()
függvényről, érdemes tudni: [link] -
válasz
Sk8erPeter #12405 üzenetére
Ja végülis a PHP lehet igencsak túlfizetett nyelv is, ha az átlag ár / kódminőség rátát nézzük.
-
válasz
Sk8erPeter #12293 üzenetére
Ha kérdőjel van a .* után, akkor kevésbé mohó, legalábbis a perl-féle regexp szabványnál így van. Szóval van egy sztringünk:
asdsdsda
A /a.*d/ kifejezésre rákeresve ezt adja vissza:
asdsdsd
Míg a /a.*?d/ kifejezésnél nem annyira mohó:
asd
-
válasz
Sk8erPeter #12214 üzenetére
$a = array(1, 2, 3, 4);
foreach($a as &$i) echo $i *= 2;
foreach($a as $i) echo $i;A két ciklus "kibontva" valahogy így nézne ki:
/*
* Első foreach
* Itt az 1, 2, 3, 4 tömbből a ref. foreach miatt 2, 4, 6, 8 lesz
*/
&$i = $a[0]; echo $i *= 2;
&$i = $a[1]; echo $i *= 2;
&$i = $a[2]; echo $i *= 2;
&$i = $a[3]; echo $i *= 2;
/*
* Itt $i változó a tömbünk utolsó eleme a referencia miatt
* Tehát ha $i értéke módosul, módosul a tömb utolsó eleme is
* A második foreach kavarodást okoz, mert megint $i-t használjuk:
*/
// A tömb utolsó eleme az első elem is lett egyben (!)
// Azaz a tömb értékei: 2, 4, 6, 2
$i = $a[0]; echo $i;
// Itt az utolsó elem a másodikkal osztozik: 2, 4, 6, 4
$i = $a[1]; echo $i;
// Harmadikkal: 2, 4, 6, 6
$i = $a[2]; echo $i;
// Végül saját magával, de ő a harmadikra mutat, így...
// ...marad ahogy volt: 2, 4, 6, 6
$i = $a[3]; echo $i;Tanulság:
Ha referenciás foreach-et használsz, a fura meglepetések és az akár több órás debuggolás elkerülése érdekében MINDEN ESETBEN töröld a referenciát az utolsó elemre a foreach után az unset() függvénnyel, ami az esetünkben $i, tehát:
// Így már jó lesz
$a = array(1, 2, 3, 4);
foreach($a as &$i) echo $i *= 2;
unset($i);
foreach($a as $i) echo $i; -
Na, helyes megfejtő, illetve magyarázat?
Nem olyan szörnyű, csak elsőre kicsit meglepő.
-
Szerintetek első ránézésre mit ír ki az alábbi kódrészlet?
$a = array(1, 2, 3, 4);
foreach($a as &$i) echo $i *= 2;
foreach($a as $i) echo $i;Lefuttatni nem ér.
-
válasz
Speeedfire #4768 üzenetére
Ja az a header rossz helyen van, bármiféle kimenet csak utána lehet, előtte nem. Na meg szerintem nem sleep()-pel kéne várakoztatni.
Két választásod van:
1. html meta tagokkal babrálsz (ezt ugyebár a <head>be kell írni)
<meta http-equiv="refresh" content="5;url=index.php" />
2. ugyanúgy headert használsz (még a kimenetek ELŐTT):
header( "refresh:5;url=index.php");
Mindkettőnek ugyanaz az eredménye: 5 másodperc után átirányít a megadott oldalra.
-
válasz
Speeedfire #4765 üzenetére
Nem olvastam vissza, de remélem szűröd a POST-ban az aposztrófokat (vagy bekapcsolva van a magic_quotes), mert elég csúnyán hekkelhető így a kódod.
-
válasz
Tele von Zsinór #3689 üzenetére
Akkor marad a kiterjesztés-ellenőrzés. Vagy esetleg ha windózos szervere van, akkor megpróbálhatja COM+ szolgáltatásokkal megnyitni az xls-t.
-
Nem te hamisítod, hanem a feltöltésnél. A MIME-t asszem a böngésző adja meg, szóval megfelelő eszközökkel lehet akármi a MIME, mint ahogy a kiterjesztés is. var_dump()-pal nézd meg mégegyszer az xls MIME-ját mégegyszer, lehet hogy szóköz van valamelyik végén a sztringnek, vagy lehet elírtál valamit. Ki tudja...
-
válasz
Sk8erPeter #3642 üzenetére
Rakás sz@r, de szabványtartóbb s szvsz ezen lehet a legjobban debuggolni.
-
válasz
Sk8erPeter #3577 üzenetére
Pfúú, erre én is kíváncsi vagyok, hogy mi a megoldás. Vicces mód ha jól emléxem, akkor a hotmail-ben a levelek listájánál rosszul írja ki a Feladót, de ha megnyitom, akkor már jól.
-
LOL, tudom már mi volt a baj.
Nem az, hogy üreset írt ki, hanem, hogy <?-t használtál <?php helyett, s emiatt nem fordította le azt a részt a php, így a < nevű fájlnak akarta elküldeni a formot, de nyilván ilyen fájl nem létezett, a ? jel után részt meg ugyebár query string-nek értelmezte.
-
Több féle dolog miatt lehet:
1. Lehet, hogy már előtte is írtál ki valamit, ez lehet sortörés, szóköz is vagy akármi!
2. Rosszabb esetben, ha beágyazod a képgeneráló fájlt, akkor ellenőrizd le, hogy azonos-e a két fájl karakterkódolása.
3. Illetve még az UTF8 BOM kavarhat be, láthatatlan karaktert írathat ki a fájl elején, szóval BOM nélküli UTF8-at használj.
-
-
válasz
Sk8erPeter #3497 üzenetére
dupla...
-
válasz
Sk8erPeter #3497 üzenetére
Ne gányojjá'!
<?php
$szam = 0;
while($sor = mysql_fetch_array($eredmeny, MYSQL_ASSOC)) {
if($szam % 2 == 0) {
echo '<tr class="zold">';
} else {
echo '<tr class="piros">';
}
echo "<td>${sor['evf']}</td>";
echo "<td>${sor['szak']}</td>";
// [...]
echo "<td>${sor['k6']}</td>";
echo "</tr>";
$szam++;
}
?>
/////////////// stylus
<style>
tr.zold td
{
background-color: green;
}
tr.piros td
{
background-color: red;
}
</style> -
válasz
Sk8erPeter #3391 üzenetére
Az md5() helyett én inkább az sha1()-t ajánlanám.
-
Ubuntu 9.10
Közbe megoldódott azzal, hogy felraktam a magyar nyelvi csomagot.
De aztán rájöttem, hogy csak néhány sztringfüggvény viselkedését módosítja...Pl a htmlentites() függvényt egyáltalán nem befolyásolja, így kell használni, ha jót akarok: htmlentities($tab, ENT_COMPAT, 'UTF-8');
-
A setlocale() függvényről tud valaki valamit, hogy hogy az istenbe lehet használni?
Sehogy se tudok magyarítani vele, pl a setlocale(LC_ALL, 'hu_Hu.UTF8') hamisat ad vissza, meg a hu_HU és hu_HU.UTF-8 is.
-
válasz
pumatom #3322 üzenetére
Közbe rájöttem, hogy lehet szürke mezei HTML-lel is csinálni Javascript helyett, szóval írd így a végét:
echo '<a href="' . $_SERVER['PHP_SELF'] . '"><img src="' . $img_folder . $image . '" border=0></a>';
Tehát ez linkesíti a képet, így ha rákattintasz, elvileg ugyanaz az oldal jön be a PHP_SELF cuccos miatt.
-
válasz
pumatom #3310 üzenetére
Képre való kattintáshoz nem PHP, hanem inkább Javascript kell, mert a kattintás a kliens oldalon történik a server (PHP) mit sem tud róla.
Már nem azért, de a kódot amúgy honnan kukáztad össze?
Kicsit kitakarítottam:<?php
$imglist = array();
$img_folder = 'images/pic/';
$imgs = dir($img_folder);
while ($file = $imgs->read()) {
if (preg_match("/\.gif$/i", $file) || preg_match("/\.jpg$/i", $file) || preg_match("/\.png$/i", $file))
$imglist[] = $file;
}
closedir($imgs->handle);
mt_srand();
$image = $imglist[mt_rand(0, sizeof($imglist)-2)];
echo '<img src="' . $img_folder . $image . '" border=0>'; -
válasz
Sk8erPeter #3317 üzenetére
Jade NE csak a session változót állítsd be, hanem azt is, hogy irányítson IS át ugyanoda, mert ez utóbbi nélkül télleg nem lehet sehova se rakni az unset()-et.
Inkább leírom az egészet, nemtom eddig miért nem csináltam:session_start();
if($_SESSION['siker']) {
// tehát ez AKKOR fut le, ha már felvetted
// a cuccokat az adatbázisba, és az átirányítás
// miatt POSTmentes lett a lekérés, F5-re nem
// küld újra semmit.
// SIKER KIÍRÁSA
$_SESSION['siker'] = false;
// unset is lehetne, de tökmindegy... :)
} elseif( JÓK AZ ELKÜLDÖTT ADATOK ) {
// FELDOLGOZÁS
$_SESSION['siker'] = true;
header('Location', $_SESSION['PHP_SELF']);
// nem fut tovább ugyebár, hanem elölről kezdődik,
// de már NINCS POST...
} else {
// SIKERTELEN, HIBÁS, HIBAÜZENETEK, STB
} -
válasz
Sk8erPeter #3312 üzenetére
OOP, MVC, és a jó dokumentáció a lelke mindennek.
Szvsz...
-
Igazatok van.
Csak próbáltam valami egyszerűbb módszert is megadni, ha nem akar nagyon belemélyedni, vagy nincs ideje, türelme. Én magam is írtam egy saját MVC keretrendszert az orchid (nagyon egyszerű fw) illetve a Zend framework áttanulmányozása után, s mióta megvan azóta csak azt használom, elég sok sikerrel. Szóval tudom, hogy miről van szó.
Én se szeretem a gány kódokat, sőt még azt se ami nem OOP.
-
válasz
Sk8erPeter #3294 üzenetére
Bocs, elfelejtettem visszanézni a topikba.
Hirtelen most erre a dologra azt tudom mondani, hogy használd az ob_start() függvényt a kérdéses fáj elején, s így akkor küldhetsz headert, amikor csak akarsz, mert pufferbe írja az adatokat elküldés helyett, amit a szkript lefutása után ürít ki, ha ez megold valamit.
Mert amúgy nem értem mi nem megoldható ezen.
POST ürítésre a header('Location', $_SERVER['PHP_SELF']); cucc kell ugyebár. Amikor ezt meghívod, sessionbe is beraksz egy változót, hogy törölted a POST cuccokat, majd ezt a változót is törlöd, hogy később ne kavarjon be.
Ehh fáradt vagyok.
Illetve még annyit tudok ajánlani, hogy nézz utána az MVC-nek, ez biztos segítene a problémádon, csak idő kell hozzá...
-
válasz
Sk8erPeter #3291 üzenetére
Kéne pedig használni unset-et, mert amúgy látszólag mindig azt írja ki, hogy sikeres, pedig nem is volt az. Meg még annyi, hogy fentebb írtad, hogy még megkérdezi hogy elküdje-e mégegyszer a postot. Pedig azt nagyon nem kéne neki...
-
válasz
Sk8erPeter #3288 üzenetére
szerk: közbe átírtam, mert mégse jó úgy...
Nem kell a session-be tenni, hanem csak annyit csinálsz, hogyha sikeresen felvetted az adatbázisba a postolt adatokat, akkor csinálsz egy $_SESSION['siker'] = true; trükköt, majd header('Location: ', $_SERVER[''PHP_SELF'');, amivel eltűnik a $_POST, s akkor a $_SESSION['siker'] miatt kiíratod, hogy sikerült, majd unset($_SESSION['siker']). -
válasz
Sk8erPeter #3285 üzenetére
Hát ez elég gány, akkor inkább a SESSION['post'] vagy valami másba adod meg, s aztán azt unsetteled, nem az egész sessiont. De minek kell ez? fentebb olvastam valami átirányítós dolgot, akkor amiatt kell? És konkrétan mit postolsz?
-
válasz
Sk8erPeter #3282 üzenetére
Ezt nem értem. Miért ne lenne ugyanaz az eredménye a két példának? o.O
-
válasz
Sk8erPeter #3223 üzenetére
Nem kötelező paraméter(ek) megadása:
function foo(bar=null)
{
// blah-blah
}A null helyére bármit írhatsz, az lesz az alapértelmezett értéke a paraméternek, ha nem adod meg.
Ha korlátlan számú paramétert akarsz megadni, akkor a func_get_args() függvény jöhet jól. Ez a a függvény visszaad egy tömböt, amiben a megadott paraméterek vannak. Az első paraméter 0-s indexű, a második 1-es, stb. A func_num_args() függvénnyel a megadott paraméterek számát tudod lekérni. Illetve van még a func_get_arg($index) függvény, amivel az ($index + 1)-dik paramétert tudod elérni.
-
Heeelp...
Gondoltam ide írok, mert ez a topik jobban pörög a többinél és hátha tudja valaki.
Már napok óta szenvedek azzal, hogy pár oldal helyett a weblapomon teljesen üres fehér oldal jön be. Mára kiderült, hogy a /var/log/apache2/error.log végén ilyesmik vannak:
[Thu Oct 08 20:20:48 2009] [notice] child pid 30595 exit signal Segmentation fault (11)
[Thu Oct 08 20:20:48 2009] [notice] child pid 30597 exit signal Segmentation fault (11)
[Thu Oct 08 20:20:48 2009] [notice] child pid 30598 exit signal Segmentation fault (11)Magyarán mindig ilyet nyom a fájlba, amikor fehér lappal válaszol. Amúgy a kód más szerveren simán fut, de a simán konfigolt gépemen nem. Már próbálkoztam apache, php újratlepítéssel, de nem használt. Ubuntu 9.4 x64 rendszerről van szó. Ja és még annyit, hogy a kód relatív sok kimenetet csinál(na), azaz olyan 50-80 kB-ot - ha ez számít.
-
válasz
Sk8erPeter #3052 üzenetére
Ahogy cucka is mondta, több szempontból se jó a módszer.
De amúgy a többféle MIME ellenőrzéséhez az ilyesmi jó, és átlátható:
$valid = array(
'image/jpeg',
'image/pjpeg',
'image/gif',
'image/png',
);
if(in_array($tipus, $valid)) {
// yada-yada-yada
} else {
// error
} -
válasz
Sk8erPeter #3048 üzenetére
Ja hogy van erre szakosodott függvény? Há' akkor használd azt.
Hibakezelésnek meg használd azt, ami legjobban bevált.Vagy ha elegánsan akarod megoldani, akkor ezt: Kivételkezelés
-
válasz
Sk8erPeter #3043 üzenetére
Hibakezelésre szerintem nem én ajánlottam a módszert, de egyszerűbb szkriptben megteszi ez is. Én amúgy ilyen sok kis
if (hiba) {
return hibakód;
}sorokat szoktam használni ellenőrzésre, amik függvényen vagy includolt szkripten belül használhatóak. A hibakezelés a függvényt hívó (vagy fájlt includoló) szkriptben történik.
Kiterjesztés visszarakásnál az a legcélszerűbb, hogy levágás előtt a substr() függvénnyel megjegyzed a kiterjesztést, oszt visszarakod amikor kell, így nem kell vele foglalkoznia a szkriptednek, fogalma se lesz róla, hogy milyen kiterjesztésű fájlokkal dolgozik.
-
válasz
Sk8erPeter #3041 üzenetére
bináris = nyers, vagyis alapjában véve ugyebár egy tempfájlba tölt fel, aminek a nevét $_FILES[{inputname}]['tmp_name'] változóból éred el, s abban van a bináris. Most nézve a file_put_contents()-em gyakorlatilag hülyeség, szóval mást használj helyette, a fájlnév a régebb megadott átnevező-algoritmus $file változójában van. Pölö lehet move_uploaded_file() azonnal átmenteni, vagy az imagesave()-vel menteni, ha már be van olvasva GD-be.
-
válasz
Sk8erPeter #3038 üzenetére
UTF8-at szerintem valahogy csak meg lehet oldani, de a mikéntjéről fogalmam sincs.
A fájltípust (MIME) a $_FILES tömbből is elő tudod varázsolni, én úgy szoktam. [L:http://www.php.net/manual/en/features.file-upload.post-method.php][/L]
-
válasz
Sk8erPeter #3037 üzenetére
1.)
Az 010101110101011010111010101011011110 alatt a képet értettem bináris formában. Tehát magát a képet, mint adat, feltöltés esetében ugyebár ez a $_FILES tömbben van.2.)
Igen, pontosan ezt csinálja. -
válasz
Tele von Zsinór #2991 üzenetére
Hája, az már nagyon gyanús volt, hogy a gzip-re azt dobta a böngésző, hogy nem támogatott... Ezért írtam kötőjellel... Azt elfogadta minden bögnésző és az Etag se kapott a végére "-gzip"-et.
Na amúgy most jó megy gzip-pel gzencode()-dal, köszi.
A gzip-támogatást a $_SERVER['HTTP_ACCEPT_ENCODING']-ban kell ellenőrzi pl strpos()-zal, ugye?
-
válasz
Tele von Zsinór #2988 üzenetére
Ja, bocs, arra gondoltam - ob_get_clean() - csak kicsit át kellett írkálnom.
Tömörítést azt hittem maga a server csinálja ha megadom a headert, de úgy néz ki hinni a templomban kell.Volt egy kis probléma a servernél, hogy hozzáadta az Etaghoz, hogy "-gzip", s emiatt sose volt érvényes Etag. Ha viszont megadtam a gzip headert, akkor nem csinált ilyet.
Nade várj, ha meg gzencode-t nyomok a $body-ra akkor az nem tetszik neki, és nem kódolja ki, a tömörítetten jeleníti meg. Akkor hogy is van ez?
-
Találtam egy tök jó, de még egyszerűbb HTTP-alapú tartalom-cachelési módszert, gondoltam megosztom, mert semmi az egész, mégis valamivel gyorsabb lesz adott lap - pontosabban nem küldi el még egyszer az egész oldalt, ha nem változott és már a böngésző berakta a gyorstárba.
ob_start(); // kimenet-pufferelés
// (nem küldi el a kimenetet azonnal a böngészőnek)
// oldalgenerálás
// sok sok szkript
// HTML generálás
// stb-stb
$body = ob_get_end(); // puffer változóba ürítése
$etag = md5($body); // oldal md5 kivonata
header("Etag: $etag"); // md5 elküldése böngészőnek
header("Cache-Control: private"); // cachelje az oldalt a böngésző
header("Content-Encoding: g-zip"); // gzip tömörítés
// ha egyezik az md5 kivonat a cachelt változatéval,
// akkor ne küldje el az eredményt hisz ugyanaz...
if (trim($_SERVER['HTTP_IF_NONE_MATCH']) == $etag) {
header("HTTP/1.1 304 Not Modified");
} else {
echo $body;
} -
na ezt hogy csináltam?
-
tripla, úristen..
-
dupla...
-
Kicsit off, de vajon mitől lehet az, hogy ha egy fájlt egyszerre akarok többször is más paraméterekkel lekérni a szerverről, akkor a szerver fagyással válaszol?
Már 6 órája ezzel sz@raxom, s még mindig nem sikerült megoldani, a megrendelő meg türelmetlen.
Konkrétan az van, hogy adott egy weboldal aminél minden az index.php-n keresztül jön: css, js, képek, az ATW-nél meg gyakorlatilag kifagy az egész oldal, hacsak nem <head> nélkül töltöm be az oldalt, azaz stíluslapok nélkül. Illetve régebbi gépeken is jól megy, mert azok nem kérik olyan gyorsan egymásutánban le a stíluslapokat, stb.
Amúgy ott a PHP CGI-ként fut. Lehet ezért szar? Egyszerre kb 8x kéri le az index.php-t, de kifagy az oldal, vár a szerverre, így használhatatlan az oldal.
Egyébként a saját gépemen vmware-ben egy alapkonfigos ubuntu serveren simán megy az oldal, azon fejlesztettem...
-
válasz
Tele von Zsinór #2981 üzenetére
Köszi, de headernél sokat kéne átírni, metatagot szintén lex@rta, ám közbe rájöttem:
ini_set('default_charset', 'UTF-8')
-
Báhááá
Valaki tudja, hogy lehet az ATW-nél átállítani, hogy alapérelmezetten UTF8-ban küldje a böngészőnek a cuccost? Hiába állítom be htaccess-ben hogy AddDefaultCharset UTF-8, le se sz@rja.
-
PÜk rePÜltek.
-
válasz
Louloudaki #2970 üzenetére
Önnek privát üzenete érkezett.
-
válasz
Sk8erPeter #2951 üzenetére
Valami ilyesmire lesz neked szükséged:
$image = '010101110101011010111010101011011110';
$file = 'kép.jpg';
$name = substr($file, 0, strrpos($file, '.')); // kiterjesztés levágása
$file = $name;
$i = 1;
while(file_exists($file)) {
$i++;
$file = $name . '_' . $i . '.jpg';
}
file_put_contents($file, $image);Most hirtelen hasból ennyire futotta, lehetne még rajta okosítani.
-
Ezt meg tudná valaki magyarázni?
19 millisecundumba telik a fájl lockolása, de általában ennél 2-3x több szokott lenni. Mi az istent csinál ennyi ideig? Ez rengeteg. Qrvalassúak emiatt a scriptjeim, valamikor felmegy 5-600 (!) ms-ra is ez a cucc.
Ha nem használok flock()-ot, akkor meg a fopen()-nél, touch()-olásánál, vagy akár session_start()-nál, stb helyeken oszlik széjjel ez a rengeteg idő.
Na de miért?
-
válasz
PazsitZ #2944 üzenetére
Nálam index.php is rendesen tölti be, meg a másik .html fájl is, a helyi virtuális LAMP serveren.
Szerver-beállítások nincsenek buzergálva? A prototype egy 120kB-os hatalmasság, lehet a mérete miatt nem akarja kiszolgálni?
Bár elvileg erre kéne kapni egy szép hibaüzenetet.
-
-
-
fsockopen() függvénnyel:
(a függvények - kicsit átírva - a php.net-ről származnak)
<?php
/*
* A választ adja vissza fejlécek nélkül.
*/
function parseHttpResponse($content=null) {
if (empty($content)) { return false; }
// split into array, headers and content.
$hunks = explode("\r\n\r\n",trim($content));
if (!is_array($hunks) or count($hunks) < 2) {
return false;
}
$header = $hunks[count($hunks) - 2];
$body = $hunks[count($hunks) - 1];
$headers = explode("\r\n",$header);
unset($hunks);
unset($header);
if (!validateHttpResponse($headers)) { return false; }
if (in_array('Transfer-Encoding: chunked', $headers)) {
return trim(unchunkHttpResponse($body));
} else {
return trim($body);
}
}
/*
* Sikerült-e?
*/
function validateHttpResponse($headers=null) {
if (!is_array($headers) or count($headers) < 1) { return false; }
switch(trim(strtolower($headers[0]))) {
case 'http/1.0 100 ok':
case 'http/1.0 200 ok':
case 'http/1.1 100 ok':
case 'http/1.1 200 ok':
return true;
break;
}
return false;
}
/*
* ha darabolt az eredmény, akkor össze kell rakni, különben hülye számok és betűk jelennek meg a tartalomban
*/
function unchunkHttpResponse($str=null) {
if (!is_string($str) or strlen($str) < 1) { return false; }
$eol = "\r\n";
$add = strlen($eol);
$tmp = $str;
$str = '';
do {
$tmp = ltrim($tmp);
$pos = strpos($tmp, $eol);
if ($pos === false) { return false; }
$len = hexdec(substr($tmp,0,$pos));
if (!is_numeric($len) or $len < 0) { return false; }
$str .= substr($tmp, ($pos + $add), $len);
$tmp = substr($tmp, ($len + $pos + $add));
$check = trim($tmp);
} while(!empty($check));
unset($tmp);
return $str;
}
$host = "eu.wowarmory.com";
$file = "/guild-info.xml?r=Nordrassil&gn=Solidarity";
$user_agent_string = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1';
$fp = fsockopen($host, 80, $errno, $errstr, 30);
if (!$fp) {
die("$errstr ($errno)<br />\n");
} else {
$out = "GET $file HTTP/1.1\r\n";
$out .= "Host: $host\r\n";
$out .= "User-Agent: $user_agent_string \r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
$content = '';
while (!feof($fp)) {
$content .= fgets($fp);
}
fclose($fp);
}
echo parseHttpResponse($content); -
válasz
Balint133 #2905 üzenetére
Oh, basszus, bocs, elnéztem, fsockopen()-nel lehet felülbírálni csak a user agent stringet.
Remélem a fsockopen() függvény nincs letiltva.
Mindjárt írom a scriptet.
szerk: Oh mégis megy azzal? Akkor jó. Pedig már majdnem kész voltam az fsockopen()-es verzióval.
Nincs mit!
Azért leírom minnyá a fsockopen()-féle verziót is, lehet majd másnak jól jön.
-
válasz
Balint133 #2902 üzenetére
Hm. Nekem megy a curl-ös szkripted.
tettem a végére egy print_r($output); sort és lám: [link]
Szóval úgy néz ki igazam volt.
szerk: beírtam useragent-nek, hogy "PHP ds,fjhadgjhd" és máris HTML-t kaptam. Szóval ini_set()-elj, vagy még van egy másik megoldás is itt, ha tiltva van az init_set() függvény.
-
válasz
Balint133 #2902 üzenetére
Húb@sszameg!
Ez esetén, lehet arról van akkor szó, hogy ha a browser támogatja az xsl-t, akkor ezt az xml-t küldi el - így kevesebb procit zabál. De mivel az fopen()-be a user agent string "PHP", ezért már eleve transzformálva adja az oldalt, mert ez egy ismeretlen "browser", ami lehet nem tud xsl-t.
javaslat:
ini_set('user_agent',[írd ide a mozilláét]);
S akkor lehet menni fog.
szerk: ja most nézem curllel se megy...
Lehet még valami plusz infó kell neki a böngészőről... -
válasz
Balint133 #2900 üzenetére
curl meg rendesen beolvassa onnan? Vagy azt nem is próbáltad? Most ezt nem értem. Mert ha azt nem próbáltad, akkor szinte 100% hogy Javascript.
Szóval nagyon javascript gyanús a kód, minnyá meglesem.
A header()-rel kapcsolatban meg hülyeséget írtam, mert követi azokat az fopen().
szerk: nem találtam semmit...
Tiltsd le a JS-t a böngésződben és úgy nézd meg mit kapsz.
szerk2: Az oldalon nincs olyasmi pl, hogy "katt ide ha nem indul el a letöltés"?
-
válasz
bejmuller #2897 üzenetére
akkor a readfile() függvényt alkalmazod az adott fájlra - ugyanaz mint az include, csak nem értelmezi a php-t.
(#2898) Balint133: Hmmm... akkor lehet header()-es forwarding van, és az fopen nem követi azt. Mindenesetre nézd meg a nyers forráskódot, amit az fopen() kiad, hogy mit tartalmaz
-
válasz
Balint133 #2893 üzenetére
fopen() függvény? ez jó URL-re is, meg sokmindenre - feltéve hogy a szolgáltató engedi.
Vagy esetleg FTP függvények?Amúgy PHP4 van ott csak? Mert látom a legfapadosabb xml-parsert használod. Ja és amúgy parse-re van egy szép magyar szó: ÉRTELMEZ.
(#2892) t-shirt: SWF nem lenne jó? GIF-szerkesztőről még nem hallottam - szerintem a liszensz miatt nem is lenne ingyen.
-
válasz
Louloudaki #2888 üzenetére
Pedig eléggé beszédes neve van.
number_format( $szám, $tizedesek_száma, $tizedes_jel, $ezres_elválasztó ) -
válasz
pumatom #2884 üzenetére
A dreamweaver jó php-re is, de csak nagyon minimálisan támogatja. Ha jó autokieges szerkesztőt akarsz, akkor az (eclipse alapú) Aptana Studio jó választás lehet. Nem találtam még jobbat nála. Bár ezt majd inkább akkor ajánlanám, ha pl már eljutottál az OOP-ig, mert azelőtt szvsz még csak zavarna a sok feature.
-
válasz
Tele von Zsinór #2881 üzenetére
Tehát nem notepadot.
Amúgy mostmár inkább biztosra megyek és a virt gépről nyomulok nano-val.
-
válasz
Tele von Zsinór #2877 üzenetére
Megvan a hiba. Rájöttem.
TILOS windózból piszkálni a linuxos php.ini-t, mert más a sorvége karakter, s így a PHP nem fogja beolvasni a konfigurációs paramétert. Samba serveren keresztül, win-féle megosztással piszkáltam anno. Kitöröltem a problémás deklarációk körül a sorközöket, majd visszaírtam, és lám...
-
válasz
Tele von Zsinór #2877 üzenetére
Igen, mert ha mást állítok akkor az állítja.
Valahol valami override lehet, de nemtom hol az istenbe... Apache egyik attribútumát is piszkáltam, ami idetartozik, de az is jó.
-
Lusta vagyok megcsinálni, sokat kell konfigolni, meg az új gépnél is szakadozik a net, lehet a server 2008 r2 a baja, mert össze szokott veszni a routerral, s így az utóbbi gyakran elérhetetlen.
Restart segít csak (ami nagyon jó, mert pont azért raktam fel servert, mert nem szoktam leállítani a gépet
). De az már volt amúgy, s úgyis sz@r.
Post, upload max méret állításra valami?
-
Ejjj, ez a vmware alatti intrepid valamiért elég bugosnak tűnik, lehet ha csinálok egy újat akkor megjavul. A vmware sírt amikor újra beraktam virtuális gépet windows reinstall után, s ez a virtuális ubu server is elég fluktuáló módon kap internetet, de mellette van egy NATos virtuális hálókártya is, az meg megy rendesen.
Elég régi ez a maChina, szóval lehet nem a php a ludas, hanem a vmware vagy én. Csinálok egy másik vm-et oszt kiderül. -
válasz
Tele von Zsinór #2871 üzenetére
Ja valamilyen szinten igazad van, csak a php nem szól semmit ("csak" annyit hogy a superglobals tömbök üresek), mindegy a hibát sikerült kezelni.
Viszont most az szúrja a szemem, hogy a php.ini-be a post és az upload max méretére akármit is állítok be, az előbbi 8M az utóbbi 2M lesz. Na ez mitől van? Ez már tényleg idegesítő.
Mást nem állítottam, csak a memory limitet 256M-re.
Amúgy Ubuntu serveren megy a cucc.
Szerk: Bazz, kikapcsolni se lehet a feltöltést a php.ini-ből... Nem reagál semmit. Más állítása meg megy, csak ezek nem.
-
XDebug-nál le lehet valahogy lőni, hogy ne rinyáljon ha meghaladja a POST mérete az ini-ben meghatározottat?
Ha leradírozom, nem rinyál.
-
válasz
Tele von Zsinór #2868 üzenetére
Nemhogy kevéssé biztonságos, egyenesen veszélyes: Akárki beleírja a $_GET['oldal']-ba, hogy http://xyz.hu/hack, aztán rögtön külső php-kódot futtat, szevasz.
Szűrni kell az inputot, pl így:
$oldalak = array('hirek', 'cikkek', 'tesztek', 'forum');
if (isset($_GET['oldal']) && in_array($_GET['oldal'], $oldalak) {
require_once($_GET['oldal'] . '.php');
}
Új hozzászólás Aktív témák
Hirdetés
- Asztali PC , i7 9700K , RX 5700 XT , 32GB DDR4 , 500GB NVME , 1TB HDD
- Dell Inspiron 5406 2-in-1i5-1135G7 16GB DDR4 3200 512GB NVME 14" FHD Érintőkijelző W11Pro
- Eladó MacBook Pro 14" M1 Pro (2021) 16/512 99% akku Makulátlan állapotban!
- Újszeru GIGABYTE G5 - 15.6" FullHD 144Hz - i7-13620H - 48GB - 1TB - RTX 4050 - Win11 - 1,5 év gari
- Eladó garanciás,új állapotu projektorom kihasználatlanság miatt!
- 124 - Lenovo Yoga Pro 7 (14IMH9) - Intel Core Ultra 9 185H, RTX 4060 (48 hónap garancia!) (ELKELT)
- ÁRGARANCIA!Épített KomPhone i9 14900KF 32/64GB RAM RTX 5070Ti 16GB GAMER PC termékbeszámítással
- DOKKOLÓ BAZÁR! Lenovo, HP, DELL és egyéb más dokkolók (TELJES SZETTEK)
- AKCIÓ! MSI Z690 i7 12700K 32GB DDR4 1TB SSD RX 6800 16GB Phanteks P600S Cooler Master 750W
- 0% THM 3 havi részlet! Beszámítás, 27% áfa, Sapphire Nitro+ RX 9070XT 16GB készletről
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest