kostenloser Webspace werbefrei: lima-city


file_get_contents gibt false für die eigene Domain zurück

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    projekt-brainstorming

    projekt-brainstorming hat kostenlosen Webspace.

    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.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Könnte es sein, dass das hiermit zu tun hat?
  4. Autor dieses Themas

    projekt-brainstorming

    projekt-brainstorming hat kostenlosen Webspace.

    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.
  5. projekt-brainstorming schrieb:
    $output=file_get_contents($argv['src']);
    nach welchem motto sollte
    $argv['src']
    funktionieren?
  6. Autor dieses Themas

    projekt-brainstorming

    projekt-brainstorming hat kostenlosen Webspace.

    Das ist entweder ein URL oder ein lokaler Pfad.
  7. projekt-brainstorming schrieb:
    Das ist entweder ein URL oder ein lokaler Pfad.
    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:
    $argv['src']
    . die lima gemeinde dankt.)
  8. Autor dieses Themas

    projekt-brainstorming

    projekt-brainstorming hat kostenlosen Webspace.

    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.
  9. projekt-brainstorming schrieb:
    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.
    argv ist für mich als assoziative array einfach nur unbekannt. als numerisch indiziertes sollte demnach so aussehen
    argv[0] = 'code=<deincodewert>'
    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).

    Beitrag zuletzt geändert: 19.9.2013 6:12:45 von czibere
  10. Autor dieses Themas

    projekt-brainstorming

    projekt-brainstorming hat kostenlosen Webspace.

    argv ist ein Argument in der Funktion. Die Variable hat keinen besondern Wert/keine besondere Inhalte. Der Code parst ein XML-Tag und das Array enthält alle Attribute.

    Man könnte genau so gut eine beliegige Variable verwenden. Aber argv["src"] hat den korrekten Wert.
  11. 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
  12. Autor dieses Themas

    projekt-brainstorming

    projekt-brainstorming hat kostenlosen Webspace.

    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.
  13. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    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).
  14. Autor dieses Themas

    projekt-brainstorming

    projekt-brainstorming hat kostenlosen Webspace.

    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
  15. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!