8768 sujets

Développement web côté serveur, CMS

Bonjour,
Je souhaite enregistrer des sonnées sur serveur.
Actuellement, je fais
file_put_contents("fichier.txt",$variable,FILE_APPEND);

Mais, cela prends de la place sur le serveur (où le stockage est très faible).
Auriez-vous une idée pour ne pas utiliser de stockage ici (sans API, de manière simple), comme un stockage externe sur un site X (je ne sais pas si ça existe, ni comment ça fonctionnerait)...

Merci !
Si on zippe, le PHP pourra-t-il toujours le lire ?
Si on compile en binaire, ça ne va pas plutôt rajouter de la place (étant donné que A devient 01000001 par exemple) ?

Merci !
Modérateur
Bonjour,

Il existe plein de possibilités en ce qui concerne la manipulation de fichiers compressés.

Ci-dessous 3 fonctions php pour lire un fichier compressé, écrire dans un fichier compressé (en effaçant ce qu'il y avait avant), et ajouter des données dans un fichier compressé.

Le fichier doit avoir l'extension .gz.

Le problème est que pour "ajouter" des données à un fichier compressé, il faut le lire, le décompresser, lui ajouter les données, le compresser et enfin l'écrire. C'est assez inefficace.


function gz_get_contents($f)
{
	$z=gzopen($f,"r");
	$r="";
	while($s=gzread($z,8192)) $r.=$s;
	gzclose($z);
	if($s==="") return $r;
	return false;
}
function gz_put_contents($f,$s)
{
	$z=gzopen($f,'w9');
	gzwrite($z,$s);
	gzclose($z);
}
function gz_append_contents($f,$s)
{
	$a=gz_get_contents($f);
	$z=gzopen($f,'w9');
	gzwrite($z,$a.$s);
	gzclose($z);
}

Exemple d'utilisation de gz_get_contents
$f="a.txt.gz";
$s=gz_get_contents($f);

Exemple d'utilisation de gz_put_contents
$f="a.txt.gz";
$s="Toto va à la plage !";
gz_put_contents($f,$s);

Exemple d'utilisation de gz_append_contents
$f="a.txt.gz";
$s="Toto va à la plage !";
gz_append_contents($f,$s);

Amicalement,
Effectivement, c'est possible mais complexe.
Je prendrai cette solution si aucune autre n'est possible.
Merci !
Modérateur
Bonjour,

Il y a des tas de combines (faire du ftp avec php, utiliser curl, etc.) qui toutes dépendent de ta solution d'hébergement actuelle, et de la solution d'hébergement qui serait retenue pour les fichiers en surnombre.

EDIT: ça dépend aussi de ce que tu fais de tes fichiers. Par exemple, il est relativement simple de stocker tes images ailleurs. Il suffit ensuite de mettre l'url de tes images dans l'attribut "src" de tes balise <img>. Même si les images sont sur un autre serveur, ça va marcher (dans le cas général).

Comme on n'est pas devin, et qu'on ne connait pas ce dont tu disposes, on ne peut pas répondre à ta question avec plus de précision.

Mais le plus efficace serait sans aucun doute de changer de solution d'hébergement pour disposer de plus d'espace disque. Smiley cligne

Amicalement,
Modifié par parsimonhi (17 Jan 2021 - 13:43)
Merci pour la nouvelle réponse.
J'utilise actuellement 000webhost gratuit (car je ne souhaite pas acheter d'hébergeur).

parsimonhi a écrit :
EDIT: ça dépend aussi de ce que tu fais de tes fichiers. Par exemple, il est relativement simple de stocker tes images ailleurs. Il suffit ensuite de mettre l'url de tes images dans l'attribut "src" de tes balise <img>. Même si les images sont sur un autre serveur, ça va marcher (dans le cas général).

Pour les images, c'est bien ce que je fais. Mais je souhaiterais ici stocker un fichier .txt ou .csv qui doit pouvoir ajouter des nouvelles lignes par rapport à ce que pourrait faire l'utilisateur (champs remplis).

parsimonhi a écrit :
faire du ftp avec php, utiliser curl, etc.

Ça veut dire quoi ? Il faut faire quoi ? Ça fonctionne comment ?

Merci !
Modérateur
Bonjour,
js_html a écrit :
Ça veut dire quoi ? Il faut faire quoi ? Ça fonctionne comment ?

Ça dépend de ce que tu as sous la main comme serveur.

EDIT: tu as le droit de faire quoi sur ton serveur ? tu peux y installer des exécutables ? tu peux changer la configuration php ? tu peux changer la configuration apache ? etc.

Amicalement,
Modifié par parsimonhi (17 Jan 2021 - 14:09)
Ce que j'ai :
- Installer WordPress
- Gestionnaire de fichiers
- Redirections
- Base de données MySQL (1?Go max, 100 tables max, 2 BDD max)
- database phpMyAdmin (1?Go max, 100 tables max, 2 BDD max)
- Tâches Cron
- Protection par mot de passe
- Protection Hotlink
- Réparer la propriété du fichier
- Modifier la version de PHP
- 3 000?Mo bande passante mensuelle
- 300 Mo espace disque
- utilisation de l'inode (10 000)
- .htaccess

Ce que je n'ai pas :
- Pages d'erreur
- SEO Toolkit
- Sauvegardes de fichiers
- Comptes FTP
- Domaines, sous-domaines, cloudfare
- MySQL à distance
- Éditeur DNS
- Configuration PHP
- SSH Access
- Gestionnaire de cache
- GIT
- SSL
- Gestionnaire d'IP
- Gestionnaire d'index de dossiers
- Journal d'activités
+ ce qui n'est pas dit là
Modérateur
Bonjour,

Bon, en gros, ton site est fait avec wordpress, et tu ne peux uploader des fichiers que via wordpress et ses éventuels plugins (vu que t'as pas ftp) ?

C'est ça ?

Amicalement,
Non, je pourrais utiliser Wordpress mais je ne le fais pas.
Je ne l'ai même pas activé.

Le transfert FTP, c'est marqué "activé". J'ai un nom d'hôte, port, nom d'utilisateur et mot de passe FTP. Mais je n'ai pas accès à "comptes FTP".
Modérateur
Bonjour,

1) tu mets tes fichiers comment sur le serveur ?

2) si tu fais un phpinfo(), est-ce que FTP support est à enable ?

3) si tu fais un phpinfo(), est-ce que cURL support est à enable ?

4) les fichiers que tu mets à jour avec file_put_contents(), c'est à quelle fréquence ? une fois de temps en temps ? toutes les secondes ? des dizaines de fois par seconde ?

5) est-ce que tu as besoin d'aller voir le contenu de ces fichiers ? à quelle fréquence ? une fois de temps en temps ? toutes les secondes ? des dizaines de fois par seconde ?

Amicalement,
Modifié par parsimonhi (17 Jan 2021 - 16:59)
1) Je vais sur https://files.000webhost.com, une page avec plein de dossiers et fichiers, où je peux cliquer dessus pour les modifier, où je peux upload, où je peux en créer de nouveaux...

2) FTP support : enabled

3) cURL support : enabled

4) et 5) Il faut que ça ajoute à chaque connexion de l'utilisateur mais je n'irais l'ouvrir que rarement.
Modérateur
Bonjour,

Bon, si je comprends bien, c'est un fichier de logs que tu veux faire.

T'as besoin de conserver ces logs longtemps ?

Je vois que pour ta base, tu as le droit à 1Go de données. C'est pas mal. Si tu décidais de stocker dans ta base 1 ligne pour chaque connexion d'un utilisateur d'environ 100 octets, et si tu décidais de consacrer 10% de ta base à cette log, ça te permet d'y stocker 1 million de lignes. Ça fait un paquet de connexion. Je ne sais pas ce que tu envisages de faire, mais quand t'en seras là, tu ne seras sans doute plus chez le même hébergeur, tu te seras déjà marié au moins 3 fois, t'auras déjà 2 gamins, sans compter le cheval de ta fille que tu auras acheté suite à un de ses gros caprices, et dont il faudra t'occuper tous les jours parce qu'elle n'en voudra plus.

Plus sérieusement, je te conseille de découper ta log en plusieurs fichiers, par exemple, un fichier par mois pour commencer, puis éventuellement un fichier par jour ensuite. Et de temps en temps, tu transferts tes logs anciennes sur un autre serveur, via par exemple un petit code php qui ferait du ftp (ou tu te les envoies à toi via par exemple un email). Mais tu gardes toujours le dernier fichier de log sur ton serveur principal, de manière à ce que les opérations d'écriture se fassent sur ce même serveur. Ça me parait plus sérieux comme plan que d'aller écrire en permanence dans une log située sur un serveur distant.

Eventuellement, comme tu as plus de place dans ta base que sur disque, tu peux stocker tes logs récentes dans ta base, et de temps en temps (par exemple au bout de 100 000 connexions, ce qui est déjà considérable), tu exportes ta table de log dans un fichier que tu t'envoies par mail ou que tu envoies sur un autre serveur, tout ça toujours via du php.

Reste à mettre au point ce code php et voir si ton hébergeur te laisse vraiment faire ça, ou bien tu fais cette opération à la main une fois de temps en temps (parce que bon, 100 000 connexions, t'es pas prêt de les voir selon moi). En gros, pour faire du ftp, tu auras besoin des fonctions php ftp_connect(), ftp_login(), et ftp_put().

Un exemple ici (je n'ai pas testé) : https://phpsources.net/code/php/ftp/863_transfert-ftp

Amicalement,
Modifié par parsimonhi (17 Jan 2021 - 21:58)
Non, ce n'est pas un fichier de log, c'est enregistrer les réponses formulaires, réponses que je dois conserver longtemps.

OK, 1 Go, je ne voyais pas combien ça faisait, mais du coup ça va. (Je n'ai jamais utilisé de tables de données)

parsimonhi a écrit :
découper [...] en plusieurs fichiers, par exemple, un fichier par mois

Ce sont les tables, c'est ça ?

Et oui, je ne suis pas près d'avoir 100 000 connexions.

Il faut utiliser la BDD phpMyAdmin ou MySQL ?
Comment ça fonctionne ?

Merci !
Modérateur
Bonjour,
js_html a écrit :
OK, 1 Go, je ne voyais pas combien ça faisait, mais du coup ça va. (Je n'ai jamais utilisé de tables de données)
....
Il faut utiliser la BDD phpMyAdmin ou MySQL ?
Comment ça fonctionne ?

Si tu stokes dans ta base, tu fais effectivement une table (que tu peux créer avec phpmyadmin, ce qui est le plus simple, ou éventuellement avec php, mais dans ton cas, ça n'a pas vraiment d'intérêt vu que tu ne vas le faire qu'une seule fois), et tu ajoutes chaque nouvelle réponse de l'utilisateur dans une ligne de la table via du code php.

La base de données à laquelle tu accèdes via phpmyadmin est la même que celle que tu modifies via du code php si tu utilises les mêmes informations de connexion (même nom de base, même identifiant). Phpmyadmin n'est en fait qu'un outil pour voir ce qu'il y a dans ta base et éventuellement la modifier.

Amicalement,
Merci beaucoup parsimonhi !
Ainsi, je vais utiliser phpMyAdmin, séparé en tables. Et j'ajoute les données avec le PHP directement dans la BDD.
Merci !
Meilleure solution