Page 1 sur 2

Serveur Linux

Posté : 17 oct. 2011, 10:14
par Jibe
Bonjour,

J'ai une application PHP qui tournait très bien en local mais qui est bien décidé à me créer des problèmes depuis qu'elle tourne sur un serveur Linux. Dans mon application je fais un extract des données de ma base pour les exporter vers Excel. Cette fonction ne marchait pas, j'ai donc demandé qu'on rajoute les librairies manquantes. Ça ne marche toujours pas mais en plus après avoir installé le module xml, mes vérifications avec mysql_real_escape_string ne sont plus traitées...
Le service informatique m'a dit que c'était parce qu'il y avait une incompatibilité entre la libraire xml et la requête mysql_real_escape_string du coup pour faire tourner mon application j'ai été obligé d'enlever les vérifications d'injections sql...
Qu'en pensez-vous ?
Merci.

Re: Serveur Linux

Posté : 17 oct. 2011, 13:50
par moogli
Qu'en pensez-vous ?
sans que code que c'est toi ou service info qui est mauvais :mrgreen:

plus sérieusement mysql_real_escape_string n'a rien a voir avec xml, d'ailleurs je ne saisis pas bien le rapport xml et excel, mais bon pourquoi pas.

a priori il n'y a pas de raison que ton code ne puisse pas fonctionner avec mysql_real_escape_string.

indique nous :
- la version de php
- le ou les messages d'erreurs (si y en a pas quel niveau d'erreur)
- le code :mrgreen:

sans ça les réponses resteront évasive je pense ;)

@+

Re: Serveur Linux

Posté : 17 oct. 2011, 14:26
par Jibe
OK. Pour exemple lorsqu'un utilisateur veut se connecter à l'application il doit s'identifier. Dans une page de vérification, j'ai un script qui récupère le login et le mdp pour les comparer à ceux de la base.

Ce code marche :
if (!empty($_POST['log']) && !empty($_POST['mdp'])) 
			{
				$log=$_POST['log'];
				$mdp=md5($_POST['mdp']);
Celui là ne marche pas
if (!empty($_POST['log']) && !empty($_POST['mdp'])) 
			{
				$log=mysql_real_escape_string($_POST['log']);
				$mdp=md5($_POST['mdp']);
Dans le code qui marche pas aucune erreur n'est retournée mais le log n'est pas reconnu ou interprété alors qu'en local ça marche nickel.
Pour info à priori le module xml est nécessaire pour faire fonctionner PHPexcel.

Re: Serveur Linux

Posté : 17 oct. 2011, 14:53
par macgawel
Tu te connectes bien avant de faire ton mysql_real_escape_string() ?

Extrait de la doc :
La connexion MySQL. S'il n'est pas spécifié, la dernière connexion ouverte avec la fonction mysql_connect() sera utilisée. Si une telle connexion n'est pas trouvée, la fonction tentera d'ouvrir une connexion, comme si la fonction mysql_connect() avait été appelée sans argument. Si aucune connexion n'est trouvée ou établie, une alerte E_WARNING est générée.
En gros, la fonction va essayer dans l'ordre :
1. Utiliser la connexion existante.
2. Ouvrir une connexion par défaut.
3. Planter.

A priori, je dirais que la différence entre ton serveur local et le vrai se trouve là.
Il faut que tu commences par te connecter avec mysql_connect(), ou que tu paramètres ton serveur pour avoir par défaut des valeurs qui vont bien (je te déconseille cette deuxième solution pour des raisons de sécurité).

Re: Serveur Linux

Posté : 17 oct. 2011, 16:38
par Jibe
Oui juste avant le 1er if il y a un require("connect.php")

Re: Serveur Linux

Posté : 17 oct. 2011, 16:48
par macgawel
Oui juste avant le 1er if il y a un require("connect.php")
Dans ce cas, vérifie la connexion juste avant le mysql_real_escape() :
printf("Informations sur l'hôte MySQL : %s\n", mysql_get_host_info());

Re: Serveur Linux

Posté : 17 oct. 2011, 17:43
par moogli
et que donne un var_dump($log); ?

parce que bon la c'est pas clair :)

vérifie aussi ton niveau d'erreur si tu souhaite debugger.

sinon y a PDO :mrgreen:

@+

Re: Serveur Linux

Posté : 18 oct. 2011, 16:13
par Jibe
Merci pour vos réponses. J'ai pas encore trouvé la faille mais ça va venir.
En revanche j'ai une autre question.

Dans mon application j'exporte des données de la base dans un template excel. Le template en question est dans le repertoire de mon site sauf que il faut quand même que je fasse une vérification pour voir si il en existe pas un sur l'ordinateur du client et ceci sur un chemin bien précis (C:\\gestcomp\\Template_evol_collab.xlsx)
J'ai ce bout de code qui permet de faire la vérification :
$objet = new PHPExcel_Reader_Excel2007();

if(file_exists("C:\\gestcomp\\Template_evol_collab.xlsx")) 
{
	$excel = $objet->load('C:\\gestcomp\\Template_evol_collab.xlsx');
}
else
{
	$excel = $objet->load('Template_evol_collab.xlsx');
}
Ceci marche bien en locale et à priori file_exists ne marche qu'en local. J'ai quand même transféré le script sur le serveur (en ayant un fichier sur C:\\gestcomp\\) et effectivement il ouvre le template du dossier de l'application alors qu'il aurait du ouvrir celui du C. Du coup est-ce que vous savez comment je pourrai faire pour réaliser mon test sur l'application du serveur?
Merci.

Re: Serveur Linux

Posté : 18 oct. 2011, 16:24
par macgawel
En revanche j'ai une autre question.
(...)
Du coup est-ce que vous savez comment je pourrai faire pour réaliser mon test sur l'application du serveur?
Merci.
Ce n'est pas possible.
En tout cas pas avec PHP.
En tout cas, ce n'est pas normalement possible.

Je te laisse imaginer les possibilités d'exploits/virus/etc que ça engendrerait :priere:

Re: Serveur Linux

Posté : 18 oct. 2011, 23:17
par moogli
ton seul moyen la c'est avoir une application coté client (pas du web un soft, en java, C#, ou quoi se soit d'autre :) ) quitte a ce que ce soft utilise un service web en php qui génère le fichier excel et te le fournit

@+

Re: Serveur Linux

Posté : 25 oct. 2011, 10:18
par Jibe
Salut,

Merci pour vos réponses et désolé pour ma réponse tardive. Donc en PHP c'est vraiment pas faisable d'adapter la commande if file_exists... :cry: ca aurait été tellement plus simple. Mais d'un autre côté je comprends par rapport à la sécurité.

Par contre est-ce que tu pourrais développer un peu plus ton idée moogli stp? Parce qu'apparemment côté client ya moyen de développer quelque chose en java qui fonctionnera mais je voudrai être sur de bien comprendre le principe.

Merci.
++

Re: Serveur Linux

Posté : 25 oct. 2011, 11:03
par moogli
Merci pour vos réponses et désolé pour ma réponse tardive. Donc en PHP c'est vraiment pas faisable d'adapter la commande if file_exists... ca aurait été tellement plus simple. Mais d'un autre côté je comprends par rapport à la sécurité.
c'est une question de sécurité et de logique le serveur ne connais, a priori, rien de la machine cliente.

après dans un réseau interne d'entreprise tu peux très bien dire que toutes les machines ont un répertorie partagé et que depuis le réseau tu va écrire dessus. rien ne t'en empêche (j'ai fait du support technique pour une grosse banque qui le fait, les "admin" ont accès aux disques de n'importe qu'elle machine pourvu qu'il ai l'ip ou le nom de la machine). La c'est la même chose c'est réalisable si tu le nom de la machine et les bons droits.
Par contre je ne pense pas que cela soit vraiment une solution pérenne.

Après mon "idée" de l'application cliente est simple. lorsque tu lance une application sur ton ordi tu à accès aux disque comme tu le souhaite (pourvu que tu soit administrateur, la encore si la personne ne l'ai elle ne pourra accéder qu'à son répertoire utilisateur, vrai aussi sous windows maintenant avec W7).

Donc, partant de ce constat, si tu créer une application "cliente" qui utilise va "se connecter" sur ton site oueb pour récupérer le fichier généré elle pourra le coller la où tu le souhaite.
Après y a des contraintes technique :
Coté serveur :
- créer une "service web" qui va fournir le fichier excel à l'appli cliente (donc en gros c'est le script que tu a déja, il envoie le fichier en utilisant le protocole http "classique" comme le ferais un navigateur)

Coté client
- une interface simple pour l'utilisateur
- l'application doit être capable de contacter contacter un serveur web avec http et récupérer un fichier par ce protocole (c'est ce que fait un navigateur en fait).
- créer le fichier à l'emplacement voulu.

Perso je me demande l'intérêt d'une telle chose.

est ce que ce fichier excel est vital au système pour qu'il soit placer à un emplacement précis ?
n'est il pas possible de proposer le téléchargement simplement, quitte a indiquer où mettre le fichier ?

@+

Re: Serveur Linux

Posté : 26 oct. 2011, 10:28
par Jibe
OK, je vais creuser de ce côté là alors.
L'intérêt en fait c'est que les utilisateurs de l'application vont être amenés à exporter des données de la base pour en faire des statistiques. Il y a un template existant dans le répertoire du serveur mais à priori certains utilisateurs auraient leur propre template donc avant d'ouvrir celui du serveur faut faire une vérif pour voir si il en existerait pas un dans un répertoire particulier...

Re: Serveur Linux

Posté : 26 oct. 2011, 11:10
par moogli
ou alors tu le demande à l'utilisateur ?

si l'utilisateur est "connecté" (via login / mdp) tu peux très bien imaginer de demande à remplir un "profil" dans lequel tu permet l'upload vers le serveur d'un template (ou plusieurs pourquoi pas) que tu pourra associer à l'utilisateur et au moment de lui envoyer les données tu dit : template par défaut ou template perso ?
a partir de la tu charge le bon template et envoie les données choisies ;)

en gros
une table utilisateurs (id, nom, prenom, mot de passe etc etc etc)
une table template (id, iduser, lien template)

tu a un code "générique" qui existe déja, il ne te reste qu'a choisir le bon template.

Bien sur cela oblige l'utilisateur à fournir un template cohérent avec ce que tu utilise (enfin c'est le but d'un template, le fond est le même la forme change).

une simple intéret de ce truc c'est que si quelqu'un veux montre la chose à un collègue depuis un poste qui n'est pas le siens, ça fonctionne.

Par ailleurs s'il y a un changement de PC (raison x ou y) le template n'est pas perdu et l'utilisateur continue de travailler sans problème ;)

C'est mon point vue, il permet de simplifier ton application et une souplesse pour l'utilisateur qui n'aura qu'une seule contrainte : uploder le template sur le serveur (c'est quand même pas la mort ^^)

@+

Re: Serveur Linux

Posté : 26 oct. 2011, 15:36
par Jibe
Ah oui ça me paraît encore une meilleur idée que passer par une applet Java. Je pense que je vais suivre cette piste là.
Merci.