Facebook LinkedIn SourceForge Twitter RSS LastFM
logologo

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

Geoffray Warnants|26/08/2013|62 commentaires

J'en convient, l'ide de vouloir faire pareille chose peut paratre farfelue. Et pourtant ! Quelle ne ft pas ma surprise, lorsque lors d'une intervention sur une application dont on m'avait innocemment cach les caractristiques de l'hbergement, 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'hbergeur via la directive disable_functions, ne cessant nanmoins de me demander quelle obscure raison pouvait motiver cet acte de pur sadisme. Mais un rapide phpinfo() me rvla bien vite la triste ralit de la situation : j'tais l sur un antdiluvien serveur PHP 4.2, et ces fonctions aujourd'hui combien familires n'existaient tout simplement pas encore dans cette antique version du langage parue en 2002 !

Mme si les statistiques mondiales collectes par w3techs.com (aot 2013) permettent d'estimer qu'aujourd'hui moins de 3% des hbergements 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'intrt qu'il pourra susciter, je le ddie spcialement 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

34 commentaires posts

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.
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
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 ?
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
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.

Ragir cet article

*


(Ne sera pas publie, servira uniquement afficher votre gravatar)


(Lien en dur et dofollow)

zend framework