Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/07/2006, à 21:58

cb68

comment lancer un script php qui dure longtemps

Bonjour,

J'ai à transférer un fichier csv dans un base mysql. Le problème c'est qu'il a plus de 2 000 000 de lignes et je dois avoir un time out.

Comment faire pour qu'il me traite tout le fichier ? php.ini ?

Ou y a t il un astuce pour le faire en bash ?


Kubuntu 6.06 depuis 2006-07-21
les avancés de linux :
http://cb68.free.fr/cb/linux.php

Hors ligne

#2 Le 26/07/2006, à 22:01

PhilippeP

Re : comment lancer un script php qui dure longtemps

J'ai un doute mais il y a bien un time out soit dans php.ibi soit dans apache.conf ...


Attention, je suis loin d'être un Goubunturou ...
Il m'arrive de me tromper (si si...)
Desktop Kubuntu 12.04 KDE 4.9 SC - Lenovo Ideapad S10 3T Kubuntu 12.04 KDE 4.8 SC

Hors ligne

#3 Le 27/07/2006, à 09:58

Tonio

Re : comment lancer un script php qui dure longtemps

cb68 a écrit :

Ou y a t il un astuce pour le faire en bash ?

sudo apt-get install php5-cli

(ou php-cli)

puis

php script.php

Hors ligne

#4 Le 27/07/2006, à 12:11

lunique

Re : comment lancer un script php qui dure longtemps

Je ne sais pas a quoi ressemble un fichier CSV, mais en passant directement par mysql quitte a modifier le fichier pour que sa fasse des requetes ^ ^
Sinon, un pote m'avait torché ce script perl qui permet de decouper un fichier contenant des commandes Mysql sur une seule ligne (une commande par ligne, sinon, sa peut poser des probleme lors du decoupage) qui les encapsule dans un fichier php, le transfert sur un serveur et fait la mise a jour. C'etait pour pouvoir mettre a jour un site free avec des fichiers de plus de 2M

#!/usr/bin/perl -w

#Programme pour enlever certaines lignes dans le fichier de base de donnée



use strict;
use Net::FTP;		# A installer (?)
use LWP::Simple;		# A installer (?)

my $login	= "";		#Login pour le compte
my $pass	= "";		#Password
my $sql_server	= "";	#Serveur SQL
my $ftp_server	= "";	#serveur FTP
my $dir_server	= "BDD/";		#repertoire de stockage des fichiers php sur le serveur
my $MAX_SIZE = 1000000;			#Taille maximum de chaque fichier (en octet)

#--------------------------------------- Ne pas editer après ce point -------------------------------------
my $php_debut	=	"<?php \$link = mysql_connect('".$sql_server."', '".$login."', '".$pass."');\n";
$php_debut	.=	"mysql_select_db('".$login."', \$link);\n";

my $php_req_deb	=	"mysql_query(\"";
my $php_req_fin	=	"\", \$link);\n";

my $php_fin	=	"\n echo 'OK'; ?>\n";


die("Usage: $0 <INPUT_FILE> <OUTPUT_DIR>\n") if(2!=@ARGV);
my ($input_file, $output_file)	= @ARGV;
my $key;
die($input_file." : Fichier illisible\n") if(! -r $input_file);
die("Impossible d'ouvrir le fichier $input_file") if(! open(IN, $input_file));
print("\n--Copie--\n");

my $total=0;	#total des lignes
my $size = 0;	#taille des fichiers
my $fichier = 0;	#numero des fichiers

open(OUT, ">".$output_file.$fichier.".php");	#ouverture du fichier 0.php
print(OUT $php_debut);					#ecriture de l'en tete php

while(<IN>)	# Tant qu'il y'a des lignes : /!\ On considere 1 ligne = une instruction SQL
{
	#$_ =~ s/'/\'/ ;		#A mettre si il faut echaper le caractere ' en \' ...

	print(OUT $php_req_deb);	#Debut de la requete php
	chomp($_);			#On vire le \n à  la fin de la ligne
	print(OUT $_); 			#On copie la requete
	print(OUT $php_req_fin);	#On ecrit la fin de la requete php

	$size+=  length($_);	# longueur de la chaine qu'on ajoute au fichier (1 char = 1 octet)
	if($size>$MAX_SIZE)	#Si on a depassé la taille MAX
	{
		print(OUT $php_fin);	#fin ddu fichier php
		close(OUT);		#fermeture du fichier
		$fichier++;		#fichier suivant
		open(OUT,">".$output_file.$fichier.".php");	#ouverture du fichier suivant
		print(OUT $php_debut);	#debut du fichier
		$size =0;	# reinitialisation de la taille
	}
	$total++;
}

close(IN);
print(OUT $php_fin);
close(OUT);

print("\n");

print("Nb de lignes traitées:\t".$total);
print("\nNb de fichiers:\t".($fichier+1));
print("\n\n");

my $i=0;
my $name;

#connexion ftp au site, grace à  l'objet Net::FTP
my $ftp = Net::FTP->new($ftp_server, Debug => 0, Passive =>1 ) or die("$!");
$ftp->login($login,$pass);
$ftp->cwd($dir_server);
for($i=0; $i<=$fichier; $i++)
{
	$name = $output_file.$i.".php";
	print("Envoi du fichier $name ...\n");	#envoi de chaque fichier sur le serveur
	$ftp->put($name);
}
$ftp->quit();
print("FTP Términé..\nExecution des scripts, mise à  jour de la BDD...\n");

my $content;	#reponse du server
my $url = "http://".$login.".free.fr/".$dir_server;
for($i=0; $i<=$fichier; $i++)
{
	print("Execution du script $i / $fichier ...");
	$content = get($url.$i.".php");	#fonction LWP:Simple
	if($content eq 'OK')		#Si la réponse est la chaine OK, c'est que tout s'est bien installé
	{
		print(" OK\n");
	}else
	{
		print(" ERREUR\n");	#Sinon il y'a eut une erreur
	}
}

print("\nFIN\n");

Hors ligne

#5 Le 27/07/2006, à 12:41

cb68

Re : comment lancer un script php qui dure longtemps

Pour info mon fichier fait plus de 100 Mega.
Je vais essayer php-cli.
Ou y a t il de la doc ?
donc ce serait un script php qu'on lance dans un bash ? Plus de timeout de apache alors ? Ce serait ça la solution.

Pour répondre au post précédent : un fichier csv c'est un fichier texte ou les champs sont séparé par des virgules ou point virgules
par exeples
champ1,champs2,champs3 etc..
chaque ligne correspond à un enregistrement. C'est assez utile pour transferer des données entre systèmes différents. le xml va le remplacer mais le xml est un fichier plat plus gros encore car pour chaque champs il y a des tags début fin etc..


Kubuntu 6.06 depuis 2006-07-21
les avancés de linux :
http://cb68.free.fr/cb/linux.php

Hors ligne

#6 Le 27/07/2006, à 17:05

Tonio

Re : comment lancer un script php qui dure longtemps

cb68 a écrit :

Je vais essayer php-cli.
Ou y a t il de la doc ?
donc ce serait un script php qu'on lance dans un bash ? Plus de timeout de apache alors ? Ce serait ça la solution.

Voila. Ce te permets d'executer directement tes scripts php en ligne de commande, pas de time out, je m'en sers régulierement pour des taches longues.

Pour la doc, no sé, mais c'est vraiment pas dur à utiliser.

Hors ligne

#7 Le 27/07/2006, à 18:06

cb68

Re : comment lancer un script php qui dure longtemps

j'arrive à me faire un echo mais pas à lire une base

Fatal error: Call to undefined function:  mysql_connect() in /../../07-pfls/import.php on line 8

Avec http ca marche mais pas avec php-cli ? me manque t il quelque chose ?

Dernière modification par cb68 (Le 27/07/2006, à 18:07)


Kubuntu 6.06 depuis 2006-07-21
les avancés de linux :
http://cb68.free.fr/cb/linux.php

Hors ligne

#8 Le 27/07/2006, à 18:53

cb68

Re : comment lancer un script php qui dure longtemps

C'est bon j'ai trouvé : je donne la réponse pour les prochain
il y a un fichier php.ini pour php-cli dans /etc/php4/cli il faut décommenter la ligne extension=mysql.so
Je ne sais pas pourquoi il faille toujours bricoller à des choses comme cela pour faire marcher à l'installation il devrait regarder si il y a mysql et ne pas activer ou mettre cette ligne !
Mais c'est pareil pour le apache !

En tout ca ca marche bien ! Merci
Maintenant on va voir pour voir si ma machine tien la charge pour 2 000 000 d'enregistrement !

http://actocom.blogspot.com/2006/07/tutorial-php-cli-lancer-php-sans.html

Dernière modification par cb68 (Le 30/07/2006, à 09:12)


Kubuntu 6.06 depuis 2006-07-21
les avancés de linux :
http://cb68.free.fr/cb/linux.php

Hors ligne