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

glob() et suivi de liens

4 réponses
Avatar
Hugolino
Yo!!!

Je duplique mon petit serveur LAMP d'un PC sous Debian (2.6.26) à un
portable sous Arch Linux (2.6.39).

Ce serveur me permet d'accéder à mes 6000 mp3 à travers le web.

/var/www/zik/ (sur une partition /root en ext3) contient donc 6000 liens
symboliques vers les 6000 mp3 qui résident dans /home/zik/ (sur une
autre partition aussi en ext3).

Sur la Debian (PHP Version 5.2.6-1+lenny12), le script marche sans
problème : il affiche bien la liste de tous les artistes parce que la
fonction glob() qui scanne /var/www/zik/ retourne bien un tableau
contenant la liste des fichiers.

Par contre, sur le portable (PHP Version 5.3.6), les mp3 sont sur une
partition vfat (parce que je veux que ces mp3 soient accessibles depuis
Windows Seven), et là j'ai un problème : glob() ne remplit pas le
tableau "fichier"...

$fichier = glob( $liste_fichiers_repertoire); //tableau contenant tous les fchiers mp3
echo '<!-- glob liste mp3s : ///'.$fichier['0'].'///-->'."\n\n";
echo '<!-- glob liste mp3s : ///'.$fichier['1'].'///-->'."\n\n";
if ( $fichier['0'] != '' ) { // Si au moins un mp3 a été trouvé


Si je déplace une centaine de mp3 sur une partition ext3 (pas assez de
place libre pour en mettre plus), j'ai pu voir que mon script retombe en
marche.

Pire !!
Sur la debian, j'ai créé une partition vfat, et j'ai fait pointer les
liens symboliques des mp3 que j'y ai déposés vers /var/www/zik/ : mon
script n'a aucun problème pour prendre en compte ces nouveaux liens
symboliques.

J'ai googlé, mais sans trouver aucune référence à un quelconque problème
de cette fonction glob() qui serait lié au système de fichier des
partitions.

En désespoir de cause, je mets deux liens vers phpinfo() de chaque
serveur :

Le vieux PC et sa Debian qui roulaize DLMKT : http://tinyurl.com/3gejtuz
Le portable sous Arch qui pose problème : http://tinyurl.com/3mtxvpj


Merci de vos avis.

--
> Dictature _éclairée_, s'il te plaît. :-)
Les leds du switch qui clignotent, c'est moyen comme éclairage.
Hugo (né il y a 1 488 892 100 secondes)

4 réponses

Avatar
Olivier Miakinen
Bonjour,

Le 30/06/2011 22:24, Hugolino a écrit :

Je duplique mon petit serveur LAMP d'un PC sous Debian (2.6.26) à un
portable sous Arch Linux (2.6.39).

Ce serveur me permet d'accéder à mes 6000 mp3 à travers le web.

/var/www/zik/ (sur une partition /root en ext3) contient donc 6000 liens
symboliques vers les 6000 mp3 qui résident dans /home/zik/ (sur une
autre partition aussi en ext3).

Sur la Debian (PHP Version 5.2.6-1+lenny12), le script marche sans
problème : il affiche bien la liste de tous les artistes parce que la
fonction glob() qui scanne /var/www/zik/ retourne bien un tableau
contenant la liste des fichiers.

Par contre, sur le portable (PHP Version 5.3.6), les mp3 sont sur une
partition vfat (parce que je veux que ces mp3 soient accessibles depuis
Windows Seven), et là j'ai un problème : glob() ne remplit pas le
tableau "fichier"...



<cit. http://fr.php.net/glob>
... les règles utilisées par la fonction glob() de la libc ...
</cit.>

Est-ce que tu as les moyens de faire le test avec un programme en C ?

$fichier = glob( $liste_fichiers_repertoire); //tableau contenant tous les fchiers mp3



On pourrait savoir ce que vaut $liste_fichiers_repertoire sur chacune
des deux machines ?

echo '<!-- glob liste mp3s : ///'.$fichier['0'].'///-->'."nn";
echo '<!-- glob liste mp3s : ///'.$fichier['1'].'///-->'."nn";
if ( $fichier['0'] != '' ) { // Si au moins un mp3 a été trouvé



Ce test est un peu risqué, si tu te retrouves dans le cas signalé dans
la doc où glob() retourne false. Voici une suggestion faite dans les
commentaires :

if (is_array($fichier) && count($fichier) > 0) { // Au moins un mp3

Si je déplace une centaine de mp3 sur une partition ext3 (pas assez de
place libre pour en mettre plus), j'ai pu voir que mon script retombe en
marche.



Et si tu n'as qu'une centaine de mp3 sur une partition vfat, ça dit
quoi ? Ceci pour voir si la limitation est sur le type de filesystem
ou plutôt sur le nombre de résultats...

Pire !!
Sur la debian, j'ai créé une partition vfat, et j'ai fait pointer les
liens symboliques des mp3 que j'y ai déposés vers /var/www/zik/ : mon
script n'a aucun problème pour prendre en compte ces nouveaux liens
symboliques.



Ceci semble innocenter le type de filesystem.

J'ai googlé, mais sans trouver aucune référence à un quelconque problème
de cette fonction glob() qui serait lié au système de fichier des
partitions.



Voilà qui semble encore confirmer mon intuition.

En désespoir de cause, je mets deux liens vers phpinfo() de chaque
serveur :

Le vieux PC et sa Debian qui roulaize DLMKT : http://tinyurl.com/3gejtuz
Le portable sous Arch qui pose problème : http://tinyurl.com/3mtxvpj



Sur http://fr.php.net/glob il est question entre autres choses de la
directive open_basedir :
http://fr.php.net/manual/fr/ini.core.php#ini.open-basedir

Or justement, il y a une différence entre tes deux systèmes :

<cit. http://roulaize.fr/phpinfo/>
open_basedir no value no value
</>

<cit. http://roulaize.fr:82/phpinfo/>
open_basedir
/srv/http/:/home/:/tmp/:/usr/share/pear/:/var/www/:/var/www-stats/:/var/www-logs/
/srv/http/:/home/:/tmp/:/usr/share/pear/:/var/www/:/var/www-stats/:/var/www-logs/
</>

Est-ce que tes fichiers sont bien sous /var/www ou un autre répertoire
accessible ?
Avatar
Hugolino
Le 30-06-2011, Olivier Miakinen <om+ a écrit :
Le 30/06/2011 22:24, Hugolino a écrit :
>
> [...]
> Par contre, sur le portable (PHP Version 5.3.6), les mp3 sont sur
> une partition vfat <...>, et là j'ai un problème : glob() ne remplit
> pas le tableau "fichier"...

<cit. http://fr.php.net/glob>
... les règles utilisées par la fonction glob() de la libc ...
</cit.>

Est-ce que tu as les moyens de faire le test avec un programme en C ?



J'ai bien un vi et un gcc, mais j'ai cessé mes essais en C...

> $fichier = glob( $liste_fichiers_repertoire); //tableau contenant

On pourrait savoir ce que vaut $liste_fichiers_repertoire sur chacune
des deux machines ?



/var/www/zik/*mp3

> if ( $fichier['0'] != '' ) { // Si au moins un mp3 a été trouvé

Ce test est un peu risqué, si tu te retrouves dans le cas signalé dans
la doc où glob() retourne false. Voici une suggestion faite dans les
commentaires :

if (is_array($fichier) && count($fichier) > 0) { // Au moins un mp3



OK, je corrigerai

> [...]
Ceci semble innocenter le type de filesystem.
> [...]
Voilà qui semble encore confirmer mon intuition.

> [...]

Or justement, il y a une différence entre tes deux systèmes :

<cit. http://XXXXXXXXXXX/phpinfo/>
open_basedir no value no value
</>

<cit. http://XXXXXXXXXXX:82/phpinfo/>
open_basedir
/srv/http/:/home/:/tmp/:/usr/share/pear/:/var/www/:/var/www-stats/:/var/www-logs/
/srv/http/:/home/:/tmp/:/usr/share/pear/:/var/www/:/var/www-stats/:/var/www-logs/
</>



Alléluia !!!

Est-ce que tes fichiers sont bien sous /var/www ou un autre répertoire
accessible ?



Oui, oui... enfin ils n'étaient donc pas accessibles à php. Et
maintenant que j'ai supprimé cette directive, mes scripts qui tapaient
dans /proc sont eux-aussi retombés en marche.

Merci à toi.

PS : Puis-je te demander de superseder ton article pour éviter
l'archivage en clair de l'adresse de mon site ? (C'est fou le nombres de
routeurs qui chauffent entre la Chine et ma Freebox ;-)


--
Les hommes ont peut-être découvert le feu mais les femmes ont appris à
jouer avec...
Hugo (né il y a 1 488 925 983 secondes)
Avatar
Olivier Miakinen
Le 01/07/2011 10:07, Hugolino m'a répondu :

<cit. http://XXXXXXXXXXX/phpinfo/>
<cit. http://XXXXXXXXXXX:82/phpinfo/>





Oups ! Désolé. J'avais bien supposé que tu utilisais tinyurl pour
l'anonymat, mais j'ai oublié au moment de répondre et j'ai juste
copicollé les URL depuis le navigateur.

PS : Puis-je te demander de superseder ton article pour éviter
l'archivage en clair de l'adresse de mon site ?



J'ai fait un cancel, c'était plus rapide avec mon clicodrome,
et surtout plus rapide que de devoir passer par l'étape de la
modération.

Cordialement,
--
Olivier Miakinen
Avatar
Hugolino
Le 01-07-2011, Olivier Miakinen <om+ a écrit :
Le 01/07/2011 10:07, Hugolino m'a répondu :

> PS : Puis-je te demander de superseder ton article pour éviter
> l'archivage en clair de l'adresse de mon site ?

J'ai fait un cancel, c'était plus rapide avec mon clicodrome,



Merci.

et surtout plus rapide que de devoir passer par l'étape de la
modération.



Oops !!
Je présente donc mes excuses aux modéros pour avoir doublé chacun de mes
deux précédents messages ;-))


--
La pile réseau a été profondément modifiée pour permettre le support
des queues multiples.


Ça veut dire qu'on surfe plus vite sur les sites de gang-bang ??
Hugo (né il y a 1 488 963 363 secondes)