Jense: include und Verzeichnisschutz

Hallo,
ich erstelle gerade eine Hompage und habe auf der Startseite ein Newsfeld. Dieses Feld ist ein div, in das per include die Seite geladen wird, in der die News stehen. Das klappt soweit auch ganz gut. Probleme gibt es dann, wenn ich einen Verzeichnisschutz anlege, mit der
m ich das root-Verzeichnis der Hompage schütze, da sich die Seite ja noch im Aufbau befindet.

Im Newsfeld wird nun folgende Fehlermeldung angezeigt:

Warning: main(http:// XXX ) [function.main]: failed to open stream: HTTP request failed! HTTP/1.1 401 Authorization Required in XXX on line 90

Warning: main() [function.include]: Failed opening XXX for inclusion (include_path=' XXX ') in XXX on line 90

Warum will er da noch einmal eine Authorization haben? Wie kann ich dieses Problem beheben?

Vielleicht kann es ja jemand einem php-Anfänger erklären...

Vielen Dank schon mal!!

  1. Hallo Jens,

    ich erstelle gerade eine Hompage und habe auf der Startseite ein Newsfeld. Dieses Feld ist ein div, in das per include die Seite geladen wird, in der die News stehen. Das klappt soweit auch ganz gut. Probleme gibt es dann, wenn ich einen Verzeichnisschutz anlege, mit der
    m ich das root-Verzeichnis der Hompage schütze, da sich die Seite ja noch im Aufbau befindet.

    Im Newsfeld wird nun folgende Fehlermeldung angezeigt:

    Warning: main(http:// XXX ) [function.main]: failed to open stream: HTTP request failed! HTTP/1.1 401 Authorization Required in XXX on line 90

    ja und was steht in Zeile 90?

    Warning: main() [function.include]: Failed opening XXX for inclusion (include_path=' XXX ') in XXX on line 90

    Warum will er da noch einmal eine Authorization haben? Wie kann ich dieses Problem beheben?

    Meine Glaskugel sagt mir, dass Du dort so etwas wie

    include 'http://www.example.com/path/to/news.inc.php';

    verwendest, wobei Du damit auf eine Ressource auf Deinem eigenen Server
    unterhalb der Document-Root zugreifst. (vergleichbar zum dritten Beispiel
    im Handbuch

    Falls dies der Fall sein sollte, zwei Anmerkungen:

    a) Greife über das Dateisystem und nicht über http auf Deine include-Datei zu.
    b) In den meisten Fällen ist es eine gute Idee, solche Includes _nicht_ in
       Verzeichnissen zu haben, die über HTTP erreichbar sind.

    Damit man Dir besser helfen kann, bitte ich um weitere Informationen, z.B. den
    relevanten Code, der zur Fehlermeldung führt.

    Freundliche Grüße

    Vinzenz

    1. Alles klar, vielen Dank schonmal für die bisherigen Infos.

      Hier weitere Infos:

      Zeile 90 ist die inlude Zeile in folgendem code:

      ?php             // Abfrage ob News angezeigt werden Beginn
      if(is_page('Home')) {
       echo '<div id="newsfeld">';
      include(get_permalink(44));
      echo '</div>';
      }  // Abfrage ob News angezeigt werden Ende
       ?>

      Zur Erklärung: Das ganze ist Teil eines Wordpress Blogs und dieser Abschnitt findet sich in der header.php, die Teil eines Templates ist. get_permalink(44) gibt die http://...-Adresse der Seite mit id=44 aus, die meine News-Inhalte enthält.

      1. Habe es hinbekommen. Der Fehler lag darin, dass ich nicht bedacht habe, dass ich an der Stelle auf die Wordpress- Datenbank zugreifen muss! Ist also ein sehr Wordpressspezifisches Problem gewesen. Wen es interessiert, dem Stelle ich hier noch den Code rein:

        <?php // Abfrage ob News angezeigt werden Beginn
        if(is_page('Home')) {
        echo '<div id="newsfeld">';

        global $more;
        $more = 0;
        $my_query = new WP_Query('page_id=44');
        while ($my_query->have_posts()) : $my_query->the_post();
        $do_not_duplicate = $post->ID;
        the_content();
        endwhile;

        echo '</div>';
        } // Abfrage ob News angezeigt werden Ende
        ?>

        Danke für die schnellen Antworten! Ich habe nun so einiges über die Verwendung des include-Befehls gelernt!

  2. echo $begrüßung;

    Warning: main(http:// XXX ) [function.main]: failed to open stream: HTTP request failed! HTTP/1.1 401 Authorization Required in XXX on line 90
    Warning: main() [function.include]: Failed opening XXX for inclusion (include_path=' XXX ') in XXX on line 90
    Warum will er da noch einmal eine Authorization haben? Wie kann ich dieses Problem beheben?

    Weil du eine URL notiert hast, die in einem Zugriff über das Web resultiert. Wenn du einen Dateisystemzugriff haben möchtest, dann notiere diesen relativ zur aufrufenden Datei und ohne http://...

    Wenn die zu inkludierende Datei keinen PHP-Code enthält, der noch verarbeitet werden soll, ist readfile() die bessere Funktion als ein include.

    echo "$verabschiedung $name";

  3. Hi,

    Im Newsfeld wird nun folgende Fehlermeldung angezeigt:
    Warning: main(http:// XXX ) [function.main]: failed to open stream: HTTP request failed! HTTP/1.1 401 Authorization Required in XXX on line 90
    Warning: main() [function.include]: Failed opening XXX for inclusion (include_path=' XXX ') in XXX on line 90

    warum bindest du mit dem include-Statement eine HTTP-Ressource ein? Dann ist ja klar, dass für diesen Zugriff ein HTTP-AUTH fällig ist. Referenziere die includierte Datei stattdessen direkt über das Dateisystem des Servers.

    Vielleicht kann es ja jemand einem php-Anfänger erklären...

    Bei einem Dateizugriff spielen die Zugriffsregelungen über HTTP-AUTH keine Rolle, ebensowenig andere Einstellungen des Webservers. Wenn du dagegen eine HTTP-Ressource anforderst, greifen all diese Details in vollem Umfang.

    So long,
     Martin

    --
    Niemand ist überflüssig: Er kann immer noch als schlechtes Beispiel dienen.