PHP átalakítása Javascripté
Sziasztok!
Szeretném a segítségeteket kérni abban, hogy egy meglévő php scriptet valahogy átforgassatok javascripté.
Az alap koncepció annyi lenne, hogy van egy php file amit egy másik személy szolgáltat. Ennek a file-nak a tartalmából kellene kiolvasson a script adatokat (számokat, illetve szöveget). Hogy egész pontos legyek meghatározott sorból meghatározott karakterek között lévő értéket kellene, hogy kiolvasson illetve megjelenítsen a script.
A jelenlegi php verzió nagyon jól működik, de szeretném, hogy ez a folyamat cliens oldalon működjön, ne kelljen webes forrásból betöltődnie a php scriptnek.
A php script egy része:
Tudom nem a legszebb, de eddig megfelelt. Szeretném ha segítenétek benne, hogy ez javascriptként működjön.
Előre is köszönöm a segítségeteket.
Üdv:
amORf
■ Szeretném a segítségeteket kérni abban, hogy egy meglévő php scriptet valahogy átforgassatok javascripté.
Az alap koncepció annyi lenne, hogy van egy php file amit egy másik személy szolgáltat. Ennek a file-nak a tartalmából kellene kiolvasson a script adatokat (számokat, illetve szöveget). Hogy egész pontos legyek meghatározott sorból meghatározott karakterek között lévő értéket kellene, hogy kiolvasson illetve megjelenítsen a script.
A jelenlegi php verzió nagyon jól működik, de szeretném, hogy ez a folyamat cliens oldalon működjön, ne kelljen webes forrásból betöltődnie a php scriptnek.
A php script egy része:
<?
$tomb = file("http://valami.com/files/valami.php");
$status = array("<status>","</status>");
$online = array("<online>","</online>");
$limit = array("<limit>","</limit>");
$wgtimer = array("<wg_timer>","</wg_timer>");
$wgwartime = array("<wg_inwartime>","</wg_inwartime>");
$wgowner = array("<wg_owner>","</wg_owner>");
$sorszam = -1;
foreach ($tomb as $sor) {
$sorszam++;
//first
if (strstr($sor, $online[0]) && strstr($sor, $online[1])&&($sorszam==8))
$first_online = str_replace($online, "", $sor);
if (strstr($sor, $limit[0]) && strstr($sor, $limit[1])&&($sorszam==10))
$first_limit = str_replace($limit, "", $sor);
if (strstr($sor, $status[0]) && strstr($sor, $status[1])&&($sorszam==9))
$first_status = str_replace($status,"-", $sor);
if (strcmp($first_status,"-Online-")==0)
$first_online=0;
if (strstr($sor, $wgtimer[0]) && strstr($sor, $wgtimer[1])&&($sorszam==13))
$first_wgtimer = str_replace($wgtimer, "", $sor);
if (strstr($sor, $wgowner[0]) && strstr($sor, $wgowner[1])&&($sorszam==11))
$first_wgowner = trim(str_replace($wgowner,"", $sor));
if (strstr($sor, $wgwartime[0]) && strstr($sor, $wgwartime[1])&&($sorszam==12))
$first_wgwartime = trim(str_replace($wgwartime,"", $sor));
}
?>
$tomb = file("http://valami.com/files/valami.php");
$status = array("<status>","</status>");
$online = array("<online>","</online>");
$limit = array("<limit>","</limit>");
$wgtimer = array("<wg_timer>","</wg_timer>");
$wgwartime = array("<wg_inwartime>","</wg_inwartime>");
$wgowner = array("<wg_owner>","</wg_owner>");
$sorszam = -1;
foreach ($tomb as $sor) {
$sorszam++;
//first
if (strstr($sor, $online[0]) && strstr($sor, $online[1])&&($sorszam==8))
$first_online = str_replace($online, "", $sor);
if (strstr($sor, $limit[0]) && strstr($sor, $limit[1])&&($sorszam==10))
$first_limit = str_replace($limit, "", $sor);
if (strstr($sor, $status[0]) && strstr($sor, $status[1])&&($sorszam==9))
$first_status = str_replace($status,"-", $sor);
if (strcmp($first_status,"-Online-")==0)
$first_online=0;
if (strstr($sor, $wgtimer[0]) && strstr($sor, $wgtimer[1])&&($sorszam==13))
$first_wgtimer = str_replace($wgtimer, "", $sor);
if (strstr($sor, $wgowner[0]) && strstr($sor, $wgowner[1])&&($sorszam==11))
$first_wgowner = trim(str_replace($wgowner,"", $sor));
if (strstr($sor, $wgwartime[0]) && strstr($sor, $wgwartime[1])&&($sorszam==12))
$first_wgwartime = trim(str_replace($wgwartime,"", $sor));
}
?>
Tudom nem a legszebb, de eddig megfelelt. Szeretném ha segítenétek benne, hogy ez javascriptként működjön.
Előre is köszönöm a segítségeteket.
Üdv:
amORf
Mit csinál?
De a függvényeket, amiket használni érdemes fel tudom sorolni:
String.prototype.indexOf, String.prototype.slice, String.prototype.replace. Ezen kívül szükséged lesz valamilyen ciklusra, mondjuk for illetve while.
A jelenlegi php verzió nagyon
Azt ugye tudod, hogy kliens oldali JavaScript-nek milyen korlátozásai vannak? Ugyanis a böngészőben van egy azonos domain korlátozás. Azaz a szkript, ami a
www.example.com
domainről kiszolgált oldalon van, nem tud betölteni AJAX segítségével sem ascript.example.com
oldalon lévő, sem avalami.com
-on levő oldalon levő adatot. Arra, hogy harmadik féltől tölts be adatokat, több lehetőséged van, de vagy neked, vagy a harmadik félnek módosításokat kell végeznie.Először is készíthetsz egy proxy-t, amivel a távoli fájlt a saját domained alatt szolgálod ki. Vagy megkérheted a harmadik félt, hogy JSONP-ként szolgálja ki az adatokat. Vagy pedig CORS-t használsz, de ehhez szintén kell a harmadik félnek módosításokat csinálnia. Ha nincs befolyásod a harmadik félre, vagy eleve nem rendelkezik a fenti szolgáltatásokkal, akkor marad a proxy-s megoldás, de fontos, hogy ekkor is érdemes egyeztetni a harmadik féllel, hogy te az általa kínált adatokat elérhetővé teheted-e a saját domained alatt.
A következő dolog, amit nem értek, hogy ha szemmel láthatólag egy XML fájlt dolgozol fel, akkor miért nem mint XML dolgozod fel? Könnyebb, kényelmesebb és kisebb a hibázási lehetőség.
Miért?
Magyarázat.
A "http://valami.com/files/valami.php" -ben egy másik fél által folyamatosan frissített adatok vannak. Így:
<realm>
<id>12</id>
<name>first</name>
<ip>87.229.98.127</ip>
<port>18585</port>
<online>3388</online>
<status>Online</status>
<limit>5500</limit>
<wg_owner>1</wg_owner>
<wg_inwartime>0</wg_inwartime>
<wg_timer>3455333</wg_timer>
</realm>
...
A jelenlegi script megnézi az adott sorban lévő "<limit>,</limit>" között elhelyezkedő értéket (jelen esetben az érték 5000). Az értéket "<?php echo $first_limit; ?>" "utasítással" íratom ki.
Van e lehetőség ezt javascriptben megoldani? Mert ha második féltől származó adatokat beolvastatni nem lehet vele, akkor halott az ügy.
Igyekszem érthető lenni, de sajnos az efféle dolgokhoz alig értek. :S Az én feladatom a projectbe a fenti kódot elhelyezni illetve grafikai elemekkel ellátni.
Köszönöm a segítséget.
Leírtam
XML
<?php echo $first_limit; ?>
-féle megjelenítés teljesen jó a megfelelő helyen. De az XML adatok feldolgozására sokkal alkalmasabb lenne a PHP DOM osztályait használnod. Olvasnivaló.Azt pedig továbbra sem értem, hogy mindezt miért kliensoldalon akarod megoldani. Sokkal jobb szerveroldalon előállítani a kliens számára "fogyasztható" adatot/tartalmat. Pláne akkor, ha az említett XML pl. csak óránként frissül, akkor a feldolgozós bulit te is csak óránként futtatod, a látogatóknak meg cache-eled a feldolgozott cuccot. Ha a kliensnél dolgozod fel, akkor a teljes nyers adatmennyiséget le kell töltenie, és az ő hardver/szoftver konfigurációjától függ a feldolgozás (sebesség, memória, stb.).