ugrás a tartalomhoz

PHP átalakítása Javascripté

amorf · 2012. Május. 1. (K), 02.32
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:

<?
$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
 
1

Mit csinál?

Poetro · 2012. Május. 1. (K), 08.24
Mi lett volna, ha leírod, hogy a fenti szkripted mit csinál? Csak mert nagyon nem optimális megoldás, rosszak a változónevek, és nincs a kódban egyetlen megjegyzés sem a műküdésre vonatkozólag, ezért nagyon nehéz elsőre kitalálni, hogyan lehetne e ezt szépen átalakítani. Főleg azért is, mert a fenti kódnak nincsen semmilyen formában vett kimenete. A fenti nem egy függvény, ami visszaadna értékeket, valamint nem is produkál kimenetet se fájlba, se szabványos kimenetre, se sehova.

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.
2

A jelenlegi php verzió nagyon

Poetro · 2012. Május. 1. (K), 10.13
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.

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 a script.example.com oldalon lévő, sem a valami.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.
3

Miért?

Pepita · 2012. Május. 1. (K), 12.26
szeretném, hogy ez a folyamat cliens oldalon működjön, ne kelljen webes forrásból betöltődnie a php scriptnek
  • Nem ártana, ha az okot is leírnád, mert lehet, hogy nem a legjobb irányba mentél. Lehet, hogy mégis szerveroldalon jobb megoldani.
  • Fenti php kódból - számomra - nem derül ki, hogy mi a feladat, ill. miért éppen php.
  • Légyszíves színezd a programkódokat.
  • (Kliens = client)
4

Magyarázat.

amorf · 2012. Május. 1. (K), 14.40
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 "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.
5

Leírtam

Poetro · 2012. Május. 1. (K), 16.28
Én leírtam a lehetőségeket. Amennyiben azok nem tiszták, várok konkrét kérdést.
6

XML

Pepita · 2012. Május. 2. (Sze), 11.45
Ez - számomra - egy XML-feldolgozásnak tűnik, amit a PHP-szkriptedben sem hatékonyan oldottál meg. A <?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.).