Configurer la taille mémoire pour PHP

De PGVWiki
Révision datée du 6 mars 2009 à 21:24 par Elliott1961 (discussion | contributions) (Special Note:)
Sauter à la navigation Sauter à la recherche

Configurer la taille mémoire

Pour configurer la taille mémoire qui sera utilisée par PHP, il faut aller dans Mon Portail --> Administration --> Configurer PhpGedView.

Sur la page qui s'affiche, cliquez ensuite sur l'onglet "options avancées". En bas de la page, il y a une ligne intitulée "Limite de mémoire". Renseignez ici la taille de la mémoire maximale que vous souhaitez accorder pour PHP. Dans la plupart des cas, c'est la plus basse des deux valeurs qui est prise en compte (celle qui est écrite dans le fichier php.ini et celle qui écrite dans le fichier de configuration de PhpGedView).

Ensuite, vous devez cliquer sur Mon Portail --> Administration --> phpinfo pour vérifier si votre hébergeur a autorisé votre modification de taille mémoire allouée à PHP.

Si cette nouvelle limite n'a pas été prise en compte par votre hébergeur, n'en déduisez pas qu'elle n'est pas modifiable. Si vous ne pouvez pas ajuster la taille mémoire à partir du menu de configuration de PhpGedView, contactez votre hébergeur et demandez-lui si vous pouvez accéder au fichierphp.ini, etsi ce n'est pas le cas, demndez lui de modifier lui-même cette taille mémoire.

Les politiques des hébergeurs vis à vis du fichierphp.ini sont très variables. La plupart des hébergeurs interdisent la modification de php.ini, mais peuvent augmenter la taille de mémoire PHP sur demande de leur client.

Certains hébergeurs n'activent pas la possibilité de modification de la taille mémoire PHP ce qui explique pourquoi vous pouvez ne pas voir la taille de mémoire allouée en visualisant phpinfo.

Avec Apache il est possible de modifier les paramètres du fichier php.ini dans un fichier .htaccess. Vous pouvez essayer de créer un fichier vide .htaccess et le placer dans votre répertoire phpgedview. Il vous suffit d'écrire la ligne suivante dans ce fichier: php_value memory_limit 32M (dans cet exemple vous allouez une taille mémoire de 32 Mb à PHP).

Bien que PHP permet le transfert de fichiers, l'installation par défaut n'est pas configurée pour transférer des fichiers de plus de 2 MegaBits. Le paragraphe qui suit vous aidera à configurer votre moteur PHP pour permettre le transfert de fichiers de taille importante.

Autres paramètres utiles de configuration de PHP

Vous pouvez perdre beaucoup de bande passante, si votre page de transfert de fichier n'est rien d'autre qu'un formulaire HTML.

La plupart des navigateurs ignorent tout simplement le paramètre MAX_FILE_SIZE et les limitations de taille ne sont vérifiées qu'une fois que les données ont été envoyées sur le web.

Notre applet préserve votre bande passante en imposant des restrictions du côté du client.

Tous les paramètres de configuration pour votre installation sont contenus dans le fichier php.ini. Parfois ces paramètres peuvent être outrepassés par des directives écrites dans les fichiers .htaccess ou même dans les scripts eux-mêmes. Toutefois vous ne pouvez pas outrepasser les paramètres qui affectent les tailles des fichiers avec les directives qui sont écrites de la façon suivante dans les fichiers .htaccess. Concentrons-nous donc sur le fichier php.ini.

Vous pouvez appeler la fonction phpinfo() pour trouver l'emplacement de votre fichier php.ini, cet appel vous affichera également les valeurs actuelles des paramètres suivants que vous pouvez avoir besoin de modifier:

  • file_uploads (téléchargements de fichiers)
  • upload_max_filesize (taille maximale des fichiers)
  • max_input_time
  • memory_limit (limite mémoire)
  • max_execution_time (temps de calcul maximal)
  • post_max_size (taille maximale d'un message)

The first one is fairly obvious if you set this off, uploading is disabled for your installation. We will cover the rest of the configuration settings in detail below.

upload_max_filesize and post_max_size

Files are usually POSTed to the webserver in a format known as 'multipart/form-data'. The post_max_size sets the upper limit on the amount of data that a script can accept in this manner. Ideally this value should be larger than the value that you set for upload_max_filesize.

It's important to realize that upload_max_filesize is the sum of the sizes of all the files that you are uploading. post_max_size is the upload_max_filesize plus the sum of the lengths of all the other fields in the form plus any mime headers that the encoder might include. Since these fields are typically small you can often approximate the upload max size to the post max size.

According to the PHP documentation you can set a MAX_UPLOAD_LIMIT in your HTML form to suggest a limit to the browser. Our understanding is that browsers totally ignore this directive and the only solution that can impose such a client side restriction is our own Rad Upload Applet

memory_limit

When the PHP engine is handling an incoming POST it needs to keep some of the incoming data in memory. This directive has any effect only if you have used the --enable-memory-limit option at configuration time. Setting too high a value can be very dangerous because if several uploads are being handled concurrently all available memory will be used up and other unrelated scripts that consume a lot of memory might effect the whole server as well.

max_execution_time and max_input_time

These settings define the maximum life time of the script and the time that the script should spend in accepting input. If several mega bytes of data are being transfered max_input_time should be reasonably high. You can override the setting in the ini file for max_input_time by calling the set_time_limit() function in your scripts.

Additonal Comments

Apache Settings

The apache webserver has a LimitRequestBody configuration directive that restricts the size of all POST data regardless of the web scripting language in use. Some RPM installations sets limit request body to 512Kb. You will need to change this to a larger value or remove the entry altogether.

Other Options

If you expect to handle a large number of concurrent file transfers on your website consider using a perl or java server side component. PHP happens to be our favourite web programming language as well but perl and Java are just slightly ahead when it comes to file upload.

Most installations of perl as an apache module can accept in excess of 32 megabytes out of the box. Compare this against the 2MB default for PHP. The downside is that perl coding takes just a bit more effort than PHP but it's worth it. You can try our sample scripts to get started.