Cette fonction donne du fil à retordre pour les développeurs php. Beaucoup d’hébergeurs comme 1and1 bloquent cette fonction pour éviter une quelconque attaque. Manuel php.net : file_get_contents — Lit tout un fichier dans une chaîne.
En gros, grâce à cette fonction, nous pouvons lire un fichier à partir d’une url. Celle-ci peut être très utile pour générer des miniatures et les afficher par la suite. Mais son plus gros problème est qu’elle n’est pas trop appréciée des hébergements, car on pourrait facilement la détourner de son but principal afin d’usurper du contenu sans autorisation.
Pour infos : voici un topic qui en parle
Il existe plusieurs façons de débloquer cette fonction auprès des hébergeurs, mais une doit retenir votre attention.
La première consiste à débloquer l’option de configuration allow_url_fopen.
Sa définition (très claire!) : Cette option active les versions étendues des fonctions d’accès aux fichiers, qui savent exploiter les URL. Les extensions par défaut permettent d’accéder aux fichiers distants avec les protocoles FTP ou HTTP. Certaines extensions comme zlib, peuvent ajouter d’autres fonctionnalités.
Vous pouvez soit la mettre en début de votre fichier php, ou alors dans un fichier php.ini.
// DEBUT D'UN FICHIER PHP
ini_set('allow_url_fopen', 'On');
// DEBUT DU FICHIER INI.PHP
allow_url_fopen = On
Grâce a cette petite astuce, la fonction file_get_contents devrait fonctionner, mais pour combien de temps. Sur la plupart de mes projets, j’utilisais cette fonction, mais elle est pour ma part trop instable. Beaucoup d’hébergeurs n’aiment pas trop que l’on ajoute des fichier de configuration en ( extension ini). On pourrait par exemple autoriser d’autres options bêtement comme register_globals mais quand on navigue un peu sur la toile, on peut remarquer que cette option est à proscrire!
Donc voyons un moyen d’obtenir le même rendu avec quelques lignes de codes différentes! Nous allons pour ce faire utiliser les fonctions de la librairie curl (si vous avez de la chance, cette librairie est incluse dans php). Curl permet de faire beaucoup de choses vachement cool comme récupérer des fichiers xml et afficher un flux RSS d’un site blog sur son site, ou encore de communiquer entre plusieurs serveurs, par le biais de protocoles comme HTTP, FTP ou encore FILE.
Par défaut, elle est désactivée sur les serveurs locaux : Pour l’activer -> (menu wampserver) -> PHP -> Extensions PHP -> (si extension php_curl décoché, cliquez dessus)
Appliquons-le à notre exemple :
// On sait que notre script affichera une image donc on définit les bons en-têtes
header('Content-type:image/jpg');
// Un exemple d'une variable contenant l'url d'une miniature que nous venons de créer (je vous passe le traitement)
$urlThumb = 'http://www.pimeo.fr/dossier1/images/thumb/toto_230x50.jpg';
// Pour commencer nous initialisons une connexion
$ch = curl_init();
// Nous lui demandons de retourner le resultat dans une variable que nous définirons plus bas.
// au lieu de l'afficher directement dans le navigateur
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// on lui définit une url (celle de l'url de la miniature)
curl_setopt($ch, CURLOPT_URL, $urlThumb);
// on exécute la requete curl que l'on retourne dans notre variable $data
$data = curl_exec($ch);
// on affiche enfin le résultat de cette variable
echo $data;
Et hop, plus besoin de la fonction file_get_contents. Bien entendu il faut se renseigner à l’avance si la librairie libcurl est activée sur votre hébergeur! 2 façons de le savoir :
1. Utiliser la fonction phpinfo();
2. Faire un petit test en php
// Condition si la méthode curl_init fonctionne : retourne un booléen
if(function_exists('curl_init')){
//si oui on effectue le traitement
echo 'ma fonction curl existe! je suis sauvé!';
// .... traitements
}
else{
//sinon elle n'existe pas sur le serveur
echo 'curl n\'est pas disonible sur mon serveur... je suis perdu!';
}
Documentation de la librairie curl
Des fautes de frappe ou d’orthographe? Une critique ? Une suggestion ?
N’hésitez pas à laisser un commentaire!
Pimeo Labs
Pimeo SRC
Oups! Cette partie est encore en construction mais sera disponible très prochainement!