include und Verzeichnisschutz
Jense
- php
0 Vinzenz Mai0 dedlfix0 Der Martin
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!!
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
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.
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!
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";
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