Vous n'êtes pas identifié(e).
Pages :: 1
Bonjour
J'ai un soucis pour lequel je me tire les cheveux ! j'essaye d'uploader puis importer sous sql un fichier csv mais mon script me répond que le fichier n'existe pas, voici mon code :
//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
$erreur = 'Vous devez uploader un fichier de type csv...';
}
if($taille>$taille_maxi)
{
$erreur = 'Le fichier est trop volumineux pour être traité en une seule fois (2048Mo maximum) ...';
}
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
//On formate le nom du fichier ici...
$fichier = strtr($fichier,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
/* On ouvre le fichier à importer en lecture seulement */
if (file_exists($fichier))
$fp = fopen('$fichier', 'r');
else
{ /* le fichier n'existe pas */
echo "Fichier introuvable !<br>Importation stoppée.";
exit();
}
while (!feof($fp)) /* Et Hop on importe */
{ /* Tant qu'on n'atteint pas la fin du fichier */
$ligne = fgets($fp,4096); /* On lit une ligne */
/* On récupére les champs séparés par ; dans liste*/
$liste = explode( ";",$ligne);
/* On assigne les variables */
$cat = $liste[0];
$pn = $liste[1];
$marque = $liste[2];
$modele = $liste[3];
$processeur = $liste[4];
$config_memoire = $liste[5];
$config_disquedur = $liste[6];
$config_lecteur = $liste[7];
$carte_graphique = $liste[8];
$taille_ecran = $liste[9];
$systeme = $liste[10];
$pvuht = $liste[11];
$date_ajout = $liste[12];
/* Ajouter un nouvel enregistrement dans la table */
$query = "INSERT IGNORE INTO z_partnumber_config (id,cat,pn,marque,modele,processeur,config_memoire,config_disquedur,config_lecteur,carte_graphique,taille_ecran,systeme,pvuht,date_ajout)
VALUES('','$cat','$pn','$marque','$modele','$processeur','$config_memoire','$config_disquedur','$config_lecteur','$carte_graphique','$taille_ecran','$systeme','$pvuht',NOW())";
$result= mysql_query($query);
if(mysql_error())
{ /* Erreur dans la base de donnees */
echo 'Erreur dans la base de données : '.mysql_error().'';
echo '<br>Importation stoppée';
exit();
}
Est ce que quelqu'un peut m'éclairer sur la question, pourquoi le fichier est inexistant alors que je l'importe bien (j'ai essayé de changer le nom du fichier, le chmod des dossiers du script mais rien n'y fait) j'ai pourtant déjà utilisez ce script avant mais la il ne fonctionne plus :'(
Merci à vous, bonne journée
Hors ligne
Salut,
Ton fopen est en paramètre " R " alors qu'il devrait être en " x "+ --> documentation
P.S : pas forcement X, mais la lettre souhaitée avec un "+" derrière pour permettre l'écriture
MERCI de lire le mode d'emploi avant de poster !!
Hors ligne
Bonjour,
Première phrase des mesures de régulation...
Un nouveau message ne disant pas bonjour, ou insultant, dont le titre est tout en majuscules, pourra être supprimé sans justification (raisons non limitatives).
Premier et dernier avertissement.
@+
la v2, c'est tabou, on en viendra tous a bout
Hors ligne
Bonjour,
Première phrase des mesures de régulation...
Un nouveau message ne disant pas bonjour, ou insultant, dont le titre est tout en majuscules, pourra être supprimé sans justification (raisons non limitatives).
Premier et dernier avertissement.
@+
Désolé je ne peux pas le modifier. [NdM] Titre modifié
Salut,
Ton fopen est en paramètre " R " alors qu'il devrait être en " x "+ --> documentation
Cela ne fonctionne pas, le paramètre R est pour ouvrir le fichier en lecture, même avec le X cela ne fonctionne pas désolé, avez vous une autre idée ?
Cordialement
Hors ligne
as-tu lu la documentation ???
Si le fichier existe, et que tu veux écrire dedans, alors c'est R+ (et pas R)
Si le fichier existe, et que tu veux le vider avant d'écrire dedans, alors c'est W+
VAS LIRE LA DOC !!!
MERCI de lire le mode d'emploi avant de poster !!
Hors ligne
as-tu lu la documentation ???
Si le fichier existe, et que tu veux écrire dedans, alors c'est R+ (et pas R)
Si le fichier existe, et que tu veux le vider avant d'écrire dedans, alors c'est W+
VAS LIRE LA DOC !!!
Ma demande n'a rien avoir avec écrire dans un fichier mais importer un fichier dans le but de l'insérer dans une BDD (donc uniquement le lire). Le problème est que lorsque j'importe via mon formulaire le fichier le script répond que le fichier est introuvable.
Hors ligne
ok , reprenons :
Contrairement à ce que tu crois, ta demande a TOUT a voir avec écrire dans un fichier.
Uploader un fichier, c'est écrire dans un fichier distant les infos (textes, images, etc) d'un fichier local donc il faut bien que tu écrives, non ??
Ce que tu ne comprends pas , c'est que ce n'est pas le fichier source qui est introuvable, mais le fichier destination...
Il semble que tu ne connaisses pas le principe de l'upload alors petit résumé :
- fichier A en local
- fichier B en distant
le script d'upload ouvre A, lit les données, et les écrit dans B (via un fopen R+ ou W+) (d'où la nécessité du chmod)
(A & B ont donc les mêmes contenus, mais ce n'est PAS DU TOUT le même fichier, même s'ils ont le même nom)
L'étape suivante, c'est lire B pour l'insertion dans la bdd ! tu as déjà des topics à ce sujet
Selon ton script, il semblerait que tu ne veuilles pas passer par l'étape upload... mais plutôt lire le contenu du fichier local (A), et insérer directement les valeurs dans la base, sans passer par un fichier distant... la problématique n'est pas la même, alors précise la méthode que tu veux appliquer
MERCI de lire le mode d'emploi avant de poster !!
Hors ligne
Bonjour
Je ne veux pas uploader, je veux lire et insérer le fichier sans le déposer sur le FTP, est ce que cela te paraît plus clair ? Mon idée c'est de ne pas télécharger le fichier sur le serveur mais juste de le lire depuis le poste client est de l'enregistrer dans la base directement.
Donc si j'ai bien compris ton explication, j'ai besoin de lire le contenu du fichier local (A) et insérer directement les valeurs dans la base sans passé par le fameux fichier distant.
Merci beaucoup pour tes explications.
Antho
Hors ligne
Alnoss, le truc pour bien comprendre ce genre de problème, c'est pas dans la doc de fopen que notre ami anthotill les trouveras, c'est dans la doc de la gestion des droits d'accès des groupes utilisateurs sous UNIX. Ca relève donc de la formation de base d'un administrateur système UNIX.
Anthotill, malgré tout ce que tu as pu dire, relis bien ce qu'à dit Alnoss, car je t'assure c'est toi qui n'as toujours pas compris^^
Allez, a+
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Bonjour,
Désolé Alnoss et Jc, mais sur ce coup là, vous êtes bien a coté du problème
Mais le pense que Anthotill aussi un peu
Donc en résumé, le but c'est d'importer un csv dans une bdd. Donc en effet, on écris dans la bdd, pas dans un fichier.
Anthotill, tu dois comprendre que pour faire cet import, le fichier doit être sur le serveur qui execute le php.
Cela veut dire que soit tu as php sur ta propre machine, et dans ce cas la partie qui utilise les controles d'upload d'un fichier sont inutiles, il faut juste faire une lecture du fichier, soit tu fait un upload du fichier sur le serveur qui execute php (via un formulaire je suppose), et dans ce cas, il faut que tu finalise l'upload avant de pouvoir le lire (sur un serveur normalement configuré, tu ne peux pas lire le fichier temporaire directement).
Une fois le fichier uploadé correctement, tu pourra le lire, l'importer en bdd comme ton script veut le faire, et le supprimer si tu veux.
Alnoss, je ne sais pas comment tu fais un upload, mais si c'est a coup de fopen, heuuuu, je vais te demander de relire la doc php aussi
Et pour la doc des droits d'accès des groupes, heuuu, wai, on peut faire un upload sans la lire
@+
la v2, c'est tabou, on en viendra tous a bout
Hors ligne
Oui on peut le faire sans la lire suis d'accord, mais pour comprendre comment Unix gère les droits d'accès utilisateurs et ce qu'implique réellement au niveau du serveur un droit d'accès en lecture,écriture sur les fichiers y a pas mieux. Car sous Unix je le rappele toute la gestion du système et sa sécurité passe par les droits d'accès aux fichiers qu'il gère.
De plus uploader un fichier sur un serveur unix, signifie lire en local et écrire à distance... Car comme tu l'as si bien dit, importer en bdd passe d'abord par un upload finalisé^^.
Dernière modification par Jc (01-05-2010 12:10:49)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Oui on peut le faire sans la lire suis d'accord, mais pour comprendre comment Unix gère les droits d'accès utilisateurs et ce qu'implique réellement au niveau du serveur un droit d'accès en lecture,écriture sur les fichiers y a pas mieux. Car sous Unix je le rappele toute la gestion du système et sa sécurité passe par les droits d'accès aux fichiers qu'il gère.
De plus uploader un fichier sur un serveur unix, signifie lire en local et écrire à distance... Car comme tu l'as si bien dit, importer en bdd passe d'abord par un upload finalisé^^.
Unix, unix, unix. Et si je veux un serveur sous windows ?
Edit : Mais meuuuh quoi...
Dernière modification par xTG (01-05-2010 13:37:31)
Hors ligne
bon ben alors je sors aussi [ben ouais quoi, il fait beau, chaud et la moto attends que ça ^^]
P.S : non, mes upload sont pas à coup de fopen ^^. C'est justement pour cela que je demandais ce que notre ami souhaitait faire
MERCI de lire le mode d'emploi avant de poster !!
Hors ligne
Bonjour,
Désolé Alnoss et Jc, mais sur ce coup là, vous êtes bien a coté du problème
Mais le pense que Anthotill aussi un peu
Donc en résumé, le but c'est d'importer un csv dans une bdd. Donc en effet, on écris dans la bdd, pas dans un fichier.
Anthotill, tu dois comprendre que pour faire cet import, le fichier doit être sur le serveur qui execute le php.
Cela veut dire que soit tu as php sur ta propre machine, et dans ce cas la partie qui utilise les controles d'upload d'un fichier sont inutiles, il faut juste faire une lecture du fichier, soit tu fait un upload du fichier sur le serveur qui execute php (via un formulaire je suppose), et dans ce cas, il faut que tu finalise l'upload avant de pouvoir le lire (sur un serveur normalement configuré, tu ne peux pas lire le fichier temporaire directement).
Une fois le fichier uploadé correctement, tu pourra le lire, l'importer en bdd comme ton script veut le faire, et le supprimer si tu veux.
Alnoss, je ne sais pas comment tu fais un upload, mais si c'est a coup de fopen, heuuuu, je vais te demander de relire la doc php aussi
Et pour la doc des droits d'accès des groupes, heuuu, wai, on peut faire un upload sans la lire
@+
Merci beaucoup c'est toi qui a compris.
Je pensais que l'on pouvait le faire sans uploader le fichier, je vais donc uploader le fichier avant de le traiter.
Merci
Hors ligne
Bonjour
Voila, en ajoutant
Cela fonctionne (avec r pour lire le fichier )
Merci à tous
Dernière modification par Anthotill (03-05-2010 07:45:29)
Hors ligne
Si je peux me permettre une remarque :
Cette façon est efficace et simple, mais possède un énorme désavantage : elle est dépendante de ta bande passante, et tu risques à terme le timeout, ou que la totalité des infos ne passent pas (baisse de débit, déconnexion, etc...). Dans ce cas, si tu as un site qui se sert de la base -> risque de plantage, ou lenteur de sa Mise à jour d'où indisponibilité.
A contrario, si ton fichier est déjà sur le serveur distant (via un upload qui même s'il est long, ne pénalisera pas le site qui se sert de la base vu que la mise à jour ne se fera que lorsque le fichier sera totalement distant), c'est plus rapide (lors de l'insert) et tu es sûr qu'il soit complet (via une mini verif).
Cela peut, dans certains cas, être utile de le savoir Chacun pourra choisir selon son usage.
MERCI de lire le mode d'emploi avant de poster !!
Hors ligne
Pages :: 1