WampServer

Apache, PHP, MySQL on Windows 

 
  • Accueil forum
  • Retour à WampServer
  • presentation
  • Download
  • Addons
  • Formations
  • Alter Way

 
Voir le sujet: Précédent•Suivant
Aller à : Liste des Forums•Liste des messages•Nouvelle discussion•Recherche•Connexion•Imprimer la vue
LOAD DATA INFILE not allowed
Envoyé par: JCRCAN (---.w109-210.abo.wanadoo.fr)
Date: 24 June 2022 à 01:05

#1290 - The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

Comment modifier le paramètre?
JCRCAN

Options: Répondre•Citer ce Message
Re: LOAD DATA INFILE not allowed
Envoyé par: maximus23 (---.dynamic.voo.be)
Date: 24 June 2022 à 07:34

Bonjour,


Modifier le contenu du fichier my.ini dans la version concernée de Mysql ou MariaDb :

[mysqld]
secure_file_priv = ""


Si il n'existe pas il faut l'ajouter à la fin dans la section [mysqld] sinon le modifier comme ci-dessus.

smiling smiley

Options: Répondre•Citer ce Message
Re: LOAD DATA INFILE not allowed
Envoyé par: JCRCAN (---.w109-210.abo.wanadoo.fr)
Date: 24 June 2022 à 11:08

J'ai bien fait le changement. OK!
Maintenant je fais une commande SQL via phpMyAdmin dans laquelle je donne le chemin du fichier à charger comme suit:

LOAD DATA INFILE 'C:\Users\Jean Claude\Documents\ADNA06\Développements\FormationWamp\intersection_258464'

J'obtiens le message suivant:

#29 - File 'c:\wamp64\bin\mysql\mysql5.7.36\data\UsersJean ClaudeDocumentsADNA06DéveloppementsFormationWampintersection_258464' not found (Errcode: 2 - No such file or directory)


Il ne cherche pas le fichier là où je l'ai défini. Comment faire?
Aurais-je le même problème en exécutant LOAD DADA via un script PHP?
Merci.

Options: Répondre•Citer ce Message
Re: LOAD DATA INFILE not allowed
Envoyé par: maximus23 (---.dynamic.voo.be)
Date: 24 June 2022 à 12:02

Bonjour,

La procédure n'est pas la bonne.

J'ai fait une vidéo à l'époque donc voir ceci : [www.smf-fr.com]

smiling smiley

Options: Répondre•Citer ce Message
Re: LOAD DATA INFILE not allowed
Envoyé par: Otomatic (Modérateur)
Date: 24 June 2022 à 15:29

On peut mettre les fichiers à charger dans le dossier tmp de wamp.

------------------------------------------------------------------------------------------------------------
Wampserver 3.3.0 32 bit - Apache 2.4.54.2 - PHP 8.2.4…7.4.33 - MySQL 5.7.40 - MariaDB 10.5.13/10.6.5
Wampserver 3.3.0 64 bit - Apache 2.4.54.2 - PHP 8.2.4…7.4.33 - MySQL 5.7.40/8.0.31 - MariaDB 10.5.17/10.10.2
PhPMyadmin 5.2.1 - MysqlDumper 1.24.5
on W10 Pro 64 bit
Documentation Apache - Documentation PHP - Documentation MySQL - Wampserver install files & addons
« Ce n'est pas parce qu'ils sont nombreux à avoir tort, qu'ils ont forcément raison. Coluche »
« It's not because they are many to be wrong, they are necessarily right. Coluche »

Options: Répondre•Citer ce Message
Re: LOAD DATA INFILE not allowed
Envoyé par: JCRCAN (---.w109-210.abo.wanadoo.fr)
Date: 26 June 2022 à 00:36

J'ai mis le fichier dans le répertoire 'c:\wamp64\bin\mysql\mysql5.7.36\data\ValPic (ValPic est la base de donneés courante). Ca marche, mais ce n'est évidemment pas la chose à faire.

Donc vous proposez tmp. Il faut donc spécifier le fichier avec le chemin:
'c:\wamp64\tmp\nom du fichier

Exact?

Options: Répondre•Citer ce Message
Re: LOAD DATA INFILE not allowed
Envoyé par: JCRCAN (---.w109-210.abo.wanadoo.fr)
Date: 27 June 2022 à 18:42

Encore moi.
Vous avez dû trouver mon dernier envoi de peu d'intérêt et j'en conviens, ce n'est pas d'un niveau époustouflant.
Mais sincèrement, mon application va nécessiter l'usage de plusieurs fichiers externes lus par LOAD DATA INFILE.
J'ai un problème avec la localisation idéale de ces fichiers. Pour le moment je n'ai eu du succès qu'en les stockant dans c:\wamp64\bin\mysql\mysql5.7.36\data\ValPic (ValPic étant la base de données sur laquelle je travaille). Je doute que ce soit approprié.
Supposant comme vous le suggérez de les placer dans tmp, comment dois-je spécifier le chemin pour que MySQL les trouve là dans ce répertoire?
Mes notions de OS sont loin...
Merci.

Options: Répondre•Citer ce Message
Re: LOAD DATA INFILE not allowed
Envoyé par: maximus23 (---.dynamic.voo.be)
Date: 27 June 2022 à 19:35

Bonjour,

Mode console mysql.

Il suffit d'utiliser le mode LOCAL et là tu mets ton fichier ou tu veux.

Exemple :

Tu crées un répertoire dans wamp64 nommé importcsv donc tu as wamp64/importcsv

Tu mets ton fichier à importer dedans exemple monfichier.csv

Pour le LOAD tu fais ceci pour l'exécution :

LOAD DATA LOCAL INFILE 'importcsv/monfichier.csv' INTO TABLE matable
etc......suite du code.....

matable est bien entendu ta table sql définie pour l'importation du fichier.


Bon courage.

smiling smiley

Options: Répondre•Citer ce Message
Re: LOAD DATA INFILE not allowed
Envoyé par: JCRCAN (---.w109-210.abo.wanadoo.fr)
Date: 28 June 2022 à 18:08

J'avance avec persévérance.
J'exécute LOAD DATA LOCAL INFILE via PHP. J'obtiens le message:

#2000 - LOAD DATA LOCAL INFILE is forbidden, check mysqli.allow_local_infile

Ceci me renvoie dans le fichier PHP.ini dans lequel je trouve:

; Allow accessing, from PHP's perspective, local files with LOAD DATA statements
; [php.net]
;mysqli.allow_local_infile = On

Dois-je simplement décommenter la 3ème ligne? Ou les 3?

Merci.

Options: Répondre•Citer ce Message
Re: LOAD DATA INFILE not allowed
Envoyé par: JCRCAN (---.w109-210.abo.wanadoo.fr)
Date: 28 June 2022 à 19:17

En exécutant LOAD DATA LOCAL INFILE via PHP j'obtiens ce message:

#2000 - LOAD DATA LOCAL INFILE is forbidden, check mysqli.allow_local_infile

Qui me conduis dans PHP.ini à cet emplacement:

; Allow accessing, from PHP's perspective, local files with LOAD DATA statements
; [php.net]
;mysqli.allow_local_infile = On

Dois-je simplement décommenter la 3ème ligne? Ou les trois lignes?

Désolé pour ma stratégie des petits pas...

Options: Répondre•Citer ce Message
Re: LOAD DATA INFILE not allowed
Envoyé par: maximus23 (---.dynamic.voo.be)
Date: 28 June 2022 à 19:40

Bonjour,

J'ai bien indiqué d'utiliser le mode CONSOLE.

Je ne sais pas ce que tu veux faire exactement ?

Un script Php pour importer ton csv car là c'est totalement différent ?

Un batch pour utiliser le mode console ?

Le mode Console direct ?

Là il faudrait être plus explicite pour voir ce qu'il en est.

smiling smiley

Options: Répondre•Citer ce Message
Re: LOAD DATA INFILE not allowed
Envoyé par: JCRCAN (---.w90-116.abo.wanadoo.fr)
Date: 29 June 2022 à 09:48

Réponse: Un script Php pour importer ton csv car là c'est totalement différent ?

Voici le code que je suis en train de tester:

<!DOCTYPE html>
<html>
<head>
<title>Cours PHP / MySQL</title>
<meta charset="utf-8">
<link rel="stylesheet" href="cours.css">
</head>
<body>
<h1>Bases de données MySQL</h1>
<?php
$servname = 'formation';
$dbname = 'ValPic';
$user = 'root';
$pass = '';

//On établit la connexion
$conn = new mysqli($servname, $user, $pass);

//On vérifie la connexion
if($conn->connect_error){
die('Erreur : ' .$conn->connect_error);
}
echo 'Connexion réussie';

$sql = "LOAD DATA LOCAL INFILE 'importcsv/intersection_258464.csv'
INTO TABLE Survols_Temp
FIELDS TERMINATED BY ';' ENCLOSED BY '' LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(date_UTS,
date_S,
nom_survol,
Depart,
Arrivee,
Altitude,
Distance,
Matricule,
Type_Aeronef,
Type_Calipso,
Proprietaire,
Base,
Type_Detection)";

$result=mysqli_query($conn, $sql);
if($result){
echo "<br>","success";
}
else{
echo "<br>","failed";

}
?>
</body>
</html>

Options: Répondre•Citer ce Message
Re: LOAD DATA INFILE not allowed
Envoyé par: maximus23 (---.dynamic.voo.be)
Date: 29 June 2022 à 14:25

Bonjour,

Voici la procédure pour importer ton fichier.

Donc tu crées ta base et ta table avec tes champs et tu adaptes ceci pour ton importation.

C'est une simple requête PDO et cela permet d'aller très vite pour importer.

<?php
$databasehost = "localhost"; //Nom du serveur
$databasename = "testcsv"; //Nom de la Base de Donnée
$databasetable = "matable"; //Nom de la table qui aura été crée avec les champs
$databaseusername="root"; //Nom Utilisateur
$databasepassword = "test"; //Mot de Passe
$fieldseparator = ","; //Type de Séparateur
$lineseparator = "\n"; //Séparateur de Ligne exemple ici saut de ligne
$csvfile = "myFile.csv"; //Nom du fichierCSV
if(!file_exists($csvfile)) {
die("Fichier introuvable. Assurez-vous que vous avez précisé le bon chemin pour ce Fichier." );
}
try {
$pdo = new PDO("mysql:host=$databasehost;dbname=$databasename",
$databaseusername, $databasepassword,
array(
PDO::MYSQL_ATTR_LOCAL_INFILE => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
)
);
} catch (PDOException $e) {
die("database connection failed: ".$e->getMessage());
}
$affectedRows = $pdo->exec("
LOAD DATA LOCAL INFILE ".$pdo->quote($csvfile)." INTO TABLE `$databasetable`
FIELDS TERMINATED BY ".$pdo->quote($fieldseparator)."
LINES TERMINATED BY ".$pdo->quote($lineseparator));
echo "Un total de $affectedRows a été chargé à partir du fichier csv.\n";
?>

Bon courage.

smiling smiley



Modifie 2 fois. Derniere modification le 29/06/2022 à 14:28 par maximus23.

Options: Répondre•Citer ce Message
Re: LOAD DATA INFILE not allowed
Envoyé par: JCRCAN (---.w90-116.abo.wanadoo.fr)
Date: 29 June 2022 à 16:54

Du courage il m'en faudra et je crois en avoir.
Je vous remercie pour votre disponibilité.
Ca a avancé, votre procédure semble fonctionner, mais à chaque avancée une question se pose. Au risque de vous importuner:

1) Comment faire pour ignorer n premières lignes?

2) Eliminant manuellement la ligne 1 j'ai 2 champs DATETIME que je retrouve à 0000-00-00 00:00:00. Ca avait fonctionné via phpMyAdmin

3) Une seule ligne est récupérée. Comment récupérer tout le fichier?

Merci.

Options: Répondre•Citer ce Message
Re: LOAD DATA INFILE not allowed
Envoyé par: maximus23 (---.dynamic.voo.be)
Date: 29 June 2022 à 17:35

Bonsoir,

Le problème c'est qu'on est assez dispersé le temps des congés et que l'on n'a rien pour pouvoir tester.

Donc t'aider correctement par cœur sans dire d'âneries smiling smiley pour le moment n'est pas possible.

Tu es au moins sur la bonne piste essaye de voir sur un forum qui est spécialisé pour avoir une aide plus adéquate et efficace.

Moi j'ai encore 8 jours en étant assez occupé si vraiment tu ne trouves pas ton bonheur on verra ce que l'on peu faire.

smiling smiley

Options: Répondre•Citer ce Message
Re: LOAD DATA INFILE not allowed
Envoyé par: JCRCAN (---.w90-116.abo.wanadoo.fr)
Date: 02 July 2022 à 18:27

Je comprends que vous ne pouvez pas intervenir à tous les niveaux.
Je suis cependant assez satisfait car vous m'avez mis sur la bonne piste et avec un peu de perspicacité je suis arrivé à la solution, la principale conclusion étant qu'il ne faut pas que la table de destination soit définie avec une clé.
Ci-dessous le code auquel j'ai abouti avec succès:

<html>
<head>
<title>Cours PHP / MySQL</title>
<meta charset="utf-8">
<link rel="stylesheet" href="cours.css">
</head>
<body>
<h1>Bases de données MySQL</h1>
<?php
$databasehost = "formation"; //Nom du serveur
$databasename = "ValPic"; //Nom de la Base de Donnée
$databasetable = "Survols_Temp"; //Nom de la table qui aura été crée avec les champs
$databaseusername="root"; //Nom Utilisateur
$databasepassword = ""; //Mot de Passe
$fieldseparator = ";"; //Type de Séparateur
$enclosing = '"' ; //Type de Séparateur
$lineseparator = "\r\n"; //Séparateur de Ligne exemple ici saut de ligne
$lineignore = 1; //Nombre de lignes à ignorer
echo $lineignore;
$csvfile = "C:\wamp64\importcsv\intersection_270758_Long_Avec_Titre.csv"; //Nom du fichierCSV
if(!file_exists($csvfile)) {
die("Fichier introuvable. Assurez-vous que vous avez précisé le bon chemin pour ce Fichier." );
}
try {
$pdo = new PDO("mysql:host=$databasehost;dbname=$databasename",
$databaseusername, $databasepassword,
array(
PDO::MYSQL_ATTR_LOCAL_INFILE => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
)
);
} catch (PDOException $e) {
die("database connection failed: ".$e->getMessage());
}
print "$pdo->quote($lineignore) ";
print "$pdo->quote($csvfile) ";
$affectedRows = $pdo->exec("
LOAD DATA LOCAL INFILE ".$pdo->quote($csvfile)." INTO TABLE `$databasetable`
FIELDS TERMINATED BY ".$pdo->quote($fieldseparator)."
ENCLOSED BY ".$pdo->quote($enclosing)."
LINES TERMINATED BY ".$pdo->quote($lineseparator)."
IGNORE $lineignore LINES"winking smiley;
echo "Un total de $affectedRows a été chargé à partir du fichier csv.\n";
?>
</body>
</html>

Options: Répondre•Citer ce Message


Aller à : Liste des Forums•Liste des messages•Recherche•Connexion
Désolé, seuls les utilisateurs connectés peuvent envoyer des messages dans ce forum.
Cliquer ici pour se connecter

design by jidePowered by Alter Way get firefoxget PHP