Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

fopen( script.php, rt) => acces refuse

1 view
Skip to first unread message

Patrick 'Zener' Brunet

unread,
Oct 4, 2009, 9:12:17 AM10/4/09
to
Bonjour.

Navr� du bas niveau de la question, mais je n'ai pas trouv� avec Google:

Dans le cadre d'un serveur de contenu un peu complexe, j'ai un script qui va
inclure (@include) un certain nombre d'autres, qui sont donc des PHP,
mais auparavant il doit rassembler dans une structure des donn�es qui sont
r�parties dans ces m�mes scripts.

Et donc dans un but d'optimisation et aussi de simplicit� de programmation,
je voudrais que le ma�tre-script commence par les ouvrir comme des fichiers
pour en lire uniquement un header de 2 lignes (implant� comme un commentaire
au d�but de chaque script).

Cette ouverture par fopen("rt") �choue: le fichier n'existe pas.

J'ai v�rifi� que le path est bon et �a marche bien si l'extension n'est pas
.php, donc j'en d�duis que c'est le serveur qui est configur� pour que les
PHP ne soient accessibles qu'en ex�cution ?
A priori je ne ma�trise pas cet aspect de la config:
- il n'y a pas de .htaccess qui soit en rapport,
- je constate le probl�me sur le serveur de Test qui est EasyPHP,
- le serveur de production est un h�bergement mutualis� (OVH).
Si une telle protection est en place pour les PHP, je ne vois pas comment la
contourner depuis un script (faire des chmod ???).

* Une confirmation d'expert pour le sc�nario ?
* Une id�e de solution ?

La mienne est bien s�r d'�clater chaque script pour en extraire un fichier
descripteur qui soit lisible, mais �a signifie g�rer des paires au lieu de
fichiers uniques, ce qui n'est jamais bon pour la fiabilit�.

Merci.
--
Cordialement.

* Patrick BRUNET www.ipzb.fr www.ipzb-pro.com
* E-mail: lien sur http://zener131.eu/ContactMe

Olivier Miakinen

unread,
Oct 4, 2009, 11:20:18 AM10/4/09
to
Le 04/10/2009 15:12, Patrick 'Zener' Brunet a ᅵcrit :

>
> Dans le cadre d'un serveur de contenu un peu complexe, j'ai un script qui va
> inclure (@include) un certain nombre d'autres, qui sont donc des PHP,
> mais auparavant il doit rassembler dans une structure des donnᅵes qui sont
> rᅵparties dans ces mᅵmes scripts.
>
> Et donc dans un but d'optimisation et aussi de simplicitᅵ de programmation,
> je voudrais que le maᅵtre-script commence par les ouvrir comme des fichiers
> pour en lire uniquement un header de 2 lignes (implantᅵ comme un commentaire
> au dᅵbut de chaque script).

Ok.

> Cette ouverture par fopen("rt") ᅵchoue: le fichier n'existe pas.
>
> J'ai vᅵrifiᅵ que le path est bon et ᅵa marche bien si l'extension n'est pas
> .php, donc j'en dᅵduis que c'est le serveur qui est configurᅵ pour que les
> PHP ne soient accessibles qu'en exᅵcution ?

Alors ᅵa, j'ai vraiment du mal ᅵ le croire. Un fichier que tu n'arrives
pas ᅵ ouvrir, tu le renommes pour changer l'extension, ᅵa marche, puis
tu le renommes pour remettre .php et ᅵa ne marche plus ??? Avec comme
message d'erreur que le fichier *n'existe pas* ?????

Vᅵrifie, ᅵa me semble vraiment trop ᅵnorme. Tu vois ᅵa sous quel systᅵme
d'exploitation ?

> A priori je ne maᅵtrise pas cet aspect de la config:


> - il n'y a pas de .htaccess qui soit en rapport,

Attends voir... tu accᅵdes bien au fichier en direct, via le systᅵme de
fichiers, et pas via une url, n'est-ce pas ? Parce que si c'est via une
url (et que le serveur http a donc quelque chose ᅵ y voir, fichier
.htaccess et le toutime), il est tout ᅵ fait normal que tu ne puisses
pas lire son code source sans interprᅵtation.

> --
> Cordialement.

Tiens, ton dᅵlimiteur de signature est incorrect. Mais je crois qu'avec
la vieille version d'OE que tu utilises ᅵa ne peut se corriger qu'avec
OE-Quotefix.

Cordialement,
--
Olivier Miakinen

Patrick 'Zener' Brunet

unread,
Oct 5, 2009, 6:40:21 PM10/5/09
to
Bonsoir.

Je rᅵpond ᅵ ᅵa sᅵparᅵment parce que ᅵa risque de dᅵclencher un tollᅵ. Et
pourtant...

"Olivier Miakinen" <om+...@miakinen.net> a ᅵcrit dans le message
de news 4ac8aabf$1...@meta.neottia.net


> Le 04/10/2009 15:12, Patrick 'Zener' Brunet a ᅵcrit :

>> [...]

>> Cordialement.
>
> Tiens, ton dᅵlimiteur de signature est incorrect. Mais je crois
> qu'avec la vieille version d'OE que tu utilises ᅵa ne peut se
> corriger qu'avec OE-Quotefix.
>
> Cordialement,

J'ai OE-Quotefix, mais il me fait des saletᅵs en s'attaquant aussi ᅵ des
emails en HTML...
J'espᅵre que je l'ai mieux rᅵglᅵ cette fois.

J'ai aussi fait l'effort de migrer vers ThunderBird, mais j'ai fini par
revenir sur OE parce que je trouvais TB ingᅵrable sur deux points
essentiels:
- infoutu de me prᅵsenter les messages de news comme OE: groupᅵs par
conversations + les plus rᅵcents en haut + les suivis au sommet,
- gestion et insertion des signatures HTML absolument inepte, mᅵme avec les
plugins que j'ai pu trouver.

Je sais que c'est pas bien le HTML, mais pour faire des emails pros qui
ressemblent ᅵ quelque chose (mᅵme si le code lui-mᅵme est assez pourri),
c'est incontournable. De toute maniᅵre, quand la rᅵponse est passᅵe par
Lotus ou un autre truc dans le genre, c'est pas triste...

Bon, OE est capable de planter de temps en temps en insᅵrant la signature,
mais on vit avec, Notepad est mon ami pour sauver le texte...
Celui-ci est la v.6 de Win2000pro + quelques mises ᅵ jour... Bientᅵt je vais
migrer sur celui de XP, je finis de configurer la nouvelle station de comm
:o)

En attendant de trouver un truc qui marche comme JE veux, ou d'en ᅵcrire un
;-)

Patrick 'Zener' Brunet

unread,
Oct 5, 2009, 6:40:21 PM10/5/09
to
Bonsoir.

"Olivier Miakinen" <om+...@miakinen.net> a ᅵcrit dans le message
de news 4ac8aabf$1...@meta.neottia.net

> Le 04/10/2009 15:12, Patrick 'Zener' Brunet a ᅵcrit :
>>
>> Dans le cadre d'un serveur de contenu un peu complexe, j'ai un
>> script qui va inclure (@include) un certain nombre d'autres, qui
>> sont donc des PHP,
>> mais auparavant il doit rassembler dans une structure des donnᅵes
>> qui sont rᅵparties dans ces mᅵmes scripts.
>>
>> Et donc dans un but d'optimisation et aussi de simplicitᅵ de
>> programmation, je voudrais que le maᅵtre-script commence par les
>> ouvrir comme des fichiers pour en lire uniquement un header de 2
>> lignes (implantᅵ comme un commentaire au dᅵbut de chaque script).
>
> Ok.
>
>> Cette ouverture par fopen("rt") ᅵchoue: le fichier n'existe pas.
>>
>> J'ai vᅵrifiᅵ que le path est bon et ᅵa marche bien si l'extension
>> n'est pas .php, donc j'en dᅵduis que c'est le serveur qui est
>> configurᅵ pour que les PHP ne soient accessibles qu'en exᅵcution ?
>
> Alors ᅵa, j'ai vraiment du mal ᅵ le croire. Un fichier que tu
> n'arrives pas ᅵ ouvrir, tu le renommes pour changer l'extension, ᅵa
> marche, puis tu le renommes pour remettre .php et ᅵa ne marche plus
> ??? Avec comme message d'erreur que le fichier *n'existe pas* ?????
>
> Vᅵrifie, ᅵa me semble vraiment trop ᅵnorme. Tu vois ᅵa sous quel
> systᅵme d'exploitation ?
>

Oh que oui j'ai vᅵrifiᅵ ! J'ai changᅵ le maᅵtre script pour qu'il cherche
des ".test" et renommᅵ les fichiers en consᅵquence, et lᅵ ᅵa marche.
Mais ᅵvidemment plus question de les "includer" avec exᅵcution du PHP
ensuite, a priori.
Sauf peut-ᅵtre en dᅵclarant cette extension comme alias de ".php", mais ᅵ
mon avis ᅵa rᅵveillera le problᅵme initial.

J'ai dᅵjᅵ constatᅵ ce comportement sous Linux, avec le droit "r" manquant
pour le rᅵpertoire, il me semble...
La commande ls ne voit rien malgrᅵ le passage d'un nom explicite.

Par ailleurs, le message d'erreur est ce que le PHP renvoie dans le code
produit. Je doute qu'ils aient prᅵvu ᅵa, alors ᅵa doit se rabattre sur une
cause probable. Mais lᅵ c'est faux, le fichier existe et sans erreur dans
son nom.

Pour l'instant je teste en local sous Windows, mais j'ignore comment c'est
codᅵ dans EasyPHP. Ca ne me paraᅵt pas incohᅵrent.
Mais de toute maniᅵre je ne pourrai pas faire reposer l'architecture sur
cette solution s'il y a un tel alᅵa selon l'implᅵmentation de PHP utilisᅵe.

Tu y arrives ᅵ ouvrir des PHP avec un fopen toi ?

>> A priori je ne maᅵtrise pas cet aspect de la config:
>> - il n'y a pas de .htaccess qui soit en rapport,
>
> Attends voir... tu accᅵdes bien au fichier en direct, via le
> systᅵme de fichiers, et pas via une url, n'est-ce pas ? Parce que
> si c'est via une url (et que le serveur http a donc quelque chose ᅵ
> y voir, fichier .htaccess et le toutime), il est tout ᅵ fait normal
> que tu ne puisses pas lire son code source sans interprᅵtation.
>

Non, c'est bien par son path relatif et en mode fichier, pas en mode http.
En fait il n'y a pas de protocole, juste un nom de fichier, et c'est bien
l'extension qui fait que ᅵa marche ou pas.

Merci pour ta participation.

Olivier Miakinen

unread,
Oct 6, 2009, 3:53:38 AM10/6/09
to
Le 06/10/2009 00:40, Patrick 'Zener' Brunet a ᅵcrit :

>
> Oh que oui j'ai vᅵrifiᅵ ! J'ai changᅵ le maᅵtre script pour qu'il cherche
> des ".test" et renommᅵ les fichiers en consᅵquence, et lᅵ ᅵa marche.

C'est vraiment bizarre. Et il est dᅵjᅵ incomprᅵhensible que PHP puisse
lire un fichier par include() mais pas l'ouvrir par fopen("rt") : en
principe ce sont les mᅵmes droits qui sont demandᅵs, et par le mᅵme
utilisateur !

> Mais ᅵvidemment plus question de les "includer" avec exᅵcution du PHP
> ensuite, a priori.

Hein ? Et pourquoi donc ? Tu as essayᅵ aussi et ᅵa ne marche pas ???
En principe on ᅵvite de mettre une extension autre que .php pour ᅵviter
qu'ils soient lisibles directement de l'extᅵrieur, mais le mieux est de
les mettres dans un coin de l'arborescence inaccessible ᅵ Apache, et
dans ce cas tu peux bien les suffixer comme tu veux.

> Sauf peut-ᅵtre en dᅵclarant cette extension comme alias de ".php", mais ᅵ
> mon avis ᅵa rᅵveillera le problᅵme initial.

Mais bon sang, un include() ne repasse pas plus par le serveur http
qu'un fread() !

> J'ai dᅵjᅵ constatᅵ ce comportement sous Linux, avec le droit "r" manquant
> pour le rᅵpertoire, il me semble...
> La commande ls ne voit rien malgrᅵ le passage d'un nom explicite.

Il est exact que les droits sur le rᅵpertoire peuvent autoriser ou
interdire l'accᅵs au fichier, mais je ne comprends pas comment ᅵa
pourrait agir diffᅵremment sur un include() ou sur un fopen() en
mode "r".

> Par ailleurs, le message d'erreur est ce que le PHP renvoie dans le code
> produit. Je doute qu'ils aient prᅵvu ᅵa, alors ᅵa doit se rabattre sur une
> cause probable. Mais lᅵ c'est faux, le fichier existe et sans erreur dans
> son nom.
>
> Pour l'instant je teste en local sous Windows, mais j'ignore comment c'est
> codᅵ dans EasyPHP. Ca ne me paraᅵt pas incohᅵrent.

Moi ᅵa me paraᅵt complᅵtement incohᅵrent car j'ai toujours pensᅵ que la
fonction fopen(), avec un nom de fichier, se contentait d'appeler le
fopen() de la libc, celui qui existait dᅵjᅵ depuis de nombreuses annᅵes
avant l'invention de PHP.

> Tu y arrives ᅵ ouvrir des PHP avec un fopen toi ?

Je n'ai pas essayᅵ avec fopen(), mais avec readfile() je le fais trᅵs
couramment, sans aucun problᅵme. Tu peux dᅵjᅵ essayer ᅵa.

> Non, c'est bien par son path relatif et en mode fichier, pas en mode http.

Ok. Et l'include() aussi, bien sᅵr ? Et si tu esayais avec un chemin
absolu pour les deux ? Le problᅵme ne serait-il pas qu'il trouve le
fichier include() grᅵce ᅵ l'include_path ? Mais je ne comprends pas
comment un simple changement de nom modifierait le comportement. Cela
ᅵtant dit, un paramᅵtre du fopen() te permet d'utiliser l'include_path.

Par ailleurs :
<cit. http://fr.php.net/manual/fr/function.fopen.php>.
[...] droits d'accᅵs ᅵ ce fichier. Si vous activez le safe mode, ou la
directive open_basedir, d'autres conditions peuvent aussi s'appliquer.
</cit.>

> En fait il n'y a pas de protocole, juste un nom de fichier, et c'est bien
> l'extension qui fait que ᅵa marche ou pas.

C'est vraiment ᅵa le plus curieux. Que ce soit pour include() ou pour
fopen(), un fichier reste un fichier, qu'il s'appelle truc.php, truc.txt
ou encore php.jpeg.ini.brunet.miakinen !

Encore une autre idᅵe : puisque tu es sur Windows, ce ne serait pas un
problᅵme entre le nom court (8+3) et le nom long, ou bien avec un
mᅵlange de casses ? Je dis problablement n'importe quoi, mais rien qui
ne me semble plus incroyable que le fait d'un comportement qui change
quand tu renommes machin.php en machin.test.


--
Olivier Miakinen

Olivier Miakinen

unread,
Oct 6, 2009, 3:53:39 AM10/6/09
to
[Copie et suivi vers fr.comp.usenet.lecteurs-de-news]

Le 06/10/2009 00:40, Patrick 'Zener' Brunet a ᅵcrit :


>
> Je rᅵpond ᅵ ᅵa sᅵparᅵment parce que ᅵa risque de dᅵclencher un tollᅵ.

Oui, tu as raison, d'ailleurs je fais suivre vers le groupe idoine.

>> Tiens, ton dᅵlimiteur de signature est incorrect. Mais je crois
>> qu'avec la vieille version d'OE que tu utilises ᅵa ne peut se
>> corriger qu'avec OE-Quotefix.
>

> J'ai OE-Quotefix, mais il me fait des saletᅵs en s'attaquant aussi ᅵ des
> emails en HTML...

Comme je n'ai jamais utilisᅵ OE, je ne connais pas Quotefix non plus,
et donc je ne peux pas te conseiller. L'idᅵal serait probablement, si
c'ᅵtait possible, qu'il traite diffᅵremment le courriel et les news
(lesquels, du moins sur fr.*, sont toujours en texte brut).

> J'espᅵre que je l'ai mieux rᅵglᅵ cette fois.

Non, ᅵa n'a pas marchᅵ, mais bon, ce n'est pas si grave que ᅵa : je ne
te le signalais qu'ᅵ l'occasion de ma rᅵponse sur ton problᅵme PHP.

> [...]


> Celui-ci est la v.6 de Win2000pro + quelques mises ᅵ jour... Bientᅵt je vais
> migrer sur celui de XP, je finis de configurer la nouvelle station de comm
> :o)

Raison de plus pour ne pas t'embᅵter avec ta signature sur ton vieil OE.
Quand tu auras la derniᅵre version d'XP, OE ne te bouffera plus l'espace
aprᅵs les deux traits.


Cordialement,
--
Olivier Miakinen

Patrick 'Zener' Brunet

unread,
Oct 7, 2009, 5:04:19 PM10/7/09
to
Bonsoir.

"Olivier Miakinen" <om+...@miakinen.net> a ᅵcrit dans le message

de news 4acaf3dd$1...@meta.neottia.net


> Le 06/10/2009 00:40, Patrick 'Zener' Brunet a ᅵcrit :
>>
>> Oh que oui j'ai vᅵrifiᅵ ! J'ai changᅵ le maᅵtre script pour qu'il
>> cherche des ".test" et renommᅵ les fichiers en consᅵquence, et lᅵ
>> ᅵa marche.
>
> C'est vraiment bizarre. Et il est dᅵjᅵ incomprᅵhensible que PHP
> puisse lire un fichier par include() mais pas l'ouvrir par
> fopen("rt") : en principe ce sont les mᅵmes droits qui sont
> demandᅵs, et par le mᅵme utilisateur !
>

Il me semble que ᅵa pourrait ᅵtre une sᅵcuritᅵ ᅵvitant d'accᅵder en lecture
ᅵ des scripts... Foireux mais plausible.
C'est pouquoi je disais:

>> Mais ᅵvidemment plus question de les "includer" avec exᅵcution
>> du PHP ensuite, a priori.
>
> Hein ? Et pourquoi donc ? Tu as essayᅵ aussi et ᅵa ne marche pas ???
> En principe on ᅵvite de mettre une extension autre que .php pour
> ᅵviter qu'ils soient lisibles directement de l'extᅵrieur, mais le
> mieux est de les mettres dans un coin de l'arborescence
> inaccessible ᅵ Apache, et dans ce cas tu peux bien les suffixer
> comme tu veux.

C'est vrai, ᅵa ne n'ai pas encore essayᅵ. Il n'y a pas de risque parce que
j'ai un "deny from all" sur toute l'arborescence.
Mais lᅵ encore, je ne connais pas assez bien l'ᅵme d'Apache pour ᅵtre sᅵr
que toute version exᅵcute un fichier inclus depuis du PHP mᅵme si
l'extension n'est pas dᅵclarᅵe comme telle...

>> Sauf peut-ᅵtre en dᅵclarant cette extension comme alias de ".php",
>> mais ᅵ mon avis ᅵa rᅵveillera le problᅵme initial.
>
> Mais bon sang, un include() ne repasse pas plus par le serveur http
> qu'un fread() !
>

Non, il n'y a pas de requᅵte HTTP ᅵ ce niveau, seulement la requᅵte
d'origine pour la page, ensuite on est bien dans l'inclusion en mode fichier
partout.

>> [...]


>> Tu y arrives ᅵ ouvrir des PHP avec un fopen toi ?
>
> Je n'ai pas essayᅵ avec fopen(), mais avec readfile() je le fais
> trᅵs couramment, sans aucun problᅵme. Tu peux dᅵjᅵ essayer ᅵa.
>

readfile() ne m'arrange pas parce qu'il dᅵvore le fichier entier, alors que
mon but est de ne lire que le header de 2 lignes.

Mais ce que tu dis confirmerait que c'est mon EasyPHP qui fait des
maniᅵres...

>> Non, c'est bien par son path relatif et en mode fichier, pas en
>> mode http.
>
> Ok. Et l'include() aussi, bien sᅵr ? Et si tu esayais avec un chemin
> absolu pour les deux ? Le problᅵme ne serait-il pas qu'il trouve le
> fichier include() grᅵce ᅵ l'include_path ? Mais je ne comprends pas
> comment un simple changement de nom modifierait le comportement.
> Cela ᅵtant dit, un paramᅵtre du fopen() te permet d'utiliser
> l'include_path.
>
> Par ailleurs :
> <cit. http://fr.php.net/manual/fr/function.fopen.php>.
> [...] droits d'accᅵs ᅵ ce fichier. Si vous activez le safe mode, ou
> la directive open_basedir, d'autres conditions peuvent aussi
> s'appliquer. </cit.>
>

open_basedir aurait pu... En effet j'essaie aussi de mutualiser un moteur
entre plusieurs sites, et donc je suis amener ᅵ utiliser des chemins en
../Engine et ../SiteN
Mais ᅵa ne changerait pas de comportement avec l'extension.

>> En fait il n'y a pas de protocole, juste un nom de fichier, et
>> c'est bien l'extension qui fait que ᅵa marche ou pas.
>
> C'est vraiment ᅵa le plus curieux. Que ce soit pour include() ou
> pour fopen(), un fichier reste un fichier, qu'il s'appelle
> truc.php, truc.txt ou encore php.jpeg.ini.brunet.miakinen !
>

C'est vrai que j'utilise des sous-extensions en gᅵnᅵral et donc aussi dans
mes scripts: genre
Item.script.php pour distinguer de
Contenu.page.php par exemple.
Mᅵme Windows s'en fiche et ne considᅵre que l'extension finale.
Mais s'il y a un problᅵme de codage dans EasyPHP, sait-on jamais...
C'est vrai qu'en changeant *toute l'extension* en ".txt" j'ai fait
disparaᅵtre le point intermᅵdiaire.
Je retesterai cette hypothᅵse

> Encore une autre idᅵe : puisque tu es sur Windows, ce ne serait pas
> un problᅵme entre le nom court (8+3) et le nom long, ou bien avec un
> mᅵlange de casses ? Je dis problablement n'importe quoi, mais rien
> qui ne me semble plus incroyable que le fait d'un comportement qui
> change quand tu renommes machin.php en machin.test.

J'utilise des noms longs et du mix de casse en effet, mais c'est vrai aussi
avec l'extension qui marche.

Bon, tu me rassures lᅵ, si c'est normalement possible, je dois avoir un
problᅵme avec mes outils de test. Je vais creuser ᅵa...

Merci.

Olivier Miakinen

unread,
Oct 8, 2009, 1:26:58 AM10/8/09
to
Le 07/10/2009 23:04, Patrick 'Zener' Brunet a ᅵcrit :

>>
>> C'est vraiment bizarre. Et il est dᅵjᅵ incomprᅵhensible que PHP
>> puisse lire un fichier par include() mais pas l'ouvrir par
>> fopen("rt") : en principe ce sont les mᅵmes droits qui sont
>> demandᅵs, et par le mᅵme utilisateur !
>
> Il me semble que ᅵa pourrait ᅵtre une sᅵcuritᅵ ᅵvitant d'accᅵder en lecture
> ᅵ des scripts... Foireux mais plausible.

Qu'il y ait une sᅵcuritᅵ pour ᅵvider d'accᅵder en lecture ᅵ certaines
parties de l'arborescence, ᅵa me semble plausible. Mais une sᅵcuritᅵ
basᅵe sur les derniers caractᅵres du nom, je n'y crois pas un caramel.

>>> Mais ᅵvidemment plus question de les "includer" avec exᅵcution
>>> du PHP ensuite, a priori.
>>
>> Hein ? Et pourquoi donc ? Tu as essayᅵ aussi et ᅵa ne marche pas ???
>> En principe on ᅵvite de mettre une extension autre que .php pour
>> ᅵviter qu'ils soient lisibles directement de l'extᅵrieur, mais le
>> mieux est de les mettres dans un coin de l'arborescence
>> inaccessible ᅵ Apache, et dans ce cas tu peux bien les suffixer
>> comme tu veux.
>
> C'est vrai, ᅵa ne n'ai pas encore essayᅵ. Il n'y a pas de risque parce que
> j'ai un "deny from all" sur toute l'arborescence.

Parfait. Dans ce cas tu peux bien suffixer ces fichiers en .tartempion,
voire ne pas leur mettre de caractᅵre ᅵ . ᅵ du tout (ce qui veut dire
ᅵ pas de suffixe ᅵ en langage Windows).

> Mais lᅵ encore, je ne connais pas assez bien l'ᅵme d'Apache pour ᅵtre sᅵr
> que toute version exᅵcute un fichier inclus depuis du PHP mᅵme si
> l'extension n'est pas dᅵclarᅵe comme telle...

Gniii ? Quand PHP fait un include(), il ne prᅵvient pas Apache de ce
qu'il fait. D'ailleurs Apache s'en fout.

Note que beaucoup de programmeurs, pour une raison que j'ignore,
suffixent les scripts PHP inclus en .inc au lieu de .php, et ᅵa n'a
jamais gᅵnᅵ ni Apache ni PHP.

>> Je n'ai pas essayᅵ avec fopen(), mais avec readfile() je le fais
>> trᅵs couramment, sans aucun problᅵme. Tu peux dᅵjᅵ essayer ᅵa.
>
> readfile() ne m'arrange pas parce qu'il dᅵvore le fichier entier, alors que
> mon but est de ne lire que le header de 2 lignes.

Oui, d'accord, mais bon : pour le moment tu es face ᅵ un bug que tu ne
comprends pas et dont je soupᅵonne que la cause soit dans ta maniᅵre de
faire, et j'essaye de te donner le maximum de pistes pour que te vienne
l'illumination ! Je suis prᅵt ᅵ parier qu'il arrivera un moment oᅵ tu
diras ᅵ bon sang mais c'est bien sᅵr, c'est parce que j'ai fait ᅵa et
ᅵa, qu'il s'est passᅵ ᅵa ᅵ, et ᅵ ce moment-lᅵ tu pourras revenir ᅵ fopen
parce que ᅵa marchera.

> Mais ce que tu dis confirmerait que c'est mon EasyPHP qui fait des
> maniᅵres...

Non, je ne dis pas ᅵa. Je parie plutᅵt pour une combinaison de trucs
dans ta config et dans tes scripts.

> open_basedir aurait pu... En effet j'essaie aussi de mutualiser un moteur
> entre plusieurs sites, et donc je suis amener ᅵ utiliser des chemins en
> ../Engine et ../SiteN

Haha ! Dans ce cas, vᅵrifie si include() et fopen() ne se comportent pas
diffᅵremment vis-ᅵ-vis des liens symboliques (ᅵ raccourcis ᅵ en Windows,
sauf erreur).

Par exemple, si tu as un lien de /a vers /b/c, quand tu fais ../Engine
en ᅵtant sous /a tu pourrais te retrouver soit sous /Engine, soit sous
/b/Engine, selon que le vrai nom a ᅵtᅵ interprᅵtᅵ ou pas.

> Mais ᅵa ne changerait pas de comportement avec l'extension.

Hum. Oui, c'est vrai. ᅵ moins que le nom existe dᅵjᅵ quelque part.
Essaye avec des noms improbables, du genre bluzgrud.txt et bluzgrud.php,
pour ᅵviter que le fichier existe dᅵjᅵ ailleurs.

> C'est vrai que j'utilise des sous-extensions en gᅵnᅵral et donc aussi dans
> mes scripts: genre
> Item.script.php pour distinguer de
> Contenu.page.php par exemple.

Oui, mais on s'en fiche.

> Mᅵme Windows s'en fiche et ne considᅵre que l'extension finale.

Ah ben lui ne s'en fiche pas, alors. Un fopen ou un include devrait
*vraiment* se fiche de toute extension.

> Mais s'il y a un problᅵme de codage dans EasyPHP, sait-on jamais...
> C'est vrai qu'en changeant *toute l'extension* en ".txt" j'ai fait
> disparaᅵtre le point intermᅵdiaire.

Qui plus est, tu as changᅵ la longueur du nom. Sur Windows cela pourrait
faire une diffᅵrence.

> J'utilise des noms longs et du mix de casse en effet, mais c'est vrai aussi
> avec l'extension qui marche.

Du mix de casse ? Windows ne te trouverait pas un TrucBidule.php quand
tu demandes trucbidule.php, avant de dᅵcider que tu n'as pas le droit
d'y accᅵder (alors que trucbidule.php tu aurais le droit si l'autre
n'existait pas) ?

> Bon, tu me rassures lᅵ, si c'est normalement possible, je dois avoir un
> problᅵme avec mes outils de test. Je vais creuser ᅵa...

J'en suis convaincu.

--
Olivier Miakinen

Mickael Wolff

unread,
Oct 8, 2009, 6:44:59 AM10/8/09
to
Patrick 'Zener' Brunet wrote:

> Dans le cadre d'un serveur de contenu un peu complexe, j'ai un script qui va
> inclure (@include) un certain nombre d'autres, qui sont donc des PHP,
> mais auparavant il doit rassembler dans une structure des donn�es qui sont
> r�parties dans ces m�mes scripts.

Au vu de la discussion, je pense que vous passez � cot� du probl�me.
include utilises l'include_path pour trouver les includes. fopen ne
l'utilises pas. Par contre, si le safe mode est activ�, des rstrictions
d'ouverture peuvent etre appliqu�es, zlors qu'elles ne s'appliqueront
pas � l'inclusion via les directives d�di�es.


> J'ai v�rifi� que le path est bon et �a marche bien si l'extension n'est pas
> .php, donc j'en d�duis que c'est le serveur qui est configur� pour que les
> PHP ne soient accessibles qu'en ex�cution ?

Il se peut que ce soient les ACL de l'OS qui bloquent. Le syst�me est
plus complexe que les droits POSIX.


> * Une id�e de solution ?

Travailler sous Linux. Ecrire du PHP sous MS Windows, c'est prendre
le risque perdre du temps inutilement avec l'admin sys de MS Windows.

--
Micka�l Wolff aka Lupus Michaelis
http://lupusmic.org

Patrick 'Zener' Brunet

unread,
Oct 8, 2009, 3:28:23 PM10/8/09
to
Bonsoir.

Aaaaarghhhh ! J'ai trouvᅵ !

"Olivier Miakinen" <om+...@miakinen.net> a ᅵcrit dans le message

de news 4acd339f$1...@meta.neottia.net


> Le 07/10/2009 23:04, Patrick 'Zener' Brunet a ᅵcrit :

>>[...]

Aprᅵs 30mn de tests systᅵmatiques,
c'est la honte absolue car ᅵa crevait les yeux:

Comme je disais:


>> C'est vrai que j'utilise des sous-extensions en gᅵnᅵral et donc
>> aussi dans mes scripts: genre
>> Item.script.php pour distinguer de
>> Contenu.page.php par exemple.

>> [...]

>> C'est vrai qu'en changeant *toute l'extension* en ".txt" j'ai fait
>> disparaᅵtre le point intermᅵdiaire.

Ben non Zener, c'est plus nul que ᅵa: ces extensions sont gᅵnᅵrᅵes avec des
macros M4 (prᅵcompilation du site), et si les deux macros en question
s'appellent
ztm4ScriptExtension et ztm4PageExtension, elles ᅵvaluent en fait ᅵ
"script.php" et "html.php" !!!!!

Donc finalement Contenu.html.php se laisse ouvrir par un fopen
aussi bien que Contenu.test ou mᅵme
Fr-Contenu.html.php :o(

Du coup je peux comme je le souhaitais rassembler et traiter tous les
cartouches headers avant de lancer la gᅵnᅵration par inclusion normale des
scripts, donc sans dᅵfiler deux fois les scripts entiers.

Je confirme aussi que ceci marche trᅵs bien en test (sous Windows):

>> ... j'essaie aussi de mutualiser un moteur


>> entre plusieurs sites, et donc je suis amener ᅵ utiliser
>> des chemins en ../Engine et ../SiteN

Il faut encore que je le valide dans un contexte d'hᅵbergement partagᅵ (sous
un Linux ou Unix) avec les sites dans des sous-rᅵpertoires d'un mᅵme
rᅵpertoire racine qui devraient donc avoir les mᅵmes droits d'accᅵs, mᅵme
s'ils sont pointᅵs par des noms de domaines diffᅵrents.

Le but est que le moteur soit partagᅵ, histoire de gagner un peu d'espace et
de rendre la maintenance plus facile.

Si ᅵa pose des problᅵmes de droits d'accᅵs, je pourrai toujours copier le
moteur dans le DocumentRoot de chaque site, ᅵa conservera l'intᅵrᅵt de le
dissocier complᅵtement des contenus dᅵdiᅵs, et donc de le rendre
gᅵnᅵrique...

Navrᅵ de vous avoir fait perdre votre temps avec ce faux-bug, Voilᅵ ce que
c'est de faire de l'alimentaire dans la journᅵe et de la R&D le soir :-/

Et toutes mes excuses aux auteurs de EasyPHP qui me sert pas mal pour
tester...

Il me faudrait aussi un compilo PHP pour valider le code plus formellement
qu'avec Firefox qui ne voit que les instructions effectivement
interprᅵtᅵes...

Merci encore pour le support.

Olivier Miakinen

unread,
Oct 8, 2009, 6:15:52 PM10/8/09
to
Le 08/10/2009 21:28, Patrick 'Zener' Brunet a ᅵcrit :

>
> Aaaaarghhhh ! J'ai trouvᅵ !
> [...]

> c'est la honte absolue car ᅵa crevait les yeux:

J'en ᅵtais persuadᅵ depuis le dᅵbut. Tu vois que j'ai bien fait de te
pousser dans tes derniers retranchements !

J'en ᅵtais tellement persuadᅵ que j'ai mᅵme ᅵcrit dans ma derniᅵre rᅵponse :
<cit.>


Oui, d'accord, mais bon : pour le moment tu es face ᅵ un bug que tu ne
comprends pas et dont je soupᅵonne que la cause soit dans ta maniᅵre de
faire, et j'essaye de te donner le maximum de pistes pour que te vienne
l'illumination ! Je suis prᅵt ᅵ parier qu'il arrivera un moment oᅵ tu
diras ᅵ bon sang mais c'est bien sᅵr, c'est parce que j'ai fait ᅵa et
ᅵa, qu'il s'est passᅵ ᅵa ᅵ, et ᅵ ce moment-lᅵ tu pourras revenir ᅵ fopen
parce que ᅵa marchera.

</cit.>

Et voilᅵ, l'illumination t'est venue.


> Navrᅵ de vous avoir fait perdre votre temps avec ce faux-bug, Voilᅵ ce que
> c'est de faire de l'alimentaire dans la journᅵe et de la R&D le soir :-/

Ce n'est pas grave. ᅵa m'aurait plus inquiᅵtᅵ si j'avais cru ᅵ un
vrai bug de la fonction fopen(), mais j'avais trop confiance en
cette fonction, que j'utilise (en C) depuis plus de vingt ans,
pour croire qu'elle puisse nous lᅵcher comme ᅵa...

Cordialement,
--
Olivier Miakinen

Patrick 'Zener' Brunet

unread,
Oct 9, 2009, 7:47:52 PM10/9/09
to
Bonsoir.

"Olivier Miakinen" <om+...@miakinen.net> a ᅵcrit dans le message

de news 4ace3fa0$1...@meta.neottia.net


> Le 08/10/2009 21:28, Patrick 'Zener' Brunet a ᅵcrit :
>>
>> Aaaaarghhhh ! J'ai trouvᅵ !
>> [...]
>> c'est la honte absolue car ᅵa crevait les yeux:
>
> J'en ᅵtais persuadᅵ depuis le dᅵbut. Tu vois que j'ai bien fait de
> te pousser dans tes derniers retranchements !
>
> J'en ᅵtais tellement persuadᅵ que j'ai mᅵme ᅵcrit dans ma derniᅵre
> rᅵponse : <cit.>
> Oui, d'accord, mais bon : pour le moment tu es face ᅵ un bug que
> tu ne comprends pas

Le pire, c'est que j'ai dᅵjᅵ vu tellement de trucs vraiment foireux que ᅵa
suggᅵre des scᅵnarios trᅵs rᅵalistes ᅵ base de bugs tordus.
Ceux qui suivent mes aventures sur les newsgroups :o) savent que je pousse
souvent les technologiess dans leurs derniers retranchements, elles-aussi.

Et le pire c'est qu'en expᅵrimentant pour vᅵrifier, on trouve ce qu'on
cherche, donc on s'enterre...

> [...]

>> Voilᅵ ce que c'est de faire de l'alimentaire dans la journᅵe et de
>> la R&D le soir :-/
>
> Ce n'est pas grave. ᅵa m'aurait plus inquiᅵtᅵ si j'avais cru ᅵ un
> vrai bug de la fonction fopen(), mais j'avais trop confiance en
> cette fonction, que j'utilise (en C) depuis plus de vingt ans,
> pour croire qu'elle puisse nous lᅵcher comme ᅵa...

La fopen() du C, j'ai confiance aussi, mais celle de PHP c'est autre
chose... A vrai dire, le Web et ses "technologies" commencent ᅵ pas mal me
sortir par les yeux, parce que le bricolage est toujours plus ou moins
incontournable.

Au fait, quelqu'un connaᅵtrait un compilo PHP "ᅵconomiquement accessible",
juste pour valider syntaxiquement le code mᅵme dans les branches exᅵcutᅵes
de maniᅵre exceptionnelle ? Je veux dire 100% du code ᅵcrit, je n'ai pas de
gᅵnᅵration dynamique ᅵ coups d'eval ou d'include inconnus ᅵ l'avance...

J'ai bien trouvᅵ des outils qui ont l'air de faire ᅵa, mais avec tout un AGL
derriᅵre, et donc le prix est dissuasif.

Merci.

Mickael Wolff

unread,
Oct 10, 2009, 3:09:29 AM10/10/09
to
Patrick 'Zener' Brunet wrote:

> Au fait, quelqu'un connaᅵtrait un compilo PHP "ᅵconomiquement accessible",
> juste pour valider syntaxiquement le code mᅵme dans les branches exᅵcutᅵes
> de maniᅵre exceptionnelle ? Je veux dire 100% du code ᅵcrit, je n'ai pas de
> gᅵnᅵration dynamique ᅵ coups d'eval ou d'include inconnus ᅵ l'avance...

Tu peux y aller violemment : find . -name '*.php' -exec php -l \{\} \;

Tu peux aussi utiliser xdebug pour le code coverage, et utiliser des
tests unitaires pour amᅵliorer la fiabilitᅵ du code.

--
Mickaᅵl Wolff aka Lupus Michaelis
http://lupusmic.org

0 new messages