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 ?
Version imprimable
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 ?
Augmente cette durée
http://www.php.net/manual/fr/info.co...execution-time
ç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)...
Pour assurer, j'ai mis ça :Citation:
Augmente cette durée
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...Code:set_time_limit (240);
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; }
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 :Code:set_time_limit (0);
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().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.
Comme je n'ai pas accès au php.ini, j'ai mis ça dans le script qui fait l'upload :mais ça ne marche toujours pas...Code:
1
2
3 set_time_limit (0); ini_set('post_max_size ',77108864); ini_set('memory_limit ',87108864);
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.
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
J'ai donc mis ça :(67108864 octets, ça fait 64 Mo) ; mais ça ne marche toujours pas.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);
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 ?Citation:
Il est très probable que ton hebergeur n'autorise pas la modification des durées de scripts.
Bonjour,
Pas besoins de changer tous les paramétres 8O
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); ?>
Et ben moi, ça ne marche pas :cry:
Pourtant que ce soit en local ou sur un de mes site, ça marche,
man php.ini j'ais (de base 8O )
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
C'est où, ça ?Citation:
quelque chose dans ton log apache (error_log) ?
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
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)...
ç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) :
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...Code:
1
2 ini_set('display_errors', 'On'); ini_set('error_reporting', 'E_ALL | E_STRICT');
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 :cry: (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...
Regardes les valeurs effectives du serveur avec ini_get
cela te permettra au passage de voir si tes réglages sont biens pris en compte.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 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.