web-dev-qa-db-fra.com

Alternative à file_get_contents?

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

Le problème est que l'accès au fichier URL est désactivé sur un serveur. Je ne peux pas l'activer, c'est une chose d'hébergement.

La question est donc la suivante. Le data.php le fichier génère du code xml.

Comment puis-je exécuter cela et obtenir les données xml sans faire la méthode ci-dessus?

C'est possible?

38
JasonS

Utilisez cURL . Cette fonction est une alternative à 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

Vous devriez essayer quelque chose comme ça, je fais ça pour mon projet, c'est un système de secours

//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;
} 

puis plus tard, vous pouvez faire comme ça

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

Oui, si vous avez désactivé les wrappers d'URL, vous devez utiliser des sockets ou, mieux encore, la bibliothèque cURL .

S'il fait partie de votre site, faites-y référence avec le chemin d'accès au système de fichiers et non l'URL Web. /var/www/..., plutôt que http://domain.tld/....

3
Alin Purcaru

Si vous essayez de lire du XML généré à partir d'une URL sans file_get_contents() alors vous voudrez probablement jeter un œil à cURL

2
Nev Stokes

Si le fichier est local, votre commentaire sur SITE_PATH suggérer, c'est assez simple il suffit d'exécuter le script et de mettre en cache le résultat dans une variable en utilisant fonctions de contrôle de sortie :

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;
}

Si c'est distant comme beaucoup d'autres l'ont dit curl est le chemin à parcourir. S'il n'est pas présent, essayez socket_create ou fsockopen . Si rien ne fonctionne ... changez d'hébergeur.

2
Julien Roncaglia

Si vous l'avez disponible, utiliser curl est votre meilleure option.

Vous pouvez voir s'il est activé en faisant phpinfo() et en recherchant la page pour curl.

S'il est activé, essayez ceci:

$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