# Php Seite öffnen?



## seejay (7. Aug 2007)

Hallo,
ich möchte per Java auf eine Datenbank im Internet zugreifen, da ich aber möchte, dass dies immer funktioniert und nicht von Proxys geblockt werden kann, nehme ich den Umweg über PHP. Deswegen möchte ich per Java eine PHP Seite aufrufen und deren Inhalt in einem String speichern. Leider kommen hier schon die ersten Probleme.
Bisher lautet mein Code:

```
public static void main( String[] args ) throws Exception{
      System.setProperty( "proxySet", "true" );
      System.setProperty("proxyPort","Port");
      System.setProperty("proxyHost","proxyAdresse");
       
    URLConnection conn = new URL("http://seejay.se.uttx.net/test/index.php").openConnection();
    conn.setDoInput(true);
    conn.setDoOutput(true);
    BufferedReader br = new BufferedReader(new InputStreamReader(conn
                    .getInputStream()));
    while (br.ready()) {
            System.out.println(br.readLine());
    }

    br.close();    
   }
```

Dies funktioniert leider nicht, gebe ich aber anstatt meiner Adresse z.b. http://google.de ein, dann funktioniert es.
In meiner Adresse wird im Moment per PHP nur ein Wort "test" ausgegeben.

Mache ich da irgendetwas falsch oder wie geht es für PHP Dateien.

Danke und Gruss
seejay


----------



## Ralf W. Balz (7. Aug 2007)

Hallo,

du kannst keine PHP Seite von einen Server Laden, nur das was die PHP Seite generiert, kannst du laden. Normalerweise erstellt eine PHP Seite HTML, den du dann laden könntest.

Du kannst eine PHP Seite z.B: http://seejay.se.uttx.net/test/DatenbankUpdate.php?Inhalt1=DATEN&Inhalt1=DATEN
aufrufen und diese PHP Seite updatet dann deine Datenbank.

Gruß Ralf


----------



## seejay (7. Aug 2007)

ja sorry, hab mnich dann falsch ausgedrückt, will auch nur den quelltext der seite bekommen. 
im moment steht in meiner testdatei nur drin

```
<?php
echo 'test';
?>
```
und quelltext ist ja dann

```
test
```

dies wollte ich auch laden, aber ich bekomme mit meinem Code oben nichts herausgelesen.


----------



## masta // thomas (7. Aug 2007)

Versuchst du auch wirklich http://seejay.se.uttx.net/test/index.php einzulesen? Weil die Seite ist z.Zt. leer, wenn ich sie im Browser aufrufe 

Ansonsten würde ich noch die Schleifenbedingung auf folgendes Ändern:


```
...
String line;
while((line = br.readLine()) != null)
...
```

(und dann natürlich mit System.out.println(line); ausgeben)


----------



## assoziatives pseudonym (7. Aug 2007)

> und quelltext ist ja dann
> 
> ```
> test
> ```


Nö, ganz sicher nicht  :lol: 
Der einzige *Quelltext* steht im ersten Codeblock von dir .. du kannst auf der Client-Seite keinen Quelltext auslesen, sondern nur HTML-Anweisungen ... Quelltext siehst du zb. in deiner IDE oder *in* der PHP-Datei aufm Server  :wink: 

Übrigens ist die Website wirklich leer, da kann also nix ankommen


----------



## tuxedo (7. Aug 2007)

Wenn du mit Java auf eine DB hinter einem Webspace zugreifen willst, dann ist das hier was für dich:

*J*ava to *P*hp to *M*ysql *D*aba*B*ase*C*onnection (Firewall und Proxy-tauglich)

Ist zur Zeit in der Entwicklung, aber die Basics gehen schon ziemlich ordentlich.

- Alex


----------



## assoziatives pseudonym (7. Aug 2007)

Deine Werbung lässt du bitte woanders ab, ich glaub es gibt spezielle Foren dafür.


----------



## tuxedo (7. Aug 2007)

Wieso Werbung? Er hat das Problem dass er ne DB hinter nem Webspace ansprechen will. Und das ist ne Lösung. Wieso das Rad neu erfinden?
Mit Werbung hat das absolut nix zu tun.


----------



## assoziatives pseudonym (7. Aug 2007)

...


----------



## HoaX (7. Aug 2007)

alex, nich so eng sehn  spezialist hat scheinbar keine ahnung und ist es daher nur gewohnt anderen leuten lösungsvorschläge mit fremden quellen zu geben. ich find ok das ok, da es 100% passt. um ihm jetz die arbeit des tippens zu erleichtern: 
ich bin neulich auf jpmdbc.dev.java.net gestoßen, könnte was für dich sein, seejay. (nein, es ist NICHT mein projekt )


----------



## tuxedo (7. Aug 2007)

HoaX hat gesagt.:
			
		

> alex, nich so eng sehn  spezialist hat scheinbar keine ahnung und ist es daher nur gewohnt anderen leuten lösungsvorschläge mit fremden quellen zu geben. ich find ok das ok, da es 100% passt. um ihm jetz die arbeit des tippens zu erleichtern:
> ich bin neulich auf jpmdbc.dev.java.net gestoßen, könnte was für dich sein, seejay. (nein, es ist NICHT mein projekt )



;-) Danke für den Hinweis ...


----------



## HoaX (7. Aug 2007)

tha_specializt hat gesagt.:
			
		

> > und quelltext ist ja dann
> >
> > ```
> > test
> ...



falsch, der html code ist natürlich quelltext, oder besuchst du webseiten immer mittels telnet? 
der html-code beschriebt eine seite und wird entsprechend gerendert, d.h. aus dem code wird etwas erzeugt was nichtmehr nur buchstaben und zeichen sind, der html-code ist die quelle aus dem das erzeugt wurde, quellcode eben.


----------



## seejay (8. Aug 2007)

masta // thomas hat gesagt.:
			
		

> Versuchst du auch wirklich http://seejay.se.uttx.net/test/index.php einzulesen? Weil die Seite ist z.Zt. leer, wenn ich sie im Browser aufrufe
> 
> Ansonsten würde ich noch die Schleifenbedingung auf folgendes Ändern:
> 
> ...



Danke, darin lag auch schon der Fehler, wenn man so bescheuert ist und die URL in Java falsch eingibt und beim Testen danach richtig im Browser, kann nichts daraus werden.


----------



## tuxedo (8. Aug 2007)

Falls du irgendwann doch zu JPMDBC greifst, würde ich mich über Feedback freuen. 
Wenn du aber mit deiner Individuallösung besser dran bist, würd's mich interessieren wie du's letztendlich gelöst hast.

- Alex


----------



## seejay (11. Aug 2007)

naja wird ne individuallösung sein.
bisher so gelöst, dass sich bei der ersten anfrage eine javaID erzeugt wird und diese an php gesendet wird, dort wird dieser javaID eine PHPID zugeordnet um bei weiteren abfragen zu wissen, von welchem clienten die anfrage kam und ob dieser über benötigte rechte verfügt. diese beiden ids werden dann jedes mal vom java programm mitgesendet. die anfragen gehen an verschiedene dateie, je nachdem mit was die anfrage zu tun hat. so hab ich es gelöst. irgendwelche vorschläge, kritik dazu?


----------



## tuxedo (12. Aug 2007)

D.h. du hast die SQL-Statements weitgehend direkt in PHP ausgelagert und frägst mit Java nur noch die "Ergebnisse" der Abfrage ab?

jPMdbc macht das im Prinzip auch nicht anders. Aber es gibt einen "gewaltigen" Unterschied:

Du brauchst auf dem Webserver nur eine File (jpmdbc.php) und die Statements kannst du in Java statt in PHP bestimmen. D.h. du bist sehr flexibel.

Wie hast du das Ergebnis mit PHP "formatiert"? Ich mein jetzt das Abrage-Ergebnis? Einfach mit Komma getrennt oder hast du dir eine Art Protokoll überlegt?

Hast du schon mal einen jdbc-treiber benutzt (jdbc nicht mit jpmdbc verwechseln!)? Auf den ersten Blick mag die verwendung eines solchen Treibers umständlich sein. Aber man ist damit wirklich recht gut bedient... Ich poste die mal ein wenig Beispielcode:


```
Class.forName( "de.root1.jpmdbc.Driver" ); // Treiber bekannt machen


// Die Verbindung zur DB herstellen
Connection con = DriverManager.getConnection("jdbc:jpmdbc:http://www.mydomain.tld:80/jpmdbc.php?myDatabaseName", "myDbUser", "myDbPass");

// Anhand der Verbindung ein SQL-Statement erzeugen und die SQL-Anfrage auf dem Server ausführen
Statement s = con.createStatement();
ResultSet rs = s.executeQuery("SELECT * FROM `command`;");

while(rs.next()){ // mit .next() kann man das Ergebnis Zeile für Zeile durchgehen
System.out.println("name="+rs.getString("name")+" security="+rs.getShort("security")); // Auf die Spalten im Ergebnis kann man etweder per Spaltenname oder Spalten-Index-Nr zugreifen
}

// Ein weiteres Beispiel
s = con.createStatement();
int affected = s.executeUpdate("UPDATE `command` SET `security` = 3 WHERE `name` = 'cooldown';");
System.out.println("affected rows: "+affected);

}
```

Vielleicht kommst du ja doch noch auf den Geschmack. Und das beste ist:
Du kannst durch einfaches austauschen des Treiber, Beispielsweise ersetzt du jpmdbc durch einen Postgres oder direkt einen MySQL-Treiber, die Db wechseln ohne den ganzen Code umschreiben zu müssen. Du musst die Zeilen 2 und 6 im Beispielcode ändern. Das ist alles. Die Abfragen und das verarbeiten der Ergebnisse bleibt 1:1 gleich.

"Insellösungen" sind in der Regel schwer zu warten und bei weiterem Wachsen des Programms schwer zu handeln. für den ersten Moment reichen sie ja meist aus. Aber man weiß ja nie wie weit das Programm noch wächst....


----------



## seejay (12. Aug 2007)

wollte es eigentlich so machen, aber ich konnte dann die mysql Datenbank hinter einer Firewall nicht erreichen. Aber dies war für mich vorraussetzung. Deswegen hab ich es jetzt über eine php seite gelöst. Bisher geb ich die Aussage einfach mit Trennzeichen getrennt aus. Aber ich schau mir des jpmdbc mal an.


----------



## tuxedo (12. Aug 2007)

jepp, die "normalen" jdbc-treiber haben a) ein Firewallproblem und b) können nicht mit MySQL-Datenbanken auf Webservern umgehen die für "localhost-only" vrbindungen konfiguriert sind.

Aus dem Grund hab ich jpmdbc geschaffen... Mich hat das genauso "angeödet" wie dich ;-)


----------



## masta // thomas (12. Aug 2007)

Das localhost-"Problem" kann man auch mit einem SSH Tunnel umgehen


----------



## tuxedo (13. Aug 2007)

Die allerwenigsten Webspace-Anbieter geben eine SSH-Shell dazu. Ergo: Problem ...

Fazit: Einzigster Zugang zur DB via PHP 

Oder hat jemand noch ne andere Idee?

- Alex


----------



## masta // thomas (13. Aug 2007)

Ja, da hast du Recht @ SSH - ich bin seit ewigkeiten root-Server gewohnt.

Ich hab übrigens vor längerer Zeit auch mal so eine Bridge angefangen, aber irgendwann nicht mehr dran gearbeitet - für die Zwecke, die es erfüllen sollte, hat es genügt  Kommuniziert hat PHP & JAVA via XML (was im Endeffekt vielleicht keine schlaue Idee war, weil dadurch mehr Datentransfer) 

Evtl. solltest du dir mal Gedanken über Kompression machen, um die Querys schneller aus dem Netz zu laden. 
Ansonsten eine gute Idee, bleib weiter dran


----------



## tuxedo (13. Aug 2007)

Hast du dir mal meine Speed-Tests angesehen?



> Database used: 	MySQL Server 4.1.11
> Serverside MySQL client for PHP: 	MySQL Client 4.0.24
> Tables in Database: 	93
> Internetconnection: 	DSL: 6000kbit down / 512kbit up
> ...



Wenn ich MySQL zum Server via SSH tunnle, dann bin ich da auch nicht viel langsamer (glaub ich, habs noch nicht ausführlich gegengetestet, mach ich heute abend mal). 

bzgl. der Kompression hab ich auch schon nachgedacht. Aber ich hab da keine wirklich elegante und praktikable Technik gefunden.

Hab hier gelesen dass eine Zeile auf PHP-Seite genügen würde?!

Habs noch nicht getestet. Werd ich aber mal bei gelegenheit noch tun.

- Alex


----------

