Facebook LinkedIn SourceForge Twitter RSS LastFM
logologo

Rimplmenter la fonction file_put_contents() en PHP

Geoffray Warnants|26/08/2013|63 commentaires

J'en convient, l'idée de vouloir faire pareille chose peut paraître farfelue. Et pourtant ! Quelle ne fût pas ma surprise, lorsque lors d'une intervention sur une application dont on m'avait innocemment caché les caractéristiques de l'hébergement, je me suis rapidement retrouvé face à l'erreur :

Fatal error: Call to undefined function: file_put_contents()

Et pareil constat avec sa consoeur :

Fatal error: Call to undefined function: file_get_contents()

Je crus d'abord à une farce. Puis à une restriction volontaire de l'hébergeur via la directive disable_functions, ne cessant néanmoins de me demander quelle obscure raison pouvait motiver cet acte de pur sadisme. Mais un rapide phpinfo() me révéla bien vite la triste réalité de la situation : j'étais là sur un antédiluvien serveur PHP 4.2, et ces fonctions aujourd'hui ô combien familières n'existaient tout simplement pas encore dans cette antique version du langage parue en 2002 !

Même si les statistiques mondiales collectées par w3techs.com (août 2013) permettent d'estimer qu'aujourd'hui moins de 3% des hébergements PHP fonctionnent encore en PHP 4 et que ce chiffre tend lentement vers 0 dans une longue agonie, voici malgré tout un patch permettant de rendre vie à ce couple de fonctions bien utiles. Bien conscient du peu d'intérêt qu'il pourra susciter, je le dédie spécialement au prochain Marty McFly du web qui se retrouvera tout comme moi propulsé dans une lointaine époque.

if (!function_exists('file_put_contents')) {
    function file_put_contents($filename, $data, $flags=0, $context=null) {
        $fopen_args = array(
            $filename,
            (($flags&FILE_APPEND) == FILE_APPEND) ? 'a' : 'w',
            (($flags&FILE_USE_INCLUDE_PATH) == FILE_USE_INCLUDE_PATH)
        );
        if (is_resource($context)) {
            $fopen_args[] = $context;
        }
        if (($fd = call_user_func_array('fopen', $fopen_args)) !== false) {
            if (($flags&LOCK_EX) == LOCK_EX && !flock($fd, LOCK_EX)) {
                fclose($fd);
                return false;
            }
            for ($written=0, $l=strlen($data); $written < $l; $written += $nb) {
                if (($nb = fwrite($fd, substr($data, $written))) === false) {
                    if (($flags&LOCK_EX) == LOCK_EX) {
                        flock($fd, LOCK_UN);
                    }
                    fclose($fd);
                    return false;
                }
            }
            if (($flags&LOCK_EX) == LOCK_EX) {
                flock($fd, LOCK_UN);
            }
            fclose($fd);
            return $written;
        }
        return false;
    }
}

if (!function_exists('file_get_contents')) {
    function file_get_contents($filename, $use_include_path=false, $context=null, $offset=-1, $maxlen=-1) {
        $fopen_args = array($filename, 'r', $use_include_path);
        if (is_resource($context)) {
            $fopen_args[] = $context;
        }
        if (($fd = call_user_func_array('fopen', $fopen_args)) !== false) {
            if ($offset > 0) {
                fseek($fd, $offset);
            }
            $buffer = '';
            while (!feof($fd) && ($maxlen < 0 || ($r=$maxlen-strlen($buffer)) > 0)) {
                if (($data = fread($fd, ($maxlen < 0 || $r > 8192) ? 8192 : $r%8192)) === false) {
                    fclose($fd);
                    return false;
                }
                $buffer .= $data;
            }
            fclose($fd);
            return $buffer;
        }
        return false;
    }
}

<<< Retour vers le futur

Vos commentaires

35 commentaires postés

Michel
17/04/2022 21:53Posté par Michel
Bonjour Geoffray,

Travaillez vous freelance? j'ai des jobs pour vous (remote,pas d'horaire) pour des dev php et js
online pharmacy
03/06/2020 00:04Posté par online pharmacy
I am really enjoying the theme/design of your weblog.
Do you ever run into any web browser compatibility issues?
A small number of my blog visitors have complained about my website not operating correctly in Explorer but looks great in Firefox.

Do you have any solutions to help fix this problem?
Christiana Robert
01/06/2020 23:56Posté par Christiana Robert
Pourquoi n?y a-t-il que les sites dont on a besoin le plus qui ne sont plus ractifs?? Je me demande s?il n?y a que moi qui n?a pas de la chance dans la vie.
LauraJ21
01/06/2020 11:40Posté par LauraJ21
J?avoue que je ne comprends rien de rien de ce truc que vous crivez. Mais ce que je vois, il sert quelque chose et a aid pas mal de personnes. Est-ce que vous pouvez m?expliquer davantage ?
buy amoxicilina 500 mg online
30/05/2020 08:21Posté par buy amoxicilina 500 mg online
buy amoxicilina 500 mg online
Alice021
29/05/2020 07:28Posté par Alice021
Je me demande pourquoi ce site ne ragit plus. Ne serait-ce pas temps de se bouger un peu. D?aprs ce que je vois, il y a beaucoup de gens qui comptent sur vous et sur votre savoir-faire.
Alice021
29/05/2020 07:28Posté par Alice021
Je me demande pourquoi ce site ne ragit plus. Ne serait-ce pas temps de se bouger un peu. D?aprs ce que je vois, il y a beaucoup de gens qui comptent sur vous et sur votre savoir-faire.
Jeanne307
26/05/2020 17:45Posté par Jeanne307
Je suis tomb par hasard sur cet article, et j?ai fini de parcourir le site en entier. Vous avez aid pas mal de gens, mais pourquoi avez-vous stopp les activits ? Toutefois, je pense que beaucoup de personnes trouveront encore une solution leurs problmes dans vos posts.
generic cialis
20/05/2020 18:41Posté par generic cialis
What's up, its pleasant paragraph regarding media print, we completely acknowledge media is a
not bad seed of facts.
Martin JIK
15/05/2020 21:54Posté par Martin JIK
l'incompatibilit, c'est bien un problme rcurrent pour les aventuriers du PHP, et pourtant il en existe un beau panel... heureusement qu'il y a encore de super-dv comme vous qui partagent encore ce genre d'astuces
David Jr.
12/05/2020 10:55Posté par David Jr.
Je suis tomb sur le message en essayant de trouver une solution mon problme. Je peux dire qu?il m?a donn une petite ide. Si seulement vous tes encore l pour m?clairer davantage. En tout cas, merci.
cvs acetaminophen 500mg
11/05/2020 00:50Posté par cvs acetaminophen 500mg
hi!,I like your writing so a lot! proportion we be in contact
more approximately your article on AOL? I need an expert on this area to resolve my problem.
Maybe that is you! Taking a look forward to look you.
Paul Marcel Juvenas
10/05/2020 01:12Posté par Paul Marcel Juvenas
le blog est super ancien, mais j'ai l'impression de lire des indices qui sont encore pertinents dans le PHP d'aujourd'hui... ce serait bien si des "sages" comme vous revenaient de temps en temps pour laisser d'autres conseils
jean marc
30/04/2020 17:15Posté par jean marc
salut, on est aujourd'hui la version 7 ou plus je crois de PHP, ce serait bien que vous ventiez d'autres infos et astuces pratiques sur ce qu'on peut et peut pas faire de nos jours
Fidelis86
24/04/2020 12:06Posté par Fidelis86
Je lis et relis cet article trouv par hasard en essayant de glaner des infos en matire de dev web, et je me dis que je suis encore un ignare de chez ignare? dommage que ce blog n?est plus aliment? pourquoi pourquoi ?
Marie
10/04/2020 10:12Posté par Marie
Merci mec pour le partage de ces astuces
ryan
02/04/2020 10:05Posté par ryan
Pouhahahaha, merci mec pour le partage, n'hsite pas en faire d'autre
Jade Live
25/03/2020 15:11Posté par Jade Live
Merci pour cette astuce incroyable
Jules Rim
25/03/2020 12:42Posté par Jules Rim
Moi j'utilise tout le temps firefox mme sur ubuntu
JimDak
25/03/2020 07:02Posté par JimDak
Grce au confinement, je redcouvre nouveau ce site que j'ai suivi depuis logntemps
Mika Gem
23/03/2020 14:14Posté par Mika Gem
Un blog qui possde un potentiel norme, merci toi
Riri Leo
20/03/2020 14:30Posté par Riri Leo
Merci pour l'astuce, cela m'est important mme en cette priode
Luc Paul
19/03/2020 14:18Posté par Luc Paul
Un concept assez unique comme blog, bravo pour ce dtail
Morgane Sira
19/03/2020 11:26Posté par Morgane Sira
Une bonne ide, je dvore tout les articles de ce blog trs rapidement
marinaclaire
18/03/2020 14:10Posté par marinaclaire
Cela fait un moment que vous n'avez plus publi de nouveaux billets. Esprant votre retour, amicalement !
Laura Dore
12/03/2020 08:39Posté par Laura Dore
Je me surprend toujours de voir de nouvelles choses sur ce site, merci au proprio
Clea Marie
11/03/2020 13:05Posté par Clea Marie
Grce tes astuces, j'ai pu acclrer mon travail aujourd'hui
Leo Fevre
26/02/2020 08:27Posté par Leo Fevre
Mme aujourd'hui, j'utilise encore cette fonctionnalit.
Ezio Lafrange
24/02/2020 13:25Posté par Ezio Lafrange
Ce truc m'est encore utile, jusqu' prsent
Joe Satin
24/02/2020 08:59Posté par Joe Satin
Encore merci pour ces informations monsieur.
Paul David
18/02/2020 16:40Posté par Paul David
C'est l que je me rend compte que je suis encore nul en codes, merci pour le partage.
Hugo Delle
18/02/2020 13:27Posté par Hugo Delle
merci pour ces indications, mme si a date, c'est toujours utile.
Kev
17/02/2020 15:29Posté par Kev
Mme si cela date, cette fonctionnalit demeure un incontournable, mme de nos jour.
Jean Rocher
17/02/2020 11:38Posté par Jean Rocher
Cette fonction est vraiment important pour les dveloppeurs comme moi
Jonas
13/02/2020 08:58Posté par Jonas
Bonjour, je vois que l?article a t publi il y a quelques annes mais je suis encore novice dans le domaine et j?aimerai bien savoir o est-ce que je dois commencer. Je suis passionn de dveloppement d?application et je souhaite m?initier. Si quelqu?un pourrait m?aider svp.

Réagir à cet article

*


(Ne sera pas publiée, servira uniquement à afficher votre gravatar)


(Lien en dur et dofollow)

zend framework