[RESOLU] Impossible d'ouvrir un dossier hébergé sur un serveur distant

Eléphanteau du PHP | 10 Messages

26 oct. 2022, 10:02

Bonjour,

Je suis en charge de la gestion des applications utilisées sur l'intranet de l'entreprise. Celles-ci sont toutes reliées via une plateforme "plateform.htm". Je rencontre néanmoins des difficultés à ouvrir un dossier hébergé sur un serveur de donnée spécifique.

("Le serveur de donnée et le serveur sur lequel sont hébergé les applications sont tous 2 sur le réseau. L'authentification s'effectue via l'active directory. ")

Le plateforme est une page regroupant divers lien soit aux applications soit au dossier du serveur de donnée en question. Tout est développé en php ainsi que du JavaScript.

Voici le code utilsé pour faire le lien avec le serveur de donnée.
<a href="file://///cheminUNC/dossierEnQuestion"> exemple </a>

Que j'ouvre ensuite avec :
<php
fopen("cheminUNC/dossier", "r")
?>

Lorsque je souhaite ouvrir ce dossier via la plateforme, aucune action ne se produit, rien ne se passe. Néanmoins lorsque je copie/colle le chemin UNC dans la barre URL cela fonctionne. La console navigateur ne m'indique rien, et lorsque j'essaye d'ouvrir le lien en privée ou sur une autre fenêtre cela me met : about:blank:blocked.
J'ai vérifié les divers configurations de sécurité des divers navigateurs utilisés(Edge, Firefox, Chrome).
J'ai également vérifié le php.ini (ubuntu 20.04, apache2) afin de voir si le allow_url_fopen = On, Idem pour le allow_url_include=On.

La fonction onClick est utilisé pour l'ouverture des liens avec chemins UNC tel que :

<section id="banner" onclick="ouvrirlien()">
<li><a class="link2" onclick="window.location.href ='file://///cheminUNC/dossier'">SGE ET</a></li>

//jquery.js
function ouvrirlien(){
var link = "Je ne suis pas sûr de l'adresse';
window.open(link,"_blank");
}


Je m'adresse donc à vous afin de pourvoir déterminer si les erreurs proviennent du code.

Ps* : Je ne suis pas celui qui a développé la plateforme et ses applications. Tout était initialement développé sous php 5.0.

Cordialement,

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9484 Messages

26 oct. 2022, 17:03

Je n'ai pas compris ce qui marche et ce qui ne marche pas...

Dans tous les cas, travailer avec des UNC c'est souvent un enfer.
Et les navigateurs ont souvent des mécanismes de protections qui bloquent l'accès à des ressources UNC depuis une page web.
Donc le fait que ça fonctionne en tapant l'url dans la barre d'adresse ne veut pas dire que ça fonctionnera en cliquant sur un lien.


Par ailleurs, fopen() est utilisé normalement pour ouvrir un fichier et non pas un dossier, que cherches-tu à faire ?
Si tu veux en PHP parcourir la liste des fichiers contenus dans un dossier UNC regarde du côté de glob()
Exemple : https://stackoverflow.com/a/10312660
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 10 Messages

27 oct. 2022, 09:57

J'ai une plateforme avec plusieurs liens menant soit à des applications, soit à des dossiers hébergés sur un serveur de donnée.
Je cherche à pouvoir ouvrir un dossier distant contenant tous les fichiers que les utilisateurs pourront utiliser (lire/télécharger) à des fins administratives ou autre.
Concernant les navigateurs j'avais effectué des recherches et en était venus à la conclusion que cela concerne seulement ceux étant pourvu du moteur chronium.

Je n'ai pas développé l'application, je ne suis pas en mesure de justifier l'utilisation de fopen(). Donc c'est l'appel de la fonction qui pose problème.
Le lien overflow est très intéressant, j'ai une interrogation :
$files = glob($uncpath . "*.pdf"); => Est-ce réellement nécessaire de cibler un type de fichier ? J'ai des .xml .docx etc ...

Je suis en bts 2e année, je manque d'expérience en dev, c'est pourquoi je me permet de vous poser une question ;
Quelle différence entre glob() et opendir() ? La finalité est-elle différente suivant la méthode ?

Pour résumer j'ai une plateforme (sous intranet) contenant des liens menant aux applis, et des liens menant à des dossiers hébergés sur un serveur de donnée ou les utilisateurs peuvent naviguer afin de consulter les fichiers qu'ils souhaitent avec possibilité de téléchargement. L'ouverture fichier se fait en lecture seule. Je travaille pour la sncf, donc les dossiers et fichiers présent dans le NAS (serveur de donnée ? corrigez-moi si je me trompe) sont très très nombreux et donc je ne peux pas effectuer un seul lien à la racine du dossier il faut que je cible le bon dossier dans l'arborescence.
Je m'excuse si je manque de clarté et je vous remercie de votre aide !

Eléphanteau du PHP | 10 Messages

27 oct. 2022, 10:33

Code : Tout sélectionner

<!-- Nav --> <nav id="nav"> <ul> <li ><a href="https://prevention.****.fr" target="_blank">Avis accident du travail</a></li> <li> <a href="http://www.galapagos.****.fr/" target="_blank">Galapagos (Taxi)</a> </li> <li><a href="http://et.prg.****.fr/glpi/" target="_blank">Demande informatique (GLPI)</a></li> <li><a href="http://et.prg.****.fr/Salle/" target="_blank">Réservation des salles</a></li> <li><a href="file://///nomMachine/prg_et$/ETPRG_RH/Utilisation_du_personnel_RH/SUIVI RH">Suivi RH</a></li> </ul> </nav> <!-- Banner --> <section id="banner" onclick="ouvrirlien()"> </section> <!-- Nav --> <nav > <ul class="nav2" style="display: flex; flex-direction: row;justify-content: space-around;" > <li style="padding-right: 200px;" ><a class="link current" target="_blank" href="organigrammes/Organigramme ETP C.pdf">ORGANIGRAMME LC</a></li> <li style="padding-left: 200px;" ><a class="link current" target="_blank" href="organigrammes/Organigramme ETP NU.pdf">ORGANIGRAMME NU</a></li> </ul> </nav> <div class="chsct"> <ul id="tous"> <li><a href="#" onclick="tous()" ><strong>Tous</strong></a></li> <li><a href="#" onclick="chsct()"><strong>CHSCT</strong></a></li> <li><a class="link2" onclick="window.location.href ='file://///nomMachine/prg_et$/ETPRG_SGE-Commun'"><i><strong><FONT style="color: white;" face="arial"> SGE ET</FONT></strong></i></a></li> <li><a class="link2" onclick="window.location.href ='file://///nomMachine/prg_et$/ETPRG_QS/Pôle_QS'"><i><strong><FONT style="color: white;" face="arial"> ECHANGE QS UO</FONT></strong></i></a></li> </ul> </div> <php fopen("nomMachine/prg_et$/ETPRG_RH/Utilisation_du_personnel_RH/SUIVI RH", "r") ?> <!-- Main --> <section id="main"> <div class="container"> <div class="row gtr-200"> <div class="col-12"> <!-- Features --> <section class="box features"> <div> <div style="display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center"> <!-- Add class .modal-full-height and then add class .modal-left (or other classes from list above) to set a position to the modal --> <div class="modal-dialog modal-full-height modal-left" style="overflow-y: initial !important" role="document"> <div style="display: flex;flex-direction: column; height: 600PX; overflow-y: auto;" class="modal-body"> <button style="border-bottom: none;" onclick="window.location.href ='file://///nomMachine/prg_et$/ETPRG_Direction/TDB_Direction'">TDB</button> <button style="border-bottom: none;" onclick="window.location.href ='file://///nomMachine/prg_et$/ETPRG_Direction/Interne_Direction'">Interne</button> <button onclick="window.location.href ='file://///nomMachine/prg_et$/ETPRG_Direction/Scan_Direction'">Scan</button> </div> <div class="modal-footer justify-content-center"> </div> </div> </div> </div>
Voilà comment le code est construit.
Lorsque je regarde window.location.href je constate qu'il ne renvoie donc qu'une URL et non un chemin UNC ? (provoquant un erreur).
Je n'ai pas développé ceci et la documentation est limité.

J'ai effectué ceci : (en utilisant opendir)

Code : Tout sélectionner

<?php $dir = "/nomMachine/prg_et$/ETPRG_RH/Utilisation_du_personnel_RH/SUIVI RH"; // Ouvre un dossier bien connu, et liste tous les fichiers if (is_dir($dir)) { if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { echo "fichier : $file : type : " . filetype($dir . $file) . "\n"; } } closedir($dh); ?>
Code j'ai trouvé sur le site phpfacile (je n'arrive pas a partager le link même avec les balises)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9484 Messages

28 oct. 2022, 07:44

Pour répondre à tes questions :
- Pas besoin de filtrer par type de fichier avec glob()
- Quelles différences entre glob() et opendir() ? Elles font la même chose mais je trouve que foreach(glob()) pour récupérer tous les fichiers est + simple et + compact qu'avec opendir()

Après difficile de t'aider davantage sans avoir le même environnement que toi... Il faut tester et y aller par itérations pour voir ce qui fonctionne ou pas.
Il est possible aussi qu'Edge soit plus permissif que Chrome pour permettre l'accès aux fichiers
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 1869 Messages

28 oct. 2022, 09:28

quand je vois ceci
$dir = "/nomMachine/prg_et$/ETPRG_RH/Utilisation_du_personnel_RH/SUIVI RH";

je pense aussi au besoin d'échapper le caractère $ ou d'utiliser des simple quotes
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 10 Messages

08 nov. 2022, 11:22

Attendez, tout viendrait d'une mauvaise transcription du chemin UNC ?

Mammouth du PHP | 1869 Messages

08 nov. 2022, 11:49

essaie en utilisant des simple quotes ' php n'essaiera pas d'interprèter les $ comme des variables
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 10 Messages

08 nov. 2022, 12:00

Je viens d'essayer et cela ne change rien. Rien ne se passe lorsque je clique.
Hier j'ai constaté lorsque j'inspecte : Not allowed to load local resource.
Donc il ne trouve rien ou n'a pas les droit pour y accéder ? Pour autant mon chemin UNC est correct.
et j'ai fait un autre test par inadvertance. Sur une clé (considéré comme un disque) se trouve la plateforme ainsi que les différentes applications. Lorsque je l'ouvre et je clique sur le lien, j'accède aux dossiers distants psk je l'ai ouvert en locale. Ce qui me fait penser que l'erreur viendrait d'une config sécurité d'accès du serveur sur lequel je n'ai pas de pouvoir. Je dois être sûr avant d'entamer des démarches car cela sort de ma zone de prédilections (a savoir coder).
Qu'en pensez-vous ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9484 Messages

09 nov. 2022, 00:18

Le message "Not allowed to load local resource." confirme ce que je te décrivais il y a quelques jours :
les navigateurs ont souvent des mécanismes de protections qui bloquent l'accès à des ressources UNC depuis une page web.
Ce n'est pas une protection côté serveur mais un blocage côté navigateur
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 10 Messages

23 nov. 2022, 17:23

Bonjour,

C'est une stratégie réseau à l'échelle nationale qui "inhibe" l'interaction entre proxy et serveur empêchant l'ouverture de dossier distant par mesure de sécurité.
Voilà l'explication que j'ai eu de la part de la société externe qui héberge nos serveurs. En effet, la personne sur qui je suis tombé s'est rendu compte en live qu'elle avait le même problème à propos d'un site qu'elle gérait. Impossible d'ouvrir de dossier distant.


Cordialement,