Supportnet / Forum / Skripte(PHP,ASP,Perl...)
URL file-access is disabled
Frage
Hallo!
Ich habe das Problem, daß wenn ich auf Inhalte von externen Seiten zugreifen möchte ich immer die Fehlermeldung
[quote]URL file-access is disabled[/quote]
erhalte.
ich habe auf Grund einer Meldung von PC-Welt.de (http://www.pcwelt.de/news/sicherheit/129344/index.html) habe ich bei mir in der php.ini "allow_url_fopen = Off" gesetzt.
Gibt es dennoch eine Möglichkeit eine externe Datei einzulesen?
Ich habe zudem folgende Funktionen deaktiviert: system, exec, shell_exec, passthru, phpinfo, show_source
So sieht der aktuelle Code aus:
[quote]$url = "http://www.seite.de/content/d/homepage/";
$file = @fopen ($url,"r");
if (trim($file) == "")
{
echo "Seite nicht gefunden<br>";
}
else
{ ...}
[/quote]
ich habe schon in einem Forum gelesen, daß ich
[quote]
$url = "http://www.seite.de/content/d/homepage/";
ini_set(allow_url_fopen, 1);
$file = @fopen ($url,"r");
[/quote]
einfügen soll, aber leider funktioniert es nicht.
Kann mir jemand weiter helfen?
Danke.
Gruß Tom
Antwort 1 von ClemBra
fopen auf eine externe mittels HTTP erreichte URI zuzugreifen ist nicht Klug. entweder man möchte nur den dort vorhandenen Text ausgeben, dann kann man readfile() oder ähnliches benutzen oder man möchte den dort vorhandenen Code ausführen, dann muss man das ganze per FTP:// machen, evtl mit "ftp://benutzername:passwort@host.tld/datei.php"
Gruß clembra
Gruß clembra
Antwort 2 von DJTomPW
Moin clembra!
Danke für den Tipp. Allerdings möchte ich nicht nur die externe Seite auf meiner Seite anzeigen, sondern ich möchte nur einige Werte aus der Seite herauslesen.
Hier mal der Code:
Ändere ich den Code in Zeile 2 in
dann wird die Seite angezeigt aber nicht eingelesen. Das Script meckert sofort rum wenn die Befehle feof() und fgets() aufgerufen werden.
Hast Du noch eine andere Idee?
Gruß Tom
Danke für den Tipp. Allerdings möchte ich nicht nur die externe Seite auf meiner Seite anzeigen, sondern ich möchte nur einige Werte aus der Seite herauslesen.
Hier mal der Code:
$url = "http://www.seite.de/content/d/homepage/";
$file = @fopen ($url,"r");
if (trim($file) == "")
{
echo "Seite nicht gefunden<br>";
}
else
{
$i=0;
while (!feof($file))
{
$zeile[$i] = fgets($file,20000);
$i++;
}
fclose($file);
$zeilen="";
for ($j=0;$j<$i;$j++)
{
$zeilen=$zeilen.$zeile[$j];
}
}
Ändere ich den Code in Zeile 2 in
$file = readfile ($url);
dann wird die Seite angezeigt aber nicht eingelesen. Das Script meckert sofort rum wenn die Befehle feof() und fgets() aufgerufen werden.
Hast Du noch eine andere Idee?
Gruß Tom
Antwort 3 von Supermax
Du kannst es auch mit den cURL-Funktionen versuchen, wenn das entsprechende Modul in deiner PHP-Installation vorhanden und aktiviert ist.
http://de.php.net/manual/en/ref.curl.php
http://de.php.net/manual/en/ref.curl.php
Antwort 4 von ClemBra
Hab vergessen diesen Tip zu geben:
Um die Zeilen zu trennen kann man ja
explode("\n",$inhalt);
oder (bei Windows-Datei)
explode("\n\r",$inhalt);
benutzen
ob_start();
readfile("http://www.domainname.tld/file.txt");
$inhalt=ob_get_contents();
ob_end_flush();
Um die Zeilen zu trennen kann man ja
explode("\n",$inhalt);
oder (bei Windows-Datei)
explode("\n\r",$inhalt);
benutzen
Antwort 5 von Supermax
auch file(), readfile() und file_get_contents() funktionieren nur mit einer URL statt eines Filenamens, wenn allow_url_fopen auf TRUE (1) gesetzt ist. Außerdem läßt sich diese Direktive nur in der PHP.INI setzen; mit ini_set() funktioniert es nicht.
Antwort 6 von ClemBra
Ich merk mir für die Zukunft: Keine Tipps geben, von denen ich nicht weiß ob sie funktionieren..
Naja, der hier funktioniert:
war übrigens nicht ob_end_flush(), sondern ob_end_clean()
Gruß clembra
Naja, der hier funktioniert:
ob_start();
$fp = fsockopen("www.domainname.tld", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET /filename.txt HTTP/1.1\r\n";
$out .= "Host: www.domainname.tld\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
$inhalt = ob_get_contents();
ob_end_clean();
$inhalt = substr(strstr($inhalt, "\r\n\r\n"),4);
$zeilen = explode("\r\n", $inhalt);
foreach ($zeilen as $id=>$wert) {
$zeilen[$id] = explode("|", $wert);
}war übrigens nicht ob_end_flush(), sondern ob_end_clean()
Gruß clembra

