file_get_contents gibt false für die eigene Domain zurück
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
agent
argument
array
attribut
code
datum
extension
funktion
header
hinweis
konkretes beispiel
kontext
lokale pfade
lokaler pfad
output
projekt
raten
string
tag
url
-
Hallo. Ich bin gerade dabei ein Wiki aufzubauen und verwende dazu Media Wiki. Da ich einige PHP-Seiten dynamisch einbinden möchte, habe ich mir die "icnlude" tag/extension">extension installiert. einziges Problem ist nur, dass es nicht funktioniert. Nach einigem Suchen fand ich heraus, dass die extension die PHP Funktion "file_get_contents" verwendet. Nach einigem Debugging fand ich heraus, dass diese Funktion für alle URL's, die auf meine Domains verweißen, das Ergebniss immer "false" ist. Von anderen Server funktioniert es und Tippfehler sind ausgeschlossen.
Ist das beabsichtigt?
Wie kann ich das umgehen?
Nach Möglichkeit würde ich die Funktion nicht ändern, da ich zum einen sehr ungerne in fremden Code rumbastele und zum anderen, weil das auch lokale Pfade unterstützt.
Ein schönes Beispiel kann ich gerne zur Verfügung stellen. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Könnte es sein, dass das hiermit zu tun hat?
-
Ich wüsste nicht, was damit falsch sein sollte. Einen Header kann ich nicht gebrauchen, da ich auch auf lokale Dateinen zugreifen muss.
$output=file_get_contents($argv['src']);
Hilfe könnte ich hier gut gebrauchen. -
Das ist entweder ein URL oder ein lokaler Pfad.
-
projekt-brainstorming schrieb:
ist das jetzt schon in dieser form in funktion zu bewundern oder wird erst geplant? weil wenn schon funktionell ist, möchtest bitte einen snippet zeigen, wo du das genau so reinkriegst. (zu erinnerung:
Das ist entweder ein URL oder ein lokaler Pfad.
. die lima gemeinde dankt.)$argv['src']
-
Ich verstehe nicht ganz, was du damit meinst. Willst du ein konkretes Beispiel für Werte von argv['src'], möchtest du einfach etwas mehr Kontext oder ein (nicht) funktionierendes Minimalbeispiel?
Ich möchte auch nochmal darauf hinweisen, dass der Code nicht von mir stammt. Ich habe lediglich das Problem auf diese Funktion herunterbrechen können. -
projekt-brainstorming schrieb:
argv ist für mich als assoziative array einfach nur unbekannt. als numerisch indiziertes sollte demnach so aussehen
Ich verstehe nicht ganz, was du damit meinst. Willst du ein konkretes Beispiel für Werte von argv['src'], möchtest du einfach etwas mehr Kontext oder ein (nicht) funktionierendes Minimalbeispiel?
Ich möchte auch nochmal darauf hinweisen, dass der Code nicht von mir stammt. Ich habe lediglich das Problem auf diese Funktion herunterbrechen können.
und das würde dementsprechend ganz anders funktionieren. daher hätte mich ein zitat aus deinem code interessiert, wo es eindeutig auf deine art entsteht. argv ist laut php.net nichts anders, als ein 'extra container für $_GET' (unter cli).argv[0] = 'code=<deincodewert>'
Beitrag zuletzt geändert: 19.9.2013 6:12:45 von czibere -
Hallo
holst Du die Daten aus XML mit simplexml_load_file()
... dann ist 'src' vielleicht kein String sondern ein Object, das einen String enthält
eine Variable $argv als Daten-Array für Elemente aus XML zu nehmen
(bzw. als Argument in der Funktion) ist ziemlicher Unsinn
weil die Variable $argv schon eine Bedeutung im PHP-System hat
... wenn Daten aus XML dann könnte man es $item oder $element oder $xyz nennen,
... egal, ... aber nicht $argv und auch nicht wie andere System Variablen
und ... oft braucht eine Abfrage einen eigenen User-Agent, daher das mit dem header
versuchs mal so
$resdata = simplexml_load_file('deinedaten.xml'); $n=1; foreach ($resdata->rootelement->item as $xyz) { $geturl = (string)$xyz->src; // -- das Object 'src' als String in $geturl ablegen $options = array("http" => array("header" => "User-Agent: Mein PHP-Skript\r\n")); $context = stream_context_create($options); $output = file_get_contents($geturl, false, $context)); print "<br />--------------- NR: ".$n." ---------------\n"; print "<pre>\n"; print htmlspecialchars( print_r($output,true) ) . "\n"; print "</pre>\n"; $n++; }
Eine Alternative wäre: den Datei-Inhalt mit CURL auslesen.
auch da muss man meist einen User-Agent mit angeben.
projekt-brainstorming schrieb:
...Der Code parst ein XML-Tag und das Array enthält alle Attribute...
... ohne Quellcode, was da genau passiert können wir nur raten .... :oO
Beitrag zuletzt geändert: 19.9.2013 16:26:11 von emoebel -
Wie bereits erwähnt, ist Code nicht von mir und ich kenne ihn selbst kaum. Die Variable ist mit Sicherheit ein String, da es ja mit anderen URLs funktioniert. Ob man einen Header verwenden kann, weiß ich nicht, da es ja für alle anderen URLs funktioniert und man ja auch lokale Dateien verwenden können muss.
Das sind eigentlich alles Dinge, die ich bereits erwähnt habe.
Außerdem möchte ich noch sagen, dass ich äußerst ungerne in diesem fremden Code rumwühle.
Die einzige Idee, die ich bis jetzt hatte ist, dass ich überprüfe, ob es eine URL oder ein lokaler Pfad ist und dementsprechend einen Klienten angebe oder nicht.
Aber die Hauptfrage ist immernoch, ob das gewollt ist, dass ich auf keine URLs meines Servers zugreifen kann.
Raten muss ich auch. -
Noch einmal: Wenn du deine Seite auf lima-city hostest, solltest du dir den von mir verlinkten Thread ansehen. Der Server verweigert alle Anfragen, die keinen sinnvollen User-Agent gesetzt haben, und genau das passiert bei dir (du bekommst einen 403).
-
Achso! So hatte ich das nicht verstanden. Das macht aber keinen Unterschied, ob ich eine URL oder einen lokalen Pfad verwende?
Also ich kann den Header auch für lokale Pfade setzten, oder?
EDIT:
Ich habe es mit dieser Methode hinbekommen. Sie erlaubt mir ausserdem noch dafür zu sorgen, dass ich Dateien eines Ordner nur mit diesem Script öffnen kann, indem ich einen eindeutigen User-Agent setzte. Ich habe einfach einen 100 stelligen Hexadezimalen Hash noch eingefügt. Dieser sollte es einen eindeutigen User-Agent machen!
Beitrag zuletzt geändert: 21.9.2013 23:54:17 von projekt-brainstorming -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage