Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/02/2011, 18h30   #1
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Par défaut faire marcher un script qui dure longtemps

Bonjour,

j'effectue un upload avec la fonction move_uploaded_file, mais si je cherche à uploader un gros fichier (~40 MO), ça échoue car ça dépasse le temps d'exécution pour les scripts (j'ai essayé chez OVH et 1&1). Y a-t-il une solution ?
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 18h57   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Augmente cette durée
http://www.php.net/manual/fr/info.co...execution-time
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 19h45   #3
Membre Expert
 
Inscription : septembre 2010
Messages : 1 239
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 239
Points : 1 559
Points : 1 559
ça peut aussi échouer parce que ça dépasse le post_max_size et dans ce cas tu auras aussi une page blanche (à moins de gérer cette erreur)...
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 09h43   #4
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Citation:
Augmente cette durée
Pour assurer, j'ai mis ça : avant l'upload (alors qu'à mon avis, ça ne dépasse pas la minute) et ça échoue quand même, chez OVH, comme chez 1&1...

Citation:
ça peut aussi échouer parce que ça dépasse le post_max_size et dans ce cas tu auras aussi une page blanche (à moins de gérer cette erreur)...
Code :
1
2
3
4
5
6
7
8
 
$size=$_FILES['uploadfile']['size'];
if($size>67108864)
{
	echo "error file size > 64	MB";
	unlink($_FILES['uploadfile']['tmp_name']);
	exit;
}
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 09h58   #5
Membre chevronné
 
Inscription : juin 2004
Messages : 747
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : juin 2004
Messages : 747
Points : 741
Points : 741
Plusieurs points à gérer en fait :

La durée d'exécution du script (max_execution_time). Dans ce cas là je me permets de la désactiver sur le script :
Ensuite il faut gérer les limites de mémoire autorisée par PHP :
Citation:
post_max_size integer
Définit la taille maximale des données reçues par la méthode POST. Cette option affecte également les fichiers chargés. Pour charger de gros fichiers, cette valeur doit être plus grande que la valeur de upload_max_filesize. Si la limitation de mémoire est activée par votre script de configuration, memory_limit affectera également les fichiers chargés. De façon générale, memory_limit doit être plus grand que post_max_size. Lorsqu'un entier est utilisé, sa valeur est mesurée en octets. Vous pouvez également utiliser la notation sténographique comme décrit dans cette entrée de la FAQ.. Dans le cas où la taille des données reçues par la méthode POST est plus grande que post_max_size, les superglobales $_POST et $_FILES seront vides. Ceci peut être surveillé de différentes façons, e.g. en passant une variable $_GET au script qui traite les données, i.e. <form action="edit.php?processed=1">, et ainsi vérifier si $_GET['processed'] est défini.
Ces trois propriétés sont modifiables pour l'ensembel de ton serveur sur le fichier php.ini, ou alors pour le script courant en utilisant ini_set().
__________________
  • Mon blog PHP : http://blog.alterphp.com
  • "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein
pc.bertineau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 11h25   #6
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Comme je n'ai pas accès au php.ini, j'ai mis ça dans le script qui fait l'upload :
Code :
1
2
3
set_time_limit (0);
ini_set('post_max_size ',77108864);
ini_set('memory_limit ',87108864);
mais ça ne marche toujours pas...
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 11h46   #7
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Je me demande comment tu arrives a ces valeurs.

Il est très probable que ton hebergeur n'autorise pas la modification des durées de scripts.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 11h48   #8
Membre chevronné
 
Inscription : juin 2004
Messages : 747
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : juin 2004
Messages : 747
Points : 741
Points : 741
il reste le "upload_max_file_size" à changer...

  • upload_max_file_size : taille maxi d'un fichier uploadé
  • post_max_size : taille max des données POST (= upload_max_file_size + les reste des données de formulaires (rajoute 2M à upload_max_file_size si tu n'as qu'1 fichier à uploader))
  • memory_limit : mémoire max utilisée par ton script courant, donc données post + traitements effectués... A ne changer que pour ces scripts d'upload bien particuliers, mais laisser une valeur par défaut (php.ini) raisonnable
__________________
  • Mon blog PHP : http://blog.alterphp.com
  • "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein
pc.bertineau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 12h58   #9
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
J'ai donc mis ça :
Code :
1
2
3
4
set_time_limit (0);
ini_set('upload_max_file_size ',67108864);
ini_set('post_max_size ',87108864);
ini_set('memory_limit ',107108864);
(67108864 octets, ça fait 64 Mo) ; mais ça ne marche toujours pas.
Citation:
Il est très probable que ton hebergeur n'autorise pas la modification des durées de scripts.
C'est sûrement ça, vu que quand j'ai posé la question au support de OVH (hier), ils m'ont répondu qu'ils n'avaient de solution à me proposer. Donc, c'est cuit ?
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 13h04   #10
Membre chevronné
 
Avatar de christele_r
 
Femme Christele
Inscription : novembre 2009
Messages : 661
Détails du profil
Informations personnelles :
Nom : Femme Christele
Âge : 39
Localisation : France

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2009
Messages : 661
Points : 690
Points : 690
Bonjour,
Pas besoins de changer tous les paramétres
Ni de se préoccuper de php.ini
J'ais de gros traitements qui tournent 10 minutes.
je ne mets en tête de mon PHP que
Code :
1
2
3
4
 
<?php
ini_set ('max_execution_time', 0);
?>
christele_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 13h18   #11
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Et ben moi, ça ne marche pas
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 13h32   #12
Membre chevronné
 
Avatar de christele_r
 
Femme Christele
Inscription : novembre 2009
Messages : 661
Détails du profil
Informations personnelles :
Nom : Femme Christele
Âge : 39
Localisation : France

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2009
Messages : 661
Points : 690
Points : 690
Pourtant que ce soit en local ou sur un de mes site, ça marche,
man php.ini j'ais (de base )
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
; Maximum execution time of each script, in seconds
; http://php.net/max-execution-time
; Note: This directive is hardcoded to 0 for the CLI SAPI
max_execution_time =30
 
; Maximum amount of time each script may spend parsing request data. It's a good
; idea to limit this time on productions servers in order to eliminate unexpectedly
; long running scripts.
; Note: This directive is hardcoded to -1 for the CLI SAPI
; Default Value: -1 (Unlimited)
; Development Value: 60 (60 seconds)
; Production Value: 60 (60 seconds)
; http://php.net/max-input-time
max_input_time = 60
 
; Maximum input variable nesting level
; http://php.net/max-input-nesting-level
;max_input_nesting_level = 64
 
; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit = 128M
christele_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 14h03   #13
Membre chevronné
 
Inscription : juin 2004
Messages : 747
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : juin 2004
Messages : 747
Points : 741
Points : 741
Citation:
Envoyé par mauriser Voir le message
Bonjour,
Pas besoins de changer tous les paramétres
Ni de se préoccuper de php.ini
J'ais de gros traitements qui tournent 10 minutes.
je ne mets en tête de mon PHP que
Code :
1
2
3
4
 
<?php
ini_set ('max_execution_time', 0);
?>
Pour de l'upload de fichier via formulaire, la limitation potentielle n'est pas que sur le temps d'exécution...
__________________
  • Mon blog PHP : http://blog.alterphp.com
  • "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein
pc.bertineau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 14h04   #14
Membre chevronné
 
Inscription : juin 2004
Messages : 747
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : juin 2004
Messages : 747
Points : 741
Points : 741
Citation:
Envoyé par laurentSc Voir le message
Et ben moi, ça ne marche pas
et tu as quoi comme erreur ?

quelque chose dans ton log apache (error_log) ?
__________________
  • Mon blog PHP : http://blog.alterphp.com
  • "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein
pc.bertineau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 14h13   #15
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Citation:
quelque chose dans ton log apache (error_log) ?
C'est où, ça ?
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 14h39   #16
Membre chevronné
 
Inscription : juin 2004
Messages : 747
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : juin 2004
Messages : 747
Points : 741
Points : 741
sous Linux c'est généralement dans :

/var/log/httpd/error_log
ou
/var/log/apache2/error_log

Avec wamp ou autre je sais pas trop mais c'est accessible via le menu de la barre des tâches
__________________
  • Mon blog PHP : http://blog.alterphp.com
  • "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein
pc.bertineau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 14h46   #17
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Mais je ne suis pas en local, et ça plusieurs années que Wampserver ne marche plus chez moi (pas réussi à le refaire marcher)...
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 14h57   #18
Membre chevronné
 
Inscription : juin 2004
Messages : 747
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : juin 2004
Messages : 747
Points : 741
Points : 741
ça ne marche pas signifie quoi ? (je parle pas de wamp mais de ton upload de fichier)

tu as une page blanche ?

Tu dois régler ton niveau de log au plus haut dans ta phase de dev (à mettre dans ton script frontal, index.php, ou un bootstrap si tu as) :

Code :
1
2
ini_set('display_errors', 'On');
ini_set('error_reporting', 'E_ALL | E_STRICT');
Dans ton code tu peux mettre des echo 'step x' pour savoir où tu t'arrêtes... sinon vu que tu es à distance tu ajoutes une table de log en base, et tu logges dedans pour débugger...
__________________
  • Mon blog PHP : http://blog.alterphp.com
  • "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein
pc.bertineau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2011, 10h52   #19
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Je reviens et ai décoché "résolu", car visiblement c'est aléatoire (et dépend peut-être du réseau informatique sur lequel on se trouve, car hier quand ça a marché, j'étais au boulot, alors qu'aujourd'hui à la maison (je ne travaille pas le vendredi), et ça ne marche plus (fin = internal server error)(40 Mo, par contre ça a marché avec un fichier de 24 Mo...).

Je ne vois plus mon post d'hier, mais je disais que miraculeusement, ça marchait...
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2011, 12h59   #20
Membre Expert
 
Inscription : septembre 2010
Messages : 1 239
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 239
Points : 1 559
Points : 1 559
Regardes les valeurs effectives du serveur avec ini_get

Code :
1
2
3
4
5
echo ini_get('upload_max_file_size ');
echo ini_get('post_max_size ');
echo ini_get('memory_limit ');
echo ini_get('max_execution_time');
echo ini_get('max_input_time');
cela te permettra au passage de voir si tes réglages sont biens pris en compte.

Cela dit en toute logique si tu arrives parfois à charger des fichiers de 40 Mo et pas d'autres fois, il y a de forte change que la limitation vienne d'un paramètre de temps ce qui expliquerait que ça fonctionne ou pas suivant la vitesse du réseau.
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h30.


 
 
 
 
Partenaires

Hébergement Web