Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

fopen https stream

Empfohlene Antworten

Veröffentlicht

Hallo allerseits,

ich hadere hier seit tagen mit folgendem Problem. Ich versuche auf einem entfernten Server per fopen daten zu holen und hier zu verarbeiten.

Ziel ist es am ende das ganze natürlich per https zu realisieren. Aber fangen wir erst mal mit http an, denn noch nicht mal das geht.

Ist-Stand: Ich habe einen apache 2.2 und php 5.5.1.

php kompiliert mit

./configure' '--with-apxs2=/usr/local/apache2/bin/apxs' '--enable-track-vars=yes' '--enable-url-includes' '--enable-sysvshm=yes--enable-sysvsem=yes' '--disable-ipv6' '--enable-force-cgi-redirect' '--with-gettext' '--with-openssl=/usr/local/'

Soweit so gut. Wenn ich jetzt mein script aufrufe, eine php datei im root verzeichnis, bekomme ich immer folgende fehlermeldung:

[function.fopen]: failed to open stream: Connection refused

Ich habe schon sämtliche apache und php kombinationen und configurations parameter probiert. Er scheitert immer am fopen.

Wenn ich das script hier auf einem anderen server mit einem IIS 5.0 aufrufe, funktioniert zumindest der http stream einwandfrei. Allerdings mit https klappt es auch da nicht.

Hier noch die entscheidenden Zeilen aus dem php script:

$AURL = "http://user:pass@server.de/cgi-bin/ceg/inquire.cgi?FORMAT=XML" . // Testserver

....

Daten requesten

....

if (!($fp = fopen($AURL, "r")))

die("could not open XML input");

$data = fread($fp, 999999);

fclose($fp);

....

array füllen und ausgeben

....

Danach soll einfach zu testzwecken ein array mit dem inhalt aus dem stream ausgegeben werden.

Bin für jeden Tipp dankbar :)

mfg

k0ph

Kam PHP zum Schluss, dass es sich bei filename um ein registriertes Protokoll handelt, und ist dieses Protokoll als eine Netzwerk URL registriert, prüft PHP, ob allow_url_fopen aktiviert ist. Ist es nicht aktiviert, gibt PHP eine Warnung aus, und der Aufruf von fopen wird scheitern.

Schon geprüft?

Ansonsten probier mal mein Script "Webseiten Fälscher": http://www.tobias-digital.de/index.php?id=2&no_cache=1&tx_eeblog[pointer]=0&tx_eeblog[showUid]=18

hi tobi!

danke für Deine Antwort. Ich glaube das bringt uns auf die richtige Spur.

Directive Local Value Master Value

allow_url_fopen On On

Also das ist definitiv an!

Allerdings wenn ich Dein Script aufrufe kommt:

Warning: fopen(http://www.spiegel.de) [function.fopen]: failed to open stream: Connection refused in /usr/local/apache2/htdocs/url.php on line 10

Warning: feof(): supplied argument is not a valid stream resource in /usr/local/apache2/htdocs/url.php on line 11

Warning: fgets(): supplied argument is not a valid stream resource in /usr/local/apache2/htdocs/url.php on line 12

Warning: feof(): supplied argument is not a valid stream resource in /usr/local/apache2/htdocs/url.php on line 11

usw . usw.

hmmm was stimmt da nicht??

Kannst Du denn auf der Shell mit dem Webserver-Benutzer den Server erreichen? Z.B. mit

lynx http://www.spiegel.de

?

Aha, danke. Da haben wir des Pudels Kern wohl.

lynx www.spiegel.de ergibt:

Looking up www.spiegel.de first

Can't Access `http://www.spiegel.de/'

Alert!: Unable to access document.

lynx: Can't access startfile

und nü? :(

pingen und namensauflösung funktioniert aber.

auch wenn ich sage -> dig www.spiegel.de <- löst er mir das korrekt auf.

;; QUESTION SECTION:

;www.spiegel.de. IN A

;; ANSWER SECTION:

www.spiegel.de. 70881 IN A 195.71.11.67

und was sacht


telnet www.spiegel.de 80

Alos nachdem ich jetzt unseren proxy per export befehl eingetragen hab , kann ich jetzt mit lynx auf spiegel.de zugreifen.

Allerdings bringt das script immer noch die gleiche fehlermeldung.

Wie kann ich denn für alle Benutzer im System sagen benutzt den proxy?

Mit www-data oder daemon kann ich mich ja nicht anmelden an der shell.

Achso, telnet bringt nichts. Ausser port 80 und 443 ist nichts offen in der Firewall.

mfg

k0ph

Du musst dem WWW Daemon eben auch die ENV Var mitgeben

set_env()

oder direkt in der PHP.ini

Gruß,

Markus

hi kills,

danke für den Hinweis.

Ich habe jetzt set_env() direkt in die php.ini eingetragen.

info.php zeigt mir jetzt auch einen kompletten enviroment auszug an mit HTTP_PROXY etc. das hat also geklappt.

Was leider immer noch nicht klappt ist mein script, und das von tobias url.php leider auch nicht.

danke & gruß

k0ph

Hallo allo,

also ich poste mal einen etwas größeren codeschnipsel. Vielleicht hilft euch das bei der Fehlersuche. Falls jemand noch eine Idee hat wäre das echt fantastisch. Hänge jetzt seit Tagen vor diesem Problem und sehe bald nur noch Bahnhof :eek

$AURL = "http://Benutzername:Passwort@test.server.de/cgi-bin/ceg/inquire.cgi?FORMAT=XML" . // Testserver

"&REQSOURCECODE=".URLEncode("Wert1").

"&HIDSUBSCRIBERCODE=".URLEncode("Wert2").

.

.

.

"&HIDSUBSCRIBERCODE=".URLEncode("Wert12");

if (!($fp = fopen($AURL, "r")))

die("could not open XML input");

$data = fread($fp, 999999);

fclose($fp);

Wie gesagt, bereits nach fopen bleibt er hängen und mahnt an: "no stream, connection refused"

Meine Vermutung ist folgende:

Wenn ich per lynx die url so aufrufe wie sie oben im script steht, mit benutzername und passwort in der url dann meckert er

1.) "Alert!: Address contains a username: Benutzername:Passwort"

und danach:

2.) "Alert!: HTTP/1.0 503 Service Unavailable"

und zeigt mir anschließend:

3.) "Failed to resolve the name of server Benutzername to connect"

Hat der Fehler vielleicht was mit dem HTTP REQUEST zu tun. Das der Apache es nicht gebacken bekommt? Habe schon google etc. nach fopen und http authentication etc. Kam auch viel response, aber wirklich schlauer bin ich nicht.

danke für eure hilfe.

mfg

ok, problem gelöst.

grrrrrr, proxy umgangen und dann hat es funktioniert :-(

wahrscheinlich scheiterte es an fopen() in zusammenspiel mit der http authentifizierung durch den proxy o.ä...

thx an alle!

mfg

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.