Aller au contenu

Featured Replies

Posté(e)

Bonjour, je poste sur ce sujet car je pense qu'il correspond bine à mon porblème.

j'ai installé un serveur SYNOLOGY, et je compte récupérer des données XML en utilisant PHP. Je précise que je débute en PHP...

Ma question est triviale (désolé) mais bloquante pour moi :
Mon script PHP récupère un contenu xml avec "simplexml_load_file", que je compte sauvegarder dans un fichier "res.txt".

Avec ça :
... $fichier = fopen("res.txt", "a"); ... j'ai le message d'erreur suivant :
Warning: fopen(res.txt): failed to open stream: Permission denied in /volume1/web/essai.php on line 14 Call Stack: 0.0015 134352 1.

Si je passe la commande fopen en mode lecture :
...$fichier = fopen("res.txt", "r"); ... je n'ai plus de message d'erreur. Je comprends donc que je n'ai pas les droits suffisants sur le fichier res.txt.
Pourtant:
° avec putty, je vois que le fichier est : (Je suis "pat" et j'ai les mêmes droits que "root")
-rwxrwxrwx+ 1 pat root 0 Dec 17 00:00 res.txt
° Avec file station (SYNOLOGY), "pat" a les droits écriture et lecture dans le répertoire "web", et sur ce fichier "res.pat"?

° j'ai le même niveau de droit sur res.txt
-rwxrwxrwx+ 1 pat users 986 Jan 23 20:12 essai.php
Avez vous une idée ?

Merci

Pat

Posté(e)

Bonjour,

Cela doit venir du groupe Http en lecture seul sur le dossier web. 

Attention sur la modification des droits du groupe, si tu peux écrire, potentiellement les autres aussi.

Tu aurais plus ouvert un nouveau sujet ;)

 

Posté(e)
  • Auteur

Merci pour la réponse et les conseils, c’était mon premier post (;-)...

Bonsoir Antwan,

  • "Http en lecture seule"? Malheureusement je ne vois pas Http dans FILESTATION ni avec PuTTY, peux tu m'indiquer où le trouver pour changer les droits?
  • "Attention sur la modification des droits du groupe", je comprends la remarque, mais comment récupérer mes données sinon? Peux tu m'indiquer un tutoriel si c'est trop fastidieux à expliquer.

Bye

Pat

 

Posté(e)

Sur DSM, dans Panneau de configuration -> Groupe -> http. C'est le groupe par défaut du système pour les services Web, en gros quand tu utilises un script PHP, ce n'est pas les droits de ton utilisateur (pat), mais celui du groupe http. 

Tu peux les modifier les droits en cliquant sur le groupe http puis Modifier et dans l'onglet Permissions, choisir ce qui convient (avec Lecture/Ecriture ça devrait passer je pense).

 

Posté(e)
  • Auteur

J'obtiens le même message d'erreur :

Warning: fopen(results.txt): failed to open stream: Permission denied in /volume1/web/essai.php on line 14 Call Stack: 0.0014 134216 1.

 

J'ai joint un snapshot de ma config, ai-je correctement suivi tes conseils?

Bye

Pat

http.JPG

Posté(e)

Oui c'est le bon endroit. Et en cochant Attributs d'écriture ? Ou tout ce qu'il a dans écrire excepter les suppressions.

 

Edit : Dans écriture avec tout sauf suppression c'est bon pour moi

Modifié par Antwan
MAJ

Posté(e)
  • Auteur

OK c'est bon, plus de message d'erreur. Merci Antwan.

Et au niveau "approche globale plus sécurisée", comment ferais tu pour récupérer des données XML (d'un équipement domotique dans mon cas), si ce n'est pas avec http?

 

 

Posté(e)

Domotique c'est en interne, donc pas d'ouverture sur internet. Tu créais un site uniquement accessible sur ton réseau local, et il ne devrait pas y avoir de problème. Après si tu veux contrôler de l'extérieur au minimum HTTPS + connexion utilisateur avec mot de passe fort.

Tu peux voir ce tuto pour la sécurité globale du NAS  : 

 

Posté(e)
  • Auteur

Merci pour les infos,

bonne soirée

Bye

Pat

  • 2 semaines après...
Posté(e)
  • Auteur

Bonsoir, après avoir suivi le tuto sur la sécurité, et l'avoir appliqué, j'ai à nouveau un message d'erreur lors de l’exécution..ci-dessous:

Warning: fopen(http://192.168.1.__:__/status.xml): failed to open stream: HTTP request failed! HTTP/1.1 401 Unauthorized in /volume1/web/essai.php on line 4

la ligne 4 est : " if (!$fp = fopen("http://192.168.1.__:__/status.xml","r")) ..."

La différence avec le précédent post est le "Unauthorized " au lieu du " Permission denied" . Qu"est-ce qui pourrait expliquer cela? J'ai revu les permissions sur le groupe "http" elles sont cochées pour lecture/écriture.

Il ne m'est pas possible d'aller plus loin, merci pour vos conseils.

Bye

Pat

Posté(e)

Le code 401 indique que c'est la destination qui refuse ta connexion car tu n'es pas authentifié.

Pas de lien avec les permissions des fichiers.

  • 3 semaines après...
Posté(e)
  • Auteur

Bonsoir, merci et désolé .

Merci car je reprends espoir dans cet environnement nouveau pour moi, et "désolé" car j'ai douté de ton tuto et étais sur le point de repartir à zéro en suivant Synology...

Effectivement en supprimant mon accès protégé je récupère mes données...:redface:  A ma décharge cependant il y a tellement de causes possibles que je n'ai pas pointé la plus évidente; Merci encore.

Oserais-je te demander où trouver comment intégrer mon login/psw dans ma commande fopen, attendu que cet accès se fait en purement en local?

Bye

Pat

Posté(e)

Il faut déclarer un contexte : http://www.php.net/manual/en/context.http.php

Exemple :

<?php
class RESTClient {
  const USER_AGENT = 'bob';
}
$url = 'http://www.example.com/';
$username = "fish";
$password = "paste";
$b64 = base64_encode("$username:$password");
$auth = "Authorization: Basic $b64";
$opts = array (
        'http' => array (
            'method' => "GET",
            'header' => $auth,
            'user_agent' => RESTClient :: USER_AGENT,
        )
);
$context = stream_context_create($opts);
$fp = fopen($url, 'r', false, $context);
$result = "";
while ($str = fread($fp,1024)) {
    $result .= $str;
}
fclose($fp);
echo $result;

 

 

Posté(e)
  • Auteur

Bonsoir, je n'arrive pas à récupérer mes données xml ainsi. j'obtiens le msg d'erreur suivant:

Warning: fopen(http://192.168.1._:_/status.xml/): failed to open stream: HTTP request failed! HTTP/1.1 404 Not found in /volume1/web/essai1.php on line 21 Call Stack: 0.0109 136424 1. {main}() /volume1/web/essai1.php:0 0.0110 138360 2. fopen() /volume1/web/essai1.php:21 Warning: fread() expects parameter 1 to be resource, boolean given in /volume1/web/essai1.php on line 23 Call Stack: 0.0109 136424 1. {main}() /volume1/web/essai1.php:0 0.0379 139104 2. fread() /volume1/web/essai1.php:23 Warning: fclose() expects parameter 1 to be resource, boolean given in /volume1/web/essai1.php on line 26 Call Stack: 0.0109 136424 1. {main}() /volume1/web/essai1.php:0 0.0380 139152 2. fclose() /volume1/web/essai1.php:26

Ci-joint ce que je lance (essai1.php)

Je précise que si j'enlève la protection login/mdp, je récupère correctement avec :

  • en exécutant 'http://192.168.1._:_/status.xml/'
  • ou avec le scrip suivant (ci-joint essai.php)

 

essai1.php

essai.php

Posté(e)
  • Auteur

Bien vu Fenrir, c'est bien le "/" de trop à la fin de la ligne url.   

J'ai noté aussi la liste des codes d'erreur.

Je vais tenter d'organiser pour que mes login/pswd soit  dans un endroit sécurisé, et l'inclure dans mes fichiers par #include

Merci

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.