Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

fopen

15 réponses
Avatar
mb
Bonjour ,

si j'ai créé un fichier contenant 4 octets
xxxx

comment faire pour écrire yyyy à la position 10
en laissant nuls ( ou indéterminés ) les intermédiaires et obtenir
xxxx000000yyyy

j'ai essayé différents modes pour fopen mais il semble
que fseek ne passe jamais le eof
le mode binaire ( b ) n'a pas l'air de faire mieux

merci

--
mb

5 réponses

1 2
Avatar
Mickael Wolff
On 07/20/11 01:47, mb wrote:
mais je pense que
un fcreate , un fopen ( read , write , read-write )
à condition que le mode w ne remette pas le size de la file à 0
associés à fseek ( avec les 3 possibilités ) et ftruncate
auraient suffit



Si ça suffit à ton besoin, créé ces fonctions dans un fichier PHP.
Mais pour l'inclusion dans PHP, faudra le faire en C et avoir une bonne
argumentation pour que ce soit accepté.

mais il semble que php se soit développé trop vite



Ça n'a rien à voir avec PHP. Comme je l'ai dit, c'est la faute à
POSIX, et même UNIX (j'ai relu le manpage de la fonction open, et
effectivement, c'est un comportement hérité d'UNIX). D'accord, ces flags
ne sont pas très heureux, ils sont même trompeurs.

Quand à ton idée d'avoir plusieurs fonctions pour ouvrir un fichier,
selon les fonctionnalités qu'on souhaite utiliser, ce n'ést pas
forcément une bonne idée. En l'occurrence, à l'époque où la fonction a
été conçue, il fallait respecter des contraintes importantes liées à la
mémoire et à la puissance des processeurs. Une fonction unique était
plus pertinente.

Mais c'est vrai que PHP pourrait fournir une interface plus simple--
Mais il en faudrait un réel usage, ce qui n'est pas le cas.
Avatar
mb
In article <4e2bb509$0$7293$,
Mickael Wolff wrote:

Si ça suffit à ton besoin, créé ces fonctions dans un fichier PHP.
Mais pour l'inclusion dans PHP, faudra le faire en C et avoir une bonne
argumentation pour que ce soit accepté.



le principe de l'inclusion d'un php par du C m'échappe totalement
ceci dit je n'ai pas besoin d'une puissance extraordinaire
( juste amateur )

mais d'accord , je vais écrire des fct php "singeant" le comportement
dont j'ai l'habitude

> mais il semble que php se soit développé trop vite

Ça n'a rien à voir avec PHP. Comme je l'ai dit, c'est la faute à
POSIX, et même UNIX (j'ai relu le manpage de la fonction open, et
effectivement, c'est un comportement hérité d'UNIX). D'accord, ces flags
ne sont pas très heureux, ils sont même trompeurs.



je ne connais pas très bien ce qu'il se passe dans les systèmes
mais sur ma machine les modes read write me paraissent plus clairs
les goûts et les couleurs ....

Quand à ton idée d'avoir plusieurs fonctions pour ouvrir un fichier,
selon les fonctionnalités qu'on souhaite utiliser, ce n'ést pas
forcément une bonne idée. En l'occurrence, à l'époque où la fonction a
été conçue, il fallait respecter des contraintes importantes liées à la
mémoire et à la puissance des processeurs. Une fonction unique était
plus pertinente.

Mais c'est vrai que PHP pourrait fournir une interface plus simple--
Mais il en faudrait un réel usage, ce qui n'est pas le cas.



je dois en conclure que read write dans un fichier est peu utilisé ?

pourtant si un fichier contient des données de taille fixe
par exemple des UInt32 ( désolé le type php ne me reviens pas )
les lire et les écrire directement me semble plus efficace qu'une base
de donnée , mais il faudrait mesurer

bonne journée

--
mb
Avatar
Mickael Wolff
On 07/25/11 19:36, mb wrote:
Si ça suffit à ton besoin, créé ces fonctions dans un fichier PHP.
Mais pour l'inclusion dans PHP, faudra le faire en C et avoir une bonne
argumentation pour que ce soit accepté.



le principe de l'inclusion d'un php par du C m'échappe totalement
ceci dit je n'ai pas besoin d'une puissance extraordinaire
( juste amateur )



Non, tu m'as mal compris. PHP est écrit en C. Les extensions sont
écrites en C. Donc pour que PHP propose par défaut les fonctions que tu
penses meilleures, il faut créer un module PHP en C.

je ne connais pas très bien ce qu'il se passe dans les systèmes
mais sur ma machine les modes read write me paraissent plus clairs
les goûts et les couleurs ....



Sauf que ce ne sont pas des fonctions standards. Or PHP est portable
et c'est construit autour de standards.


je dois en conclure que read write dans un fichier est peu utilisé ?



Ouvrir un fichier en PHP en mode binaire n'est pas courant.

pourtant si un fichier contient des données de taille fixe
par exemple des UInt32 ( désolé le type php ne me reviens pas )
les lire et les écrire directement me semble plus efficace qu'une base
de donnée , mais il faudrait mesurer



Comme tu le dis, il faudrait mesurer. Mais accéder directement à un
fichier depuis PHP a plusieurs gros inconvenient :
- accès concurrent (race conditions)
- impossibilité de répartir les charges avec plusieurs front ends
efficacement
- impossibilité de déporter les IO daccès aux données sur un autre
serveur

Bref, la micro-optimisation d'accéder directement à un fichier pour
changer un nombre a des effets de bords importants.
Avatar
mb
In article <4e2e454b$0$16426$,
Mickael Wolff wrote:

Non, tu m'as mal compris. PHP est écrit en C. Les extensions sont
écrites en C. Donc pour que PHP propose par défaut les fonctions que tu
penses meilleures, il faut créer un module PHP en C.



je ne les pense pas meilleures , j'ai juste parlé d'habitude
je ne savais pas qu'on pouvait écrire en C des fonctions "personnelles"
mais la compilation devrait se faire sur le serveur , pour compatibilité
je me trompe ?
je doute que mon fai accepte un truc pareil ! et de toutes façons j'en
suis incapable

> je ne connais pas très bien ce qu'il se passe dans les systèmes
> mais sur ma machine les modes read write me paraissent plus clairs
> les goûts et les couleurs ....

Sauf que ce ne sont pas des fonctions standards.


problèmes de portabilité ?

Comme tu le dis, il faudrait mesurer. Mais accéder directement à un
fichier depuis PHP a plusieurs gros inconvenient :

- accès concurrent (race conditions)


accès au fichier par plusieurs connexions ?
peut-être dis-je une bêtise mais la fonction open ne bloque-t-elle pas
l'accès au autres qui attendent le close ?

- impossibilité de répartir les charges avec plusieurs front ends
efficacement
- impossibilité de déporter les IO daccès aux données sur un autre
serveur



ceci est dépasse ma compréhension

Bref, la micro-optimisation d'accéder directement à un fichier pour
changer un nombre a des effets de bords importants.



effet de bord ? c'est en relation avec les accès multiples ?

bonne journée

--
mb
Avatar
Mickael Wolff
On 07/26/11 15:05, mb wrote:
je ne les pense pas meilleures , j'ai juste parlé d'habitude
je ne savais pas qu'on pouvait écrire en C des fonctions "personnelles"



PHP est un logiciel libre, tu peux le modifier comme tu veux.
D'ailleurs, c'est très intéressant à lire comme logiciel.

mais la compilation devrait se faire sur le serveur , pour compatibilité
je me trompe ?



Pas la compilation, mais le module devra être déployé sur le serveur,
évidemment.

- accès concurrent (race conditions)


accès au fichier par plusieurs connexions ?
peut-être dis-je une bêtise mais la fonction open ne bloque-t-elle pas
l'accès au autres qui attendent le close ?



Ah non. fopen ouvre un fichier, point. Il est impossible d'empêcher
un processus concurrent de lire ou écrire un fichier. Tu peux poser un
lock sur le fichier avec flock, mais ça suppose que les autres processus
respectent la convention que tu adopte.

- impossibilité de déporter les IO daccès aux données sur un autre
serveur



ceci est dépasse ma compréhension



C'est un problème de répartition des charges. Sur un serveur Web, la
ressource critique et rare sont généralement les entrée-sorties sur le
système de fichiers. Ils sont intrinsèquement lents, soumis à des
limitations matérielles importante. C'est un gros problème qui est
souvent la cause d'effondrement des serveurs.

effet de bord ? c'est en relation avec les accès multiples ?



Oui, c'est une des raisons. L'ensemble de tes accès risquent de
bloquer le traitement des requêtes. Mais surtout, rien ne te garanti que
ce que tu lis et écrit dans le fichier y sera ou y est toujours.
1 2