Facebook LinkedIn SourceForge Twitter RSS LastFM
logologo

Réimplémenter la fonction file_put_contents() en PHP

Geoffray Warnants|26/08/2013|60 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

43 commentaires postés

cephalexin keflex 500 mg oral capsule
07/06/2020 08:45Posté par cephalexin keflex 500 mg oral capsule
cephalexin keflex 500 mg oral capsule
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 réactifs?? 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 réagit plus. Ne serait-ce pas temps de se bouger un peu. D?après 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 réagit plus. Ne serait-ce pas temps de se bouger un peu. D?après 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 activités ? Toutefois, je pense que beaucoup de personnes trouveront encore une solution à leurs problèmes 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.
order clomid
19/05/2020 05:01Posté par order clomid
order clomid
Martin JIK
15/05/2020 21:54Posté par Martin JIK
l'incompatibilité, c'est bien un problème récurrent pour les aventuriers du PHP, et pourtant il en existe un beau panel... heureusement qu'il y a encore de super-dév 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 problème. Je peux dire qu?il m?a donné une petite idée. 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
acetaminophen 500 mg tabs
02/05/2020 20:26Posté par acetaminophen 500 mg tabs
acetaminophen 500 mg tabs
cialis 20 mg
02/05/2020 09:52Posté par cialis 20 mg
cialis 20 mg
cialis otc
30/04/2020 22:42Posté par cialis otc
cialis otc
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 matière 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 ?
cialis online no prescription
21/04/2020 00:39Posté par cialis online no prescription
cialis online no prescription
buy cialis online
20/04/2020 03:20Posté par buy cialis online
buy cialis online
generic cialis
15/04/2020 02:08Posté par generic cialis
generic cialis
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'hésite pas à en faire d'autre
hydroxychloroquine mexico
29/03/2020 16:49Posté par hydroxychloroquine mexico
hydroxychloroquine mexico
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 même sur ubuntu
JimDak
25/03/2020 07:02Posté par JimDak
Grâce au confinement, je redécouvre à nouveau ce site que j'ai suivi depuis logntemps
Mika Gem
23/03/2020 14:14Posté par Mika Gem
Un blog qui possède un potentiel énorme, merci à toi
Riri Leo
20/03/2020 14:30Posté par Riri Leo
Merci pour l'astuce, cela m'est important même en cette période
Luc Paul
19/03/2020 14:18Posté par Luc Paul
Un concept assez unique comme blog, bravo pour ce détail
Morgane Sira
19/03/2020 11:26Posté par Morgane Sira
Une bonne idée, je dévore tout les articles de ce blog très rapidement
marinaclaire
18/03/2020 14:10Posté par marinaclaire
Cela fait un moment que vous n'avez plus publié de nouveaux billets. Espérant 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
Grâce à tes astuces, j'ai pu accélérer mon travail aujourd'hui
Leo Fevre
26/02/2020 08:27Posté par Leo Fevre
Même aujourd'hui, j'utilise encore cette fonctionnalité.
Ezio Lafrange
24/02/2020 13:25Posté par Ezio Lafrange
Ce truc m'est encore utile, jusqu'à présent
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, même si ça date, c'est toujours utile.
Kev
17/02/2020 15:29Posté par Kev
Même si cela date, cette fonctionnalité demeure un incontournable, même de nos jour.
Jean Rocher
17/02/2020 11:38Posté par Jean Rocher
Cette fonction est vraiment important pour les développeurs comme moi
Jonas
13/02/2020 08:58Posté par Jonas
Bonjour, je vois que l?article a été publié il y a quelques années mais je suis encore novice dans le domaine et j?aimerai bien savoir où est-ce que je dois commencer. Je suis passionné de développement 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