ugrás a tartalomhoz

php asp összekapcsolása

zsmeczner · 2008. Jún. 9. (H), 11.14
Hello

Mint a címből is kiderül két rendszert szeretnék összekapcsolni.

Van egy asp (iis) alatt működő alkalmazásom egy webszerveren.
Van egy másik php-s webszerverem az egyik szolgáltatónál.

Hogyan lehet azt megoldani, hogy ha leböngészem a http://phpszerver/index.php-t
akkor töltődjön be a http://aspszerver/default.aspx

Eddig nincs is gond, csak amikor a default.aspx-en nyomok egy button klikket akkor az mindenképpen a phpszerveren keresi az esemény kezelőjét.

Összefoglalva tehát azt szeretném, hogy nem látszódjon az aspszerver neve sem a location sorban sem a page view source-ban.

Ha valaki tud, szívesen várom az infókat.

üdv.
mzsolt
 
1

CURL

Poetro · 2008. Jún. 9. (H), 12.13
Minden lekérdezést továbbíts CURL-el az ASP szerverre. POST, GET kéréseket is, valamint a COOKIE-t is amennyiben szükséges, és okosan kell kezelni a továbbításokat is.
3

curl hogyan

zsmeczner · 2008. Jún. 9. (H), 12.36
Hello,
Így néz ki az index.php file

<?php

$url = "http://apsszerver/default.aspx";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url); 

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_TIMEOUT, 5);

curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_HTTPGET, 1); 
curl_setopt($ch, CURLOPT_HEADER, 0);

$result = curl_exec($ch);
curl_close($ch);

echo $result;

?>
Még valami nem ok, mert a default.aspx betöltődik szépen, viszont ha nyomok rajta egy gomb klikket, akkor a hívó oldalon keresi a default.aspx-et. (ugyanis a hívott formnak az action-ra a default.aspx)
Ezt nem tudom miért, illetve hogyan lehet beállítani.
4

Curl nem jó erre

zila · 2008. Jún. 9. (H), 13.59
Próbáld inkább a már említett apache mod_proxy-t.

A curl csak egy böngészőt emulál, a linkeket is preparálnod kellene minden letöltött oldalon, az meg elég macerás (bár egy jó regexp csodákat tehet...)
5

link macerálás?

zsmeczner · 2008. Jún. 9. (H), 14.09
Azt meg hogyan.
Nyitott vagyok minden megoldásra.
Az asp szerverem mindössze 4 darab aspx oldal van.
Tehát nem túl nagy az alkalmazás.

mzsolt
6

preg_replace

Poetro · 2008. Jún. 9. (H), 14.39
<?php
//...
$result = curl_exec($ch);  
curl_close($ch);  
$result = preg_replace(
  array(
    '!/[a-z1-9_\-]+\.aspx\??!ie',   // Lecseréljük a .aspx hívást egy index.php kérésre
    '!(https?://)apsszerver/!i' // Lecseréljük a domain-t a php szerverre
  ),
  array(
    '"index.php?reqaspx=".urlencode("$0")',     // Az eredeti aspx átadása paraméterben 
    '$1phpszerver/',
  ),
  $results);
echo $result;
?>
8

Miért nem relatív?

siposa · 2008. Jún. 9. (H), 19.18
Azért az egy jó kérdés, hogy az ASP progi miért pakolja bele a teljes abszolút URL-eket a HTML forrásba, és miért nem relatívakkal dolgozik...
9

Mindegy

zila · 2008. Jún. 9. (H), 23.09
Ha relatívval dolgozik az sem jó, hiszen az asp arra hivatkozik ami az ő szerverén van, a kérdező meg egy másik szerverre (php) akar hivatkozni. A kérés a php szerverre fut be, erre az asp szerverről curl-lel letölti a dokumentumot.
Az eredményben nyilván lesznek hivatkozások (css/image/javascript/akármi)
Pl:
ASP szerver:
<img src="/images/my_asp_image.png">

PHP szerver:
Nincsen /images/my_asp_image.png kép
Az ilyen hivatkozásokat kell elkapni a php szerveren, letölteni az asp szerverről és megjeleníteni.

Ha jól sejtem az asp szerver nem érhető el a nagyvilág felől és ehhez kell ez a megoldás, de erre van a mod_proxy és még csak kódolni sem kell. Semmit. Sehol.
10

Világos

siposa · 2008. Jún. 10. (K), 05.30
Az világos, hogy a relatív URL magában nem old meg semmit, proxizni kell. De akkor legalább lehet értelmesen proxizni, és nem kell az abszolút URL-ek miatt tökönszúrni magadat. :)

Amúgy én az IIS-en beraknám az alkalmazást egy alkönytárba (/app/*), valszeg könnyebb szétválogatni így az oda menő kéréseket.
11

majdnem

zsmeczner · 2008. Jún. 11. (Sze), 11.45
Szóval beraktam a kódot az index.php be de még mindig a php szerveren keresi a default.aspx-et.
Az ASP szerver egyébként relatív url-ekkel dolgozik.

Még gyötröm magam.
A mod-proxy szerintem azért nem megy nekem, mert ha jól tudom a tárhely szolgáltatók nemigen örülnek az ilyennek.
Sajna nem nálam van a php szerver, csak fel tudok tenni oda futtatható php állományokat.

Ha van még ötlet, itt vagyok.
mzsolt
12

itt tartok

zsmeczner · 2008. Jún. 11. (Sze), 12.04
Tehát beillesztettem amit írtál, de nem biztos hogy jól értelmeztem a regexpet. (Nem használtam még.)

az index.php most ilyen

<?php

$url = "http://www.aspszerver.hu/Default.aspx";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 500);

curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPGET, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_NOBODY, 0);

$result = curl_exec($ch);
curl_close($ch);

$result = preg_replace(
array('!/action="[a-z1-9 \-]+\.aspx"\??!ie', '!(http://www.aspszerver.hu/)/!i'),
array('"/index.php?reqaspx=".urlencode("$0")', '(http://www.phpszerver.hu/)'),
$result);

echo $result;
?>

a default.aspx ilyen a böngészőböl nézve a source-ot


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title></title></head>
<body>
<form name="form1" method="post" action="Default.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTM2MDc4Mjc0NWRkUMO+zH2VzXYECHCiPs/mL0Jg3tQ=" />
</div>

<table width="300px">
<tr>
<td colspan="2" align="center">
<span id="Label1">Bejelentkezés</span></td>
</tr>
<tr>
<td style="width: 80px">
<span id="Label2">Név:</span></td>
<td>
<input name="txtnev" type="text" id="txtnev" /></td>
</tr>
<tr>
<td style="width: 80px">
<span id="Label3">Jelszó:</span></td>
<td>
<input name="txtpass" type="text" id="txtpass" /></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" name="btn_login" value="Belépés" id="btn_login" />
</td>
</tr>
<tr>
<td colspan="2">
<span id="lbl_msg"></span></td>
</tr>
</table>

<div>

<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBAKTz63aDAKL+9q7DQLKw6LYBQLjl+vcBA2hGNhSYWxmGm11deBrbxfPKK6L" />
</div></form>
</body>
</html>



Tehát az ASP szerveren lévő form action paramétere saját magára mutat relatívan.
Az már codebehind-ba van lekezelve, hogy a bejelentkezés után mi legyen, egyédként a default2.aspx-et hívja meg szintén az ASP szerverről.

Szóval számomra még valami nem gömbölyű.

mzsolt
7

Hát akkor rajta

zila · 2008. Jún. 9. (H), 14.48
Mint az előző hozzászólásomban jeleztem egy jó regexp csodákra képes (persze van ahol a csoda kevés). Nézd meg az asp szerverről lekért html forrást, és minden hivatkozást ami az asp szerverre mutat (képek, stíluslapok, javascriptek, flash-ek stb-k cseréld ki a php szervered címére (ehhez kell egy vagy több jó kis reguláris kifejezés (ne kédezd meg mi ez, google megmondja). A javascriptekben és css fileokban lévőket is. Mindezt az apache hibakezelő felülbírálásával (http://httpd.apache.org/docs/2.0/mod/core.html#errordocument) meghívott php scriptben kell megtenned, ami a kért url-t leszedi az asp szerverről és a megfelelő mime type-pal visszaadja, meg kell oldanod, hogy a http fejlécben mégse 404 legyen mert az nem olyan szép, pl. ajax hívások el is hasalhatnak rajta, 200-at kéne visszaadnod (egyáltalán nem triviális feladat, nem is tudom lehet-e ilyet...) amit megtaláltál az asp szerveren, ha ott sem található mert tényleg 404 akkor viszont meg kell jelenítened a hibát.

Vagy bekapcsolod a mod_proxy-t, bekonfigurálod, hogy ami a http://phpserver-re jön kérés azt a http://aspserver-től kérje el és készen is vagy.
2

Apache mod_proxy

siposa · 2008. Jún. 9. (H), 12.17
Apache mod_proxy tudtommal hasonlóra való, ha csak az a cél, hogy az apache-on keresztül látszódjon az IIS.
13

csak nem fog ki rajtunk egy ilyen feladat?

zsmeczner · 2008. Jún. 11. (Sze), 16.09
Nincs semmilyen ötlet, esetleg curl nélkül, más megoldásal?
A lényeg, hogy az index.php töltse be a default.aspx-t, de a böngésző címsorába ne legyen benne, hogy a default.aspx melyik szerveren van.
Illetve a default.aspx-en a button klikk esemény értelemszerűen az asp szerveren lévő default2.aspx oldalt töltse be, de a böngésző címsora maradjon php szerverre mutatva. (ezt szépen mondtam, bocs).

Bármilyen megoldást szívesen fogadok.
mzsolt
14

A megoldás már elhangzott

zila · 2008. Jún. 11. (Sze), 16.22
Megoldás: apache mod_proxy
Ha a szolgáltatód nem támogatja akkor keress másikat. Lehet maszatolni, meg curl-lel bohóckodni, de ennek sok buktatója van (a linkektől kezdve az session-ig mindenhol nehézségbe fogsz ütközni).

Egyébként ha beállítanád az apache error handlinget akkor meg tudnád oldani, hogy minden php szerveren nem létező doksit lekérj curl-lel az asp szerveredről, de emelett is elmentél...
15

De kezdő vagyok a témában

zsmeczner · 2008. Jún. 12. (Cs), 10.26
A szolgáltatóm adott egy felhasználónevet+jelszót.
Néztem egy php infót, de abból nem derült ki számomra hogy a mod_proxy engedélyezett vagy sem.
(Honnan tudom azt megnézni egyáltalán?)
Őszintén szólva ez az első php feladat amit meg akarok oldani, eddig ASP-ben irogattam ezt azt.
Ezért kérdezek ilyen alapdolgokat.
Annyi lejött nekem, hogy ha a php szerverre fut be kérés, akkor azt asz asp szerver fogja kiszolgálni.
Ezt az átiránytást tudja a mod_proxy.
De hol tudom ezt beállítani, és mi lesz a php szerver index.php -ban.

Ha nem találod degradálónak a kérdést, és van kedved segíteni, szívesen veszem.
üdv.
mzsolt
16

Szolgáltató

zila · 2008. Jún. 12. (Cs), 10.43
PHP infoban sehol sem fogod megtalálni a mod_proxy-t mert semmi köze a php-hoz. Meg kell kérdezni a szolgáltatót, hogy hajlandó-e ezt a modult a webszerverbe feltenni és beállítani neked. Mint látod a megoldáshoz nem kell php, tisztán apache szerver konfigurációval oldható meg a probléma.

Mod_proxy-val kb. ennyi a dolog:
<VirtualHost *>
    ServerAdmin admin##kukac##server.tld
    DocumentRoot /var/www/php.server.tld
    ServerName php.server.tld

    ProxyRequests Off

    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    ProxyPass / http://asp.server.tld/
    ProxyPassReverse / http://asp.server.tld/
    ProxyPreserveHost On
</VirtualHost>
17

Így sikerült

zsmeczner · 2008. Jún. 12. (Cs), 15.56
Köszönöm a türelmet, sokat tanultam.

Az én gépemen már működik az átirányítás.
Már csak a szolgáltatót kell rávennem, hogy módosítsa a conf állományt.

Mégegyszer köszi az infókat.

üdv.
mzsolt
18

Nincs mit

zila · 2008. Jún. 12. (Cs), 16.16
Örülök, hogy sikerült (még ha csak pilot jelleggel is) megoldani a problémát.