webentwicklung-frage-antwort-db.com.de

Alternative zu file_get_contents?

$xml_file = file_get_contents(SITE_PATH . 'cms/data.php');

Das Problem ist, dass auf einem Server der URL-Dateizugriff deaktiviert ist. Ich kann es nicht aktivieren, es ist eine Hosting-Sache.

Die Frage ist also dies. Das data.php Datei generiert XML-Code.

Wie kann ich dies ausführen und die XML-Daten abrufen, ohne die oben beschriebene Methode auszuführen?

Ist es möglich?

38
JasonS

Verwenden Sie cURL . Diese Funktion ist eine Alternative zu file_get_contents.

function url_get_contents ($Url) {
    if (!function_exists('curl_init')){ 
        die('CURL is not installed!');
    }
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $Url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $output = curl_exec($ch);
    curl_close($ch);
    return $output;
}
109
The Pellmeister

Sie sollten so etwas ausprobieren, ich mache das für mein Projekt, es ist ein Fallback-System

//function to get the remote data
function url_get_contents ($url) {
    if (function_exists('curl_exec')){ 
        $conn = curl_init($url);
        curl_setopt($conn, CURLOPT_SSL_VERIFYPEER, true);
        curl_setopt($conn, CURLOPT_FRESH_CONNECT,  true);
        curl_setopt($conn, CURLOPT_RETURNTRANSFER, 1);
        $url_get_contents_data = (curl_exec($conn));
        curl_close($conn);
    }elseif(function_exists('file_get_contents')){
        $url_get_contents_data = file_get_contents($url);
    }elseif(function_exists('fopen') && function_exists('stream_get_contents')){
        $handle = fopen ($url, "r");
        $url_get_contents_data = stream_get_contents($handle);
    }else{
        $url_get_contents_data = false;
    }
return $url_get_contents_data;
} 

dann kannst du das später machen

$data = url_get_contents("http://www.google.com");
if($data){
//Do Something....
}
9
AMB

Ja, wenn Sie URL-Wrapper deaktiviert haben, sollten Sie Sockets oder besser die cURL -Bibliothek verwenden.

Wenn es Teil Ihrer Site ist, verweisen Sie mit dem Dateisystempfad darauf, nicht mit der Web-URL. /var/www/..., eher, als http://domain.tld/....

3
Alin Purcaru

Wenn Sie versuchen, XML zu lesen, das aus einer URL ohne file_get_contents() generiert wurde, sollten Sie sich cURL ansehen

2
Nev Stokes

Wenn die Datei lokal ist, wie Ihr Kommentar zu SITE_PATH schlagen vor, es ist ziemlich einfach, das Skript auszuführen und das Ergebnis in einer Variablen mit den Ausgabesteuerungsfunktionen zwischenzuspeichern :

function print_xml_data_file()
{
    include(XML_DATA_FILE_DIRECTORY . 'cms/data.php');
}

function get_xml_data()
{
    ob_start();
    print_xml_data_file();
    $xml_file = ob_get_contents();
    ob_end_clean();
    return $xml_file;
}

Wenn es fern ist, wie viele andere gesagt haben, ist curl der richtige Weg. Wenn es nicht vorhanden ist, versuchen Sie socket_create oder fsockopen . Wenn nichts funktioniert ... wechseln Sie Ihren Hosting-Provider.

2

Wenn Sie es zur Verfügung haben, ist die Verwendung von Curl die beste Option.

Sie können feststellen, ob es aktiviert ist, indem Sie phpinfo() ausführen und die Seite nach Locken durchsuchen.

Wenn es aktiviert ist, versuchen Sie Folgendes:

$curl_handle=curl_init();
curl_setopt($curl_handle, CURLOPT_URL, SITE_PATH . 'cms/data.php');
$xml_file = curl_exec($curl_handle);
curl_close($curl_handle);
0
Alan Geleynse