[RESOLU] odbc_connect pour .mdb sur un pc en réseau local

Eléphanteau du PHP | 12 Messages

19 déc. 2015, 11:48

Bonjour,

je cherche à me connecter à un .mdb sur un pc du reseau local. et y a pas marche.
ce code est opérationnel

Code : Tout sélectionner

<html> <head> <title>modification de données en PHP :: partie 1</title> </head> <body> <?php $user = ""; $pass = ""; // \\NomPc\Rep\ // W:\ $mdbFilename = "c:\Daaijon_U21.mdb"; $mdbFilename = addslashes( $mdbFilename ); //connection au serveur: $cnx = odbc_connect("Driver={Microsoft Access Driver (*.mdb)};Dbq=$mdbFilename", $user, $pass) or die ("Impossible de se connecter à la bas de donnée") ; //requête SQL: $sql = "SELECT * FROM urgence" ; //exécution de la requête: $requete = odbc_do($cnx, $sql) ; //affichage des données: while( $result = odbc_fetch_object( $requete ) ) { echo("<div align=\"center\">".$result->date." ".$result->mouvement." <a href=\"modification2.php?idPersonne=".$result->emetteur."\">modifier</a><br>\n") ; } ?> </body> </html>
Mais dès lors que je remplace le c: par w: (lecteur réseau pointant sur le répertoire) ou //NomPC/RepPartager ou //XXX.XXX.XXX.XXX/RepPartager il me dit :

Warning: odbc_connect() [function.odbc-connect]: SQL error: [Microsoft][Pilote ODBC Microsoft Access] '(Inconnu)' n'est pas un chemin d'accès valide. Assurez-vous que le nom du chemin d'accès est correct et qu'une connexion est établie avec le serveur sur lequel réside le fichier., SQL state S1009 in SQLConnect inC:\dolibarrProduit\www\Visu\modification1.php on line 14
Impossible de se connecter à la bas de donnée

Si je lui donne un emplacement inexistant en local il me réponds la même chose...
La connexion physique n'est pas en cause. L'explorateur comme excel ou autre reconnait chacun des répertoires proposés et chacune des adresse proposé sauf l’inexistente :) bien-sur.
j'utilise win 7 sur les 2 pc et php 5.3.0

Merci pour la lecture et peu être une piste de recherche

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

20 déc. 2015, 19:44

Bonjour,

Dans le cas d'un partage réseau Windows, il y a 2 erreurs fréquentes qui sont à l'origine de 99% des problèmes d'accès :
1) L'antislash "\" dans un script PHP est le caractère d'échappement, par conséquent il ne va pas être interprété en tant que tel si tu ne le doubles pas.
Par conséquent, si tu veux accéder à un fichier sur ton disque local, par exemple C:\repertoire\fichier.txt , il faut utiliser dans ton script : C:\\repertoire\\fichier.txt
Dans le cas d'un partage réseau, par exemple \\NomPc\repertoire\fichier.txt , il faut utiliser dans ton script PHP : \\\\NomPc\\repertoire\\fichier.txt
Il est préférable de ne pas utiliser les montage virtuel sur une lettre type S:\\ mais plutôt l'adresse UNC, c'est à dire avec l'IP ou le nom de la machine.

2) L'autre problème c'est généralement un problème de droit d'accès.
En effet, il faut que l'utilisateur qui exécute ton serveur web (Apache ou IIS suivant les cas) ait les droits pour accéder à ce répertoire partagé en réseau.
En général, c'est en faisant un clic droit sur le répertoire sur la machine hôte, Propriétés, Partage, Permissions et là il faut sélectionner "Tout le monde" (mais c'est mal) ou indiquer le nom de l'utilisateur faisant tourner ton serveur web sur ta machine distante.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 12 Messages

21 déc. 2015, 14:32

Bonjour @rthur merci pour ton retour

1) pour les \ et autre étant un gros noob, j'ai utilisé la commande addslashes() qui fais son job sur C: elle devrait donc le faire en réseau. ou pas ou pas bien?

2) Accès au répertoire distant les 2 pc ont le même (seul et unique) utilisateur/mot de passe. J'ai ouvert tous les répertoires sous répertoires à tous le monde pour l test. J'y avais déjà accès avec explorateur, libre-office, avec les sources de données odbc, Est il possible de savoir sous quel utilisateur Apache tourne-t-il.

Tu semble convaincu que ce soit faisable, ce qui me rassure. Une subtilité m’échappe donc donc sur un de ces 2 points.... ou un 3 eme peut être?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

21 déc. 2015, 20:01

1) Même si théoriquement ça devrait marcher, n'utilise pas addslashes et double tes antislash, c'est + sûr.

Pour débuguer facilement, crée un fichier texte "test.txt" avec le contenu que tu veux dedans, dans le même répertoire que ton fichier .mdb.
Et utilise le script suivant dans un nouvelle page PHP :
<?php
var_dump(file_get_contents("\\\\NomPc\\repertoire\\test.txt"));
Ça permettra simplement de voir déjà si c'est un problème de permissions.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 12 Messages

21 déc. 2015, 21:15

Merci pour ton temps, et pourquoi j'y est pas pensé .....

il me répond

Warning: file_get_contents() [function.file-get-contents]: open_basedir restriction in effect. File(\\xxxxx\test.txt) is not within the allowed path(s): (c:/yyyyy) in C:\yyyy\modification4.php on line 2
Warning: file_get_contents(\\xxxxx\test.txt) [function.file-get-contents]: failed to open stream: Operation not permitted in C:\yyyyy\modification4.php on line 2
bool(false)

donc si je comprend bien j'ai un prob de permissions?

Je suis bon pour prendre un cours de partage réseau chez windob. (bien sur tous est autorisé en "tous le monde" de la racine au fichier (depuis cet essais) et accessible depuis quelque années avec le seul et unique utilisateur de ce pc identique sur les 2 pc...
en 3 jours j ai lut pas mal sur le sujet (sans y comprendre grand chose il faut avoué) il semble possible de passé par une source de donnée odbc ( qui elle marche avec excel par exemple) même si tous ce que j'ai lut se finissait en eau de boudin pour le mecs qui posait la question ^^ t'aurais une piste sur ce sujet.

(même si ça remet pas en cause le "tous le monde") J'ai un doute sur la gestion des majuscules par win : si je créer un nouvel utilisateur prenant les même lettres mais tous en majuscule Win refuse (identique). y a t'il un moyen de connaitre comment Apache lit l'utilisateur sur le quel il s'appuis?

Une spécification spécial pour win 7 pro 32 sur les 2 pc et Apache/2.2.11 (Win32) PHP/5.3.0?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

21 déc. 2015, 23:12

open_basedir restriction in effect. File(\\xxxxx\test.txt) is not within the allowed path(s): (c:/yyyyy)
Voila le problème :)
Tu as l'open_basedir activé :
http://php.net/manual/fr/ini.core.php#ini.open-basedir
Avec cette directive, les seuls fichiers que tu peux ouvrir sont ceux qui sont dans c:/yyyyy/... :-)

Donc il faut que tu la desactives dans le fichier httpd.conf
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 12 Messages

22 déc. 2015, 00:28

Merci j test ça demain.
:) tu m' aurais sortie une case à cocher dans win je t en aurais presque voulu:)

bonne soirée

Eléphanteau du PHP | 12 Messages

22 déc. 2015, 15:45

Bonjour,

"Donc il faut que tu la désactive dans le fichier httpd.conf" j'ai pas de "open_basedir" dedans. Je l'ai trouver dans php.ini.
En vue de test j'ai commenter la ligne: open_basedir = "c:/yyyy"
Sans résultat

Je vais lire un peu sur le sujet. Un truc me choque pour tester en local, si je demande à php d'aller dans C:/ffff/rrrr il y va volontiers, malgré la config actuel open_basedir = "c:/yyyy"

Merci pour ton aide je vais creusé un peu de ce coté.

Eléphanteau du PHP | 12 Messages

29 déc. 2015, 14:36

Bonjour,

Pour pouvoir se connecter avec Wamp sur un disc externe en php il faut
1) Permettre l’accès d'apache au réseau
Créer un utilisateur windows avec un mot de passe et lui donnée le groupe d'utilisateur
Démarrer le service wampapache (dans les service Windows) avec cet utilisateur clic droit sur le service, propriété, . connexion, Choisir ce compte l'utilisateur créer juste avant.
Redémarrer le service.
2) ajouter le répertoire du disc distant dans php.ini ATTENTION il peut y en a 2 voir plus
à la ligne : open_basedir = "xxxxxx"
ajouter : open_basedir = "xxxxxx ; //192.168.1.12/RepertoireVoulu/"
3) sur ordinateur distant créer un utilisateur Windows du même nom/mot de passe ayant acces au repertoire voulu.

Voila :)
Bonne fête a vous

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

29 déc. 2015, 14:57

Merci pour le partage de la solution !

Bonne journée :)
Quand tout le reste a échoué, lisez le mode d'emploi...