Se connecter avec
S'enregistrer | Connectez-vous

Load data local infile ne fonctionne pas chez hébergeur free

Dernière réponse : dans Programmation

bonjour, je fais une petite application web qui permet d'importer des fichiers csv en bdd et vice versa. pour l'importation j'utilise la commande load data local infile. En local ça marche super bien mais sur mon hébergeur gratuit free ça ne fonctionne pas. La connexion est bonne puisque ça crée la structure la table mais le load data ne remplit absolument pas la table, elle reste vide. Et surtout je n'ai aucune erreur.
  1. $chemin_fichier=$_SERVER['DOCUMENT_ROOT'] . "/xlsmagique/liste/fichier.csv"; // Ajouter les données a la table
  2. $query="LOAD DATA LOCAL INFILE '$chemin_fichier'
  3. REPLACE INTO TABLE $nameTable
  4. FIELDS TERMINATED BY ';'
  5. LINES TERMINATED BY '\n'";
  6. $retour1=mysql_query($query) or die (mysql_error()."<br /><br />".$query);

le chemin du fichier est bien le bon puisque j'ai vérifié en faisant
echo realpath("liste/fichier.csv") et j'obtiens le meme chemin que celui que je crée.
j'ai vu ici et là qu'il y avait un problème avec cette commande chez certains hébergeurs.
comment remédier à ce problème?

merci à tous
Lassé par la pub ? Créez un compte
Expert Programmation

C'est pas faute d'avoir prévenu ... tu n'y peux rien. Changement d'hébergeur pour un avec une configuration correct la configuration du serveur est un des premier paramètre à connaitre avant un développement.
Expert Programmation

Pour PHP tu fais un phpinfo().

Sinon pour MySQL c'est un peu plus compliqué, à dire vrai je le fais plus par connaissance du sujet. LOAD DATA c'est vraiment pas fait pour être utilisé dans du code PHP car ca entre souvent dans du backup ou des choses dont le traitement est long, donc à ne pas mettre en PHP ou il y a une limite de temps d'exécution quasiment systématiquement.

Bref tu es bon pour modifier tout ca et le faire en PHP, mais fait attention au temps d'exécution. Conseil, récupère les infos sur comment est configurer ton hébergeur est fait ressembler cette configuration avec celle que tu as en local.

Typiquement, depuis hier je suis en train de patcher du code (Solr PHP Client) pour qu'il n'utilise pas file_get_contents qui est désactivé pour les url. Sur une configuration basique WAMP, c'est activé. Bref, si je n'avais pas fait attention, j'aurais eu du code qui ne fonctionnait pas en production ... Donc j'ai remplacé par du Curl mais c'est pareil, il faut avoir Curl, qui sur du mutualisé est rare.

oui j'ai bien fait un phpinfo justement mais je ne trouve pas où c'est indiqué.
les modifications vont être assez rapides à faire donc c'est pas trop grave.
Mais je ne comprend pas quelque chose, si je fais un load data dans le terminal sql de phpmyadmin ça fonctionne donc pourquoi ça ne fonctionne pas dans du code php?

en tout cas merci de tes conseils clairs et limpides
Expert Programmation

En général on met une configuration un peu différente pour phpmyadmin.

En tout cas, si tu te connectes avec le même user sur phpmyadmin que ce que tu as dans ton code c'est bizarre. Car c'est les droits MySQL sont fixé sur ce dernier. Mais à dire vrai, je ne connais pas exactement la configuration chez Free.

Citation :
Pour des raisons de sécurité, lorsque les fichiers sont lus sur le serveur, ils doivent se trouver dans le répertoire de la base de données courante, ou bien être lisible par tous. Pour utiliser la commande LOAD DATA INFILE sur des fichiers du serveur, vous devez avoir le droit de FILE sur le serveur. See Section 5.5.3, « Droits fournis par MySQL ».

Documentation MySQL


Bref, si tu veux tester, il faut que tu créer un user sans droit file en local et comparer si le comportement est identique que chez free chez toi. Si oui, la probabilité que ce soit ça est juste énorme.
Expert Programmation

ah non tu peux pas :D  il y a une raison d'avoir des droits limités. Faut trouver un autre hébergeur ou bien avoir un serveur dédié et faire ce qu'on veut dessus. (et d'ailleurs sur un dédié à mon avis tu désactiverais ce genre de chose aux gens susceptible d'avoir des droits sur ta base (genre tu sous loue un peu ton serveur)).
Lassé par la pub ? Créez un compte
Tom's guide dans le monde