48 votes

Alternative à file_get_contents ?

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

Le problème est que l'accès aux fichiers URL d'un serveur est désactivé. Je ne peux pas l'activer, c'est une question d'hébergement.

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

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

Est-ce possible ?

0 votes

SITE_PATH fait-il partie de votre site ? Ou bien est-ce qu'il se trouve ailleurs ?

0 votes

Il fait partie de mon site. SITE_PATH = ' mondomaine.com ' ;

0 votes

123voto

Pelle ten Cate Points 2613

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

0 votes

Mais j'obtiens toujours "CURL n'est pas installé !" J'ai pourtant activé les extensions php_curl et php_openssl.

1 votes

"CURL is not installed" signifie que vous devez installer cURL. Ce qui est une situation rare de nos jours, la plupart des systèmes l'ont installé par défaut. La plupart des distributions basées sur dpkg fournissent un paquetage appelé php5_curl qui est livré avec les bonnes dépendances et directives de configuration.

13voto

Tu devrais 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 ceci

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

3voto

Alin Purcaru Points 21373

Oui, si les wrappers d'URL sont désactivés, vous devriez utiliser des sockets ou, mieux encore, la fonction cURL bibliothèque.

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 avec l'URL du site. /var/www/... plutôt que http://domain.tld/... .

2voto

VirtualBlackFox Points 9565

Si le fichier est local comme votre commentaire sur SITE_PATH suggérer, c'est assez simple : il suffit d'exécuter le script et de mettre le résultat en cache dans une variable à l'aide de l'attribut fonctions de commande 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 une télécommande comme beaucoup d'autres l'ont dit curl est la voie à suivre. Si elle n'est pas présente, essayez socket_create o fsockopen . Si rien ne fonctionne... changez de fournisseur d'hébergement.

2voto

Nev Stokes Points 3162

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X