$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?
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;
}
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....
}
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/...
.
Wenn Sie versuchen, XML zu lesen, das aus einer URL ohne file_get_contents()
generiert wurde, sollten Sie sich cURL ansehen
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.
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);