Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemZamknutoVyřešeno rozlišení obrazovky v PHP

Stáhl jsem si nějaký script na zjištění rozlišení v PHP.
http://regretless.com/scripts/basics/get_screen_wid th_height.php
Funguje to tak, že na klientově počítači se zjistí rozlišení pomocí javascriptu a to se odešle na server. PHP si to vybere z cookies.

Všechno je v pořádku, ale pokud klient má vypnutý javascript, nebo cookies, nebo jde přes anonymní proxy, tak se tento script stále volá dokola (zacyklí se to).

Potřeboval bych jednu z těchto dvou možností:
1. Aby se to necyklilo (nejlépe).
2. Pokud nemá zapnutý javascript, či cookies, či to jde přes nějakou anomynizační proxy, aby se to neprovedlo.

Nevím, jestli jsem to srozumitelně napsal. Prostě potřebuju zjistit rozlišení a pokud to nějakým způsobem nejde, aby to nic neudělalo.

Předmět Autor Datum
Pokud má klient vypnutý JS, tak jaké hodnoty rozlišení se předají PHP? Je tam nějaké otestování rozs…
host 29.04.2006 15:14
host
Zacyklí se mi tento script (v php): <? if(isset($HTTP_COOKIE_VARS["users_resolution"])) $screen_res…
Matej 29.04.2006 15:28
Matej
Prostě potřebuju u uživatele provést: var my_resolution = screen.width + "x" + screen.height; ode…
Matej 29.04.2006 15:17
Matej
Ak to chceš len zobraziť, tak si to nemusíš ani posielať na server. Najjednoduchšie je asi použiť do…
los 29.04.2006 15:38
los
No ukládat rozlišení do cookies není úplně nejmoudřejší. Protože jestli jsem to pochopil správně tak…
Flash_Gordon 30.04.2006 01:27
Flash_Gordon
Já bych to udělal tak, že bych si dal do stránky skryté počítadlo z TopListu a na to, jaké, kdo měl…
Kráťa 30.04.2006 01:32
Kráťa
Tak si s tím od včerejška hraju. Mám to udělaný tak, že mám script index.php ve kterém mám include(…
Matej 30.04.2006 15:31
Matej
Tak bys tady měl ten skript zveřejnit. To čeho chceš dosáhnout je běžně praktikovaná rutina a problé…
Flash_Gordon 30.04.2006 15:52
Flash_Gordon
Zacyklí se to na klientské straně a je to přesně ten script, co jsem zveřejnil nahoře. Jinak jsem t…
Matej 30.04.2006 16:22
Matej
A hlavně je to bez cookies 3-[ poslední
Matej 30.04.2006 16:23
Matej

Zacyklí se mi tento script (v php):

<?
if(isset($HTTP_COOKIE_VARS["users_resolution"]))
    $screen_res = $HTTP_COOKIE_VARS["users_resolution"];
    // Tudy to jde podruhý, pokud se nastaví správně cookies
else 
    // Tudy to jde prvně (uživatel nemá v cookies nic nastaveno)
    // pokud nemá zapnutý cookies, tak jde vždy sem (zacyklení)
{
?>
<script language="javascript">
<!--
function writeCookie()
{
    var today = new Date();
    var the_date = new Date("December 31, 2023");
    var the_cookie_date = the_date.toGMTString();
    var the_cookie = "users_resolution="+ screen.width +"x"+ screen.height;
    var the_cookie = the_cookie + ";expires=" + the_cookie_date;
    document.cookie = the_cookie;
    // tady se to musí znovu načíst, jinak nedostanu hodnoty do php
    // to je asi hlavní nedostatek, stránka musí být načtená dvakrát po sobě
    location = 'get_resolution.php';
}
writeCookie();
//-->
</script>
<?
}
?>

Prostě potřebuju u uživatele provést:

var my_resolution = screen.width + "x" + screen.height;

odeslat na server bez nutnosti spolupráce s uživatelem. Uživatel aby pak uviděl výsledek na obrazovce. A taky, aby si myslel, že to bylo na první pokus (nemusel dělat reload stránky, nebo něco podobnýho).
Zkouším to přes cookies, ale to asi nebude to nejlepší řešení.

Ak to chceš len zobraziť, tak si to nemusíš ani posielať na server. Najjednoduchšie je asi použiť document.write počas nahrávania stránky (alebo pridať ten text po nahratí stránky cez DOM).

Ak to chceš poslať na server a nepotrebuješ odozvu, stačí napr.:

new Image ().src = "skript.php?w=" + screen.width + "&h=" + screen.height;

Tu môže byť problém kešovanie, pretože ak nebude skript.php posielať správne hlavičky, tak sa môže stiahnuť z cache. Ak sa Ti nechce posielať hlavičky, dá sa to jednoducho obísť tak, že pridáš do url ešte jednu premennú vždy s jedinečnou hodnotou (napr. aktuálny čas v sekundách).

Ak potrebuješ aj nejakú odozvu zo servera, tak potom chceš použiť AJAX, ale myslím, že v tomto prípade ho nepotrebuješ.

No ukládat rozlišení do cookies není úplně nejmoudřejší.
Protože jestli jsem to pochopil správně tak prohlížeč stejně musí nejprve toto nastavení odeslat na server a pokud náhodou uživatel rozlišení změní tak bude mít stránky neoptimalizované.
Ale to jsem se nedočetl ;-) .
Takže v takovém případě už je v podstatě jedno jestli to rozlišení bude vždy při zavolání stránky stahovat čerstvě z prohlížeče.
Více to jako webový laik komentovat netroufám.

Ještě ohledně toho načtení nadvakrát.
Není problém založit proměnnou v nastartované session a počítat kolikrát byla stránka načtena.
Lze tak třeba zjistit, že stránka byla načtena již podruhé a stále nebyl schopen prohlížeč odeslat data o rozlišení atd....

Tak si s tím od včerejška hraju.
Mám to udělaný tak, že mám script index.php ve kterém mám

include("get_resolution.php");

Nejprve jsem zkoušel na klientské straně zavést proměnou x (byla vytvořena v hlavním scriptu index.php), kterou jsem inkrementoval v get_resolution.php a tím jsem zjistil kolikrát byl reloadnut. Skutečně se to nezacyklí, ale bohužel zůstane to viset na tom scriptu get_resolution.php. Nepředá se řízení zpět do index.php. Vůbec nechápu proč, neboť jej neukončuju, pouze pokud je splněná podmínka, že to proběhlo víckrát, tak se přestane cookies používat.

Zkusil jsem i ten nápad z session, ale nakonec se ukázalo, že to vede k obdobným výsledkům.

Zkoušel jsem i nejdřív testovat, zda počítač má zapnutý cookies, ale abych to zjistil, tak zase musím stránku reloadnout. Takže jsem tam, kde jsem byl předtím.

Nakonec ztrácím chuť použít na to cookies. Asi to není vůbec dobré řešení.

Má někdo nějaký jiný nápad, jak to dostat na server. Mělo by to jít pomocí obrázku, ale nevím jak rozlišení monitoru propašovat v javascriptu do url na klientské straně. Pak bych si to měl přečíst na serveru pomocí $_GET. Jestli to jde. Hledám nějaký příklad (hotový jednoduchý script), ale nemůžu nic najít.

Tak bys tady měl ten skript zveřejnit.
To čeho chceš dosáhnout je běžně praktikovaná rutina a problém, který popisuješ může způsobovat jen programátorská nedomyšlenost = krpa.
Asi by jsi měl uvést přesně skripty, které se údajně zacyklí.
Provádění skriptu PHP lze ukončit příkazem exit; nebo die();

Pokud i přesto je skrip volán stále dokola tak už to může být snad jen vyloženě na volání na klientské straně.

Zacyklí se to na klientské straně a je to přesně ten script, co jsem zveřejnil nahoře.

Jinak jsem to vyřešil pomocí javascriptu na klientské straně:

<img name="obr" src="1x1.php">
<script language="javascript">
  obr.src ="1x1.php?w=" + screen.width + "&h=" + screen.height;
</script>

A pomocí $_GET na serverové straně:

if (isset($_GET['w']))
  {$param_w = $_GET['w'];}
else
  {$param_w = 0;}

if (isset($_GET['h']))
  {$param_h = $_GET['h'];}
else
  {$param_h = 0;}

A je to!

Zpět do poradny Nahoru