Récuperation de variable

Pepyte
Invité n'ayant pas de compte PHPfrance

10 mai 2010, 15:47

Bonjour,
Je suis en train de développer un petit programme tout simple, seulement je n'arrive pas a faire un passage de variable.
J'ai un formulaire html ou j'upload un fichier csv
<form action="http://localhost/Test-codes/test.php" method="POST" ENCTYPE="multipart/form-data">
	<h4><u>Traitement des Fabricants</u></h4>
	Fichier : <INPUT type=file name="fic_man">
    <INPUT type=submit value="Envoyer">
</form>
Je veux le récuperer ici dans 'test.php'
$chemin = $_FILES['fic_man']['tmp_name'];
echo $chemin;
return $chemin;
shell_exec('C:\wamp\bin\php\php5.3.0\php.exe C:\wamp\www\Test-codes\traitement_manufacturer.php');
Et je veux envoyer ce chemin temporaire dans ce fichier 'traitement.php'
$fic = include 'http://localhost/Test-codes/test.php';
$flect = fopen($fic,"r");
Mais le fichier ne doit pas s'ouvrir...
Je réfléchis depuis un moment déjà mais j'ai du mal.
A l'aide svp

ViPHP
ViPHP | 5462 Messages

10 mai 2010, 15:53

oula deja dans ton test.php pourquoi :
tu fais "return $chemin;" quelle est le but ?
fair un shell_exec pour exécuter un php ensuite pareil, pas trop d'intérêt

ensuite dans ton traitement.php:
le include pareil dans quelle but, en plus ton adresse ouvre un page distante, tu peux pas faire un fopen dessus


bref du grand n'importe quoi :wink:
je te conseil d'allé faire un tour par ici, tout est expliquer pour faire de l'upload

pepyte
Invité n'ayant pas de compte PHPfrance

10 mai 2010, 16:14

Pour le return et le include j'ai trouvé ça sur ce site http://php.net/manual/en/function.include.php, pour la commande shell j'ai fait un test, mon code met une dizaine de minutes a exécuter mon code via le navigateur et 10 sec a peine en commande...
Donc j'aimerai savoir comment récupérer dans 'traitement.php' mon URL que je récupère dans 'test.php' c'est plus compréhensible ou toujours nimp?

ViPHP
ViPHP | 5462 Messages

10 mai 2010, 16:27

qu'est ce que tu veux faire exactement si j'ai bien compris

tu upload un fichier -> tu le traites -> tu enregistres le traitement dans un autre ficher ?

pepyte
Invité n'ayant pas de compte PHPfrance

10 mai 2010, 16:29

Je veux uploader le fichier, le traiter et insérer des données dans une db sachant que le fichier est un fichier csv de 200 000 lignes environ 30 Mo a peu près.

ViPHP
ViPHP | 5462 Messages

10 mai 2010, 16:35

oki 2 besoin juste de 2 fichier

ton formulaire (tu le garde pareil, sauf que t'envoie direct dans traitement)
ton traitement :

tu ouvre ton fichier grâce a la variable $_FILES['fic_man']['tmp_name'] et fopen
grace a fgetcsv, tu va pouvoir récupère et traiter chaque ligne, a chaque tour de boucle tu faire un INSERT (on verra apres pour optimiser le tout)

ta un gros traitement a faire ou tu veux juste mettre ton cvs dans ta base (parce que ca en 1 seule commande c'est fait) ?

pepyte
Invité n'ayant pas de compte PHPfrance

10 mai 2010, 16:43

Mon traitement est assez lourd. Il faut que je vérifie dans la base si certaines valeurs y sont, si ce n'est pas le cas je les mets dans un tableau temporaire, et j'ai d'autres petit test pour insert ou update...mais j'ai fait les deux test avec le navigateur et en ligne commande il y a 10 minutes d'écart. C'est pour ça que je veux absolument l'exécuter via la commande shell.

pepyte
Invité n'ayant pas de compte PHPfrance

10 mai 2010, 16:44

A noter que mon programme de traitement fonctionne niquel. Il me manque juste a récupérer dynamiquement le chemin de mon fichier.

ViPHP
ViPHP | 5462 Messages

10 mai 2010, 16:52

A noter que mon programme de traitement fonctionne niquel. Il me manque juste a récupérer dynamiquement le chemin de mon fichier.
avec file_get_contents

pepyte
Invité n'ayant pas de compte PHPfrance

10 mai 2010, 17:32

Je ne vois pas comment le faire fonctionner dans mon cas. Mais dis moi, est-il possible de passer une variable en plus dans shell_exec et de la récupérer après dans le script que j'appelle?

ViPHP
ViPHP | 5462 Messages

10 mai 2010, 17:34

Je ne vois pas comment le faire fonctionner dans mon cas. Mais dis moi, est-il possible de passer une variable en plus dans shell_exec et de la récupérer après dans le script que j'appelle?
oui via les argument, mais oublie shell_exec c'est pas comme ca qu'on procède
montre ton fichier de traitement

pepyte
Invité n'ayant pas de compte PHPfrance

10 mai 2010, 17:57

<?php

//$chemin = $_FILES['fic_man']['tmp_name'];

// ouverture de base de données
$link = mysqli_connect("", "","","");
// requete pour connaitre l'identifiant du dernier manufacturer
$retour2 = mysqli_query($link ,"SELECT MAX(manufacturer_id) FROM jos_vm_manufacturer;")or die (mysqli_error($link));
$id_man_max = mysqli_fetch_array($retour2);

// ouverture du fichier à lire 
$flect = fopen("D:\\Brian\\GLobal_EET\\test.csv","r");
//$fic = include 'http://localhost/Test-codes/test.php';

//$flect = fopen($chemin,"r");

fgetcsv($flect, 1500, ";");
while ($tab = fgetcsv ($flect, 1500, ";"))
	{
		if ($tab[0] != "")
		{
			if (!(in_array($tab[0],$tab_verif)))
			{
				$tab_verif[] = $tab[0];
			}
		}
	}

for ($i=0;$i<count($tab_verif);$i++)
{
	
	// requete de vérification si le manufacturer existe deja 
	$req = "SELECT mf_name FROM jos_vm_manufacturer WHERE mf_name = '".$tab_verif[$i]."';";
	$retour = mysqli_query($link ,$req);
	
	// si il n'existe pas alors on le créé
	if (mysqli_num_rows($retour) < 1)
	{
		$id_man_max[0]++;
		// requete d'insertion des données
		$chaine = "INSERT into `jos_vm_manufacturer` (`manufacturer_id`, `mf_name`, `mf_email`, `mf_desc`, `mf_category_id`) VALUES (" .$id_man_max[0]. ", '" .strtoupper($tab_verif[$i]). "','','',5);";
		$resultat = mysqli_query($link, $chaine);
		
		//echo $tab_verif[$i];
	}
}

// fermeture des fichier ouverts en début de programme
fclose($flect);
?>

ViPHP
ViPHP | 5462 Messages

10 mai 2010, 18:03

c'etait bien
tu décommentes //$chemin = $_FILES['fic_man']['tmp_name'];

et tu fais
$flect = fopen($chemin,"r");

:wink:

pepyte
Invité n'ayant pas de compte PHPfrance

10 mai 2010, 18:08

Lol désolé je ne t'ai pas envoyé le bon truk. En fait quand je l'execute avec l'URL du fichier en dur ça me l'execute rapidement. En revanche lorsque je fait via
"$chemin = $_FILES['fic_man']['tmp_name'];"
"$flect = fopen($chemin,"r");"
ça me fait tout planter, le serveur ram et navigateur encore pire...
De quoi ça vien?

ViPHP
ViPHP | 5462 Messages

10 mai 2010, 18:15

Lol désolé je ne t'ai pas envoyé le bon truk. En fait quand je l'execute avec l'URL du fichier en dur ça me l'execute rapidement. En revanche lorsque je fait via
"$chemin = $_FILES['fic_man']['tmp_name'];"
"$flect = fopen($chemin,"r");"
ça me fait tout planter, le serveur ram et navigateur encore pire...
De quoi ça vien?
ca t'affiche quoi comme erreur ?
mais ducoup ton traiement y'a pas grand chose, tu peu le faire en 1 seule requête SQL :wink:

ta premier requête sert a rien, suffis de mettre un auto incrmente (ce qui est le cas la plus part du temps)
ensuite tu parcours ton CVS, pour creer une liste avec qu'un seul champs
et tu le reparcoure une 2eme fois pour insérer les données, tu fais ta requete pour savoir si l'entrer existe et si elle exite pas tu la creer, mais ca c'est une option de INSERT INTO