Aller au contenu

Récupérer données XML avec PHP


Messages recommandés

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

Lien vers le commentaire
Partager sur d’autres sites

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

 

Lien vers le commentaire
Partager sur d’autres sites

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).

 

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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?

 

 

Lien vers le commentaire
Partager sur d’autres sites

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  : 

 

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

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

Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines après...

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

Lien vers le commentaire
Partager sur d’autres sites

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;

 

 

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

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.