2017-10-04 5 views
0

Mon code traite un fichier .txt qui contient environ 50 000 clients, que je dois entrer dans une table en utilisant le mécanisme de batch MySQL "LOAD DATA LOCAL INFILE "(Insert en vrac dans le monde du serveur Sql ou MongoDb)PHP et Ajax: Impossible d'exécuter LOAD DATA LOCAL INFILE (mysql) depuis l'appel Ajax

Mon code fonctionne bien si je le fais depuis le même navigateur, mais si je fais la même chose avec un appel Ajax, il me renvoie" faux ", donc j'imagine qu'une raison de sécurité apache ou PHP m'empêche d'exécuter cette procédure. Est-ce que quelqu'un sait ce que je devrais faire?

Mon code est:

<?php 
header("Access-Control-Allow-Origin: *"); 
header('Access-Control-Allow-Methods: POST, GET, OPTIONS'); 
error_reporting(E_ALL); 
ini_set("display_errors", 1); 

$mysqli = new mysqli('127.0.0.1', 'user_name', 'secret', 'prueba'); 

$file = $_POST["file"]; 

if ($mysqli->connect_errno) { 
    echo "Errno: " . $mysqli->connect_errno . "\n"; 
    echo "Error: " . $mysqli->connect_error . "\n"; 
    exit; 
} 

$sql = "LOAD DATA LOCAL INFILE '/var/www/node/importacion/api/csv_files/{$file}' INTO TABLE cuentas FIELDS TERMINATED BY '|'"; 

try { 
    $resp = $mysqli->query($sql); 
    $mysqli->close(); 
    $respuesta = array(
     "server" => $resp 
    ); 
}catch (Exception $e){ 
    print_r($e->getMessage()); 
} 


echo json_encode($respuesta); 
+0

Avez-vous vérifié "/ var/www/node/importacion/api/csv_files/{$ file}" est dans le groupe de données www-mysql et? –

+0

Comment je fais ça? – Ricky

+0

Qu'est-ce que l'appel Ajax? Vous avez 3 déclarations d'impression. 2 Les codes d'erreur et 2 se terminent par JSON. Besoin de voir votre appel AJAX pour voir comment vous gérez les appels et retourner –

Répondre

1

Pas encore de réponse, mais le débogage. AJAX attend une chaîne JSON, et avec des erreurs, vous fournissez un TEXTE simple qui pourrait gâcher les choses et vous manquez les messages d'erreur.

Mettez à jour votre php:

$respuesta = ''; 
if ($mysqli->connect_errno) { 
    $respuesta .= "Errno: " . $mysqli->connect_errno . "\n"; 
    $respuesta .= "Error: " . $mysqli->connect_error . "\n"; 
    // exit; 
} 

... 
catch (Exception $e){ 
    $respuesta .= 'Exception Error: '.print_r($e->getMessage(),1); 
} 

Mettez à jour votre AJAX:

$.ajax(
{ 
    data : "file="+archivo, 
    type : "post", 
    dataType: "json", 
    url : "http://localhost/procesarBulk.php", 
    success : function(data){ 
    if(data.server==false){ 
     alert("Hemos tenido problemas para procesar el lote : "+ 
      JSON.stringify(data) 
     ); 
    }else{ 
     alert("Bien, finalizamos todo"); 
    } 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
    alert(JSON.stringify({ 
     title: "Connection Error", 
     typeAnimated: true, 
     content: "There was a connection problem with "+this.url+'=> ('+textStatus+'):'+errorThrown+". Please try again"     
    })); 

}); 

Voir quelle information supplémentaire que vous obtenez.

AUSSI Vérifiez votre journal de serveur Web pour les erreurs

+0

Merci pour votre réponse, mon ami, je trouve la raison de mon erreur. Le problème est que le fichier quand je veux lire ça ne marche toujours pas fini d'être créé, car il ne peut que la raison de poursuivre le processus. Je l'ai résolu en plaçant un sommeil (5), bien qu'il soit une solution temporaire, je vois que cela pourrait-il est la raison. Merci beaucoup. – Ricky