If you have upload issues, read this page - entirely! The Coppermine dev team considers this page to be the most important page of the entire documentation, simply because there are many different things that can go wrong when uploading. This is caused by different webserver setups mostly.
For those of you who skim over statements written in red letters, we will repeat to try to get your attention:
Yes, we are writing about something that could easily apply to you
If you are experiencing issues with coppermine's upload process, temporarily change your coppermine settings as suggested below to get more detailed error messages. This applies to all upload methods, not only HTTP uploads.
Even if you have issues with batch-adding pics (or any other uploading method), you should perform the steps mentioned below that check http uploads, as http uploads are the most basic upload method that needs to work under all circumstances.
If you're going to request support on upload issues on the coppermine support board, you're requested to perform the steps mentioned below in detail.
You should try using http uploads, even if you experienced troubles using another upload method. You should get a more detailed error message if something is wrong that tells you what exactly goes wrong with your uploads. If the error message doesn't mean anything to you, search the support board for the error message you get.
If you don't get an error message at all, you probably have overloaded the server with previous attempts - please review the server-sided limitations that might apply for you.
When people have issues with uploading and decide to post their question on the Coppermine support board, they usually are told to read this upload troubleshooting section. Many of them fail to do so properly, which results in frustration both for users as well as supporters.
To make this absolutely clear: the above mentioned steps are absolutely mandatory, no matter what skill level you have, no matter what upload method you have troubles with. Failing to do exactly as suggested will result in your request for help being ignored. Yes, this applies to you. We mean it!
Error message: failed to create stream: Operation not permitted
Detailed error message
Impossible to move somepic.jpg to albums/userpics/
Warning: move_uploaded_file(/tmp/phpezCYKr)
[function.move-uploaded-file]: failed to create stream: Operation not permitted
The error message above of course will differ slightly from one setup to the other. The dynamic sections of the error message (that may differ) are highlighted in blue in the example, opposed to the static (unchangeable) parts of the error message that is printed in black.
Possible cause
PHP's temporary folder is missing or doesn't have the needed permissions.
Suggested fix
You should contact the admin of your webhost because you usually can't change the location of the website's temporary directory for file uploads, yourself (it is part of PHP configuration) .
If the
open_basedir restriction is in effect on your site then the temp directory for file uploads should be one that you can access.
Impossible to move X to Y
Detailed error message
Impossible to move somepic.jpg to albums/userpics/XXXXX/
The error message above of course will differ slightly from one setup to the other. The dynamic sections of the error message (that may differ) are highlighted in blue in the example, opposed to the static (unchangeable) parts of the error message that is printed in black.
Possible cause
The coppermine script doesn't have permissions on the filesystem of the server to create the thumbnail or intermediate image within the specified folder
Suggested fix
Apply permissions on the albums folder and everything within it as suggested in the section
Setting permissions. This error message is the most frequent one, as many users tend to skip reading the permissions section. At least when getting this error message, you should read it thoroughly.
Error message: failed to open dir: No such file or directory
Detailed error message
Warning: opendir(./albums/edit): failed to open dir: No such file or directory
Possible cause
- 'edit'-folder in your albums folder is missing
- 'edit'-folder in your albums folder doesn't have rwx-permissions
- Improper upgrade from a previous version of Coppermine
Suggested fix
- Make sure you have a folder named 'edit' in your albums folder.
- Make sure the edit directory has been CHMODed to 777/755 (or rather: that you have applied permissions as suggested in Setting permissions)
- Make sure you have completely upgraded to Coppermine 1.5.x
Error message: Sorry there is no album where you are allowed to upload files
Detailed error message
Sorry there is no album where you are allowed to upload files
Possible cause
- You (as admin) haven't created any albums yet.
- You (as non-admin user) don't have the permission to upload to public albums
- You (as non-admin user) haven't created at least one album in your personal gallery
Suggested fix
This error message is a
soft error, i.e. it's something that is related to your Coppermine setup and means that you haven't done something that you should have done.
- If you get this message when logged in as the admin of your gallery, then you need to create at least one album where files can be uploaded
- If you get this message when logged in as a non-admin, then you need to make sure you understand the permissions concept behind Coppermine: on the groups control panel the admin determines whether users can create personal galleries (i.e. create albums inside their user gallery) or if they are allowed to upload into admin-created public albums. If the user is allowed to create personal galleries and gets this message, he must create at least one album first by clicking on "Create / Order my albums". If the user is only allowed to upload to public albums (which need to be created by the admin in advance) and gets the above mentioned error message, then the admin needs to specify at least one public album where visitors are allowed to upload, using the album properties screen.
- If you get this message when not logged in at all (i.e. being a guest), then you need to review the Coppermine permissions concept as well: if you want to allow guests to upload (not recommended because of potential abuse), you need to specify the general upload ability on the groups control panel (for the guest/anonymous group) and you will also need to modify the album properties screen of at least one album and allow uploads for visitors in that album.
Error message: Allowed memory size of X bytes exhausted
Detailed error message
Fatal error: Allowed memory size of XXXXXXX bytes exhausted at (null):0 (tried to allocate XXXX bytes) in /var/www/html/include/picmgmt.inc.php
The error message above of course will differ slightly from one setup to the other. The dynamic sections of the error message (that may differ) are highlighted in blue in the example, opposed to the static (unchangeable) parts of the error message that is printed in black.
Possible cause
This error occurs when using GD and attempting to upload a high resoltuion image. It's not the size of the file that matters here; it's the number of pixels that determine memory use in GD. This is not a
soft error triggered by Coppermine, but a
hard error from PHP that shines through Coppermine from PHP.
Suggested fixes
There is (at least in theory) no limit
in Coppermine to the file size or dimensions that the script can handle. However, there is at least one limit existing on the webserver: resizing images (to create intermediate images and/or thumbnails) consumes memory and burns CPU cylces. To prevent the server from crashing, the server admin has to restrict the amount of memory that a PHP script is allowed to consume. The error message mentioned above means that the limit imposed by the server admin has been reached, i.e. the image that the script tried to process consumed to much memory.
- Alternative 1 (ideal):
Increase the memory limit allocation in php.ini as suggested in Memory usage during resizing.
If you cannot change php.ini, you should read alternatives 2 and 3.
- Alternative 2 (sensible):
Resize your images before uploading if you do not require high resolution images. This saves upload bandwidth and time for you.
- Alternative 3 (workaround):
You may download one of many free programs that resize images. Then resize the images to a smaller resolution (like 800 x 600) by the batch into a different folder while maintaining the same filenames.
Upload the resized images to Coppermine. Then use your FTP client to overwrite the images with the higher resolution images.
Error message: Exec() has been disabled
Detailed error message
Exec() has been disabled
Possible cause
php.ini allows the server administrator to disable certain functions. Usually this is the case if your server is running in safe_mode. This is not a
soft error triggered by Coppermine, but a
hard error from PHP that shines through Coppermine from PHP.
Suggested fix
If the server administrator has disabled exec() you will not be able to use ImageMagick.
You may try to replace exec() with passthru() in the entire core code of coppermine (not recommended) if it has not been disabled as well. Otherwise, you can't use ImageMagick and must use GD. Change
Method for resizing images in config accordingly.
Error message: Not a GD extension
Detailed error message
Not a GD extension
Possible cause
The file(s) you tried to upload can not be handled using the GD ImageLibrary
Suggested fix
The GD library can only handle jpeg, png and gif files, while the ImageMagick library supports additionally bmp, psd and some other (less common) file types. However, those files are not suitable for use on the internet. Details can be found in the
Allowed image types section in the config page of the docs.
Error message: Error executing ImageMagick - Return value 127
Detailed error message
The file 'albums/userpics/10001/somepic.jpg' can't be inserted in the album. Error executing ImageMagick - Return value 127
The error message above of course will differ slightly from one setup to the other. The dynamic sections of the error message (that may differ) are highlighted in blue in the example, opposed to the static (unchangeable) parts of the error message that is printed in black.
Possible cause
You haven't specified the correct
path to ImageMagick, or you don't have ImageMagic at all. The first sentence of the error message is a
soft error triggered by Coppermine, but the second sentence is a
hard error from PHP that shines through Coppermine from PHP, with the important bit being the last sentence
Return value 127.
Suggested fix
If you're sure that you actually have ImageMagick available on your server, review
path to ImageMagick. If the path appears to be correct, make sure that the coppermine script has permissions to read and execute the convert executable within the ImageMagick folder. If you're not sure, switch
Method for resizing images from "ImageMagick" to "GD2", then try uploading again.
Error message: PHP running on your server does not support the GD image library
Detailed error message
PHP running on your server does not support the GD image library, check with your webhost if ImageMagick is installed.
Possible cause
Your webserver doesn't come with support for the GD image library.
Suggested fix
Make sure that you fullfill the
minimum requirements to run Coppermine. If GD is not available on your server, you could use ImageMagick. Ask your webhost if ImageMagick is available on your webserver.
Error message: No file was uploaded !
Detailed error message
No file was uploaded ! If you have really selected a file to upload, check that the server allows file uploads...
Possible cause
File uploads are disabled in php.ini or there is a permissions issue or there is an issue with your webserver's upload mechansim.
Suggested fix
There may be several reasons for this error message. The file you tried to upload did not "reach" the folder on the webserver where it is supposed to go. Check if there's a problem with HTTP uploads on your server - this feature may have been disabled or improperly configured. In
phpinfo(), check that "file_uploads" is ON, "upload_max_filesize" is something like 2M and "upload_tmp_dir" is a valid directory! Make sure to review your
file/folder permissions as well.
If the server isn't yours to administer, you may have to ask your webhost for support. Here is what you should check:
- test file "too large"
If you encounter this error message in the first place, make sure that the file you test uploading with is not to large in terms of file size and dimensions. Test with a known-good, small file first. You are welcome to download one from the coppermine demo gallery and use that for testing purposes.
- "file_uploads" enabled
Go to your phpinfo page (available as admin menu item), search it for file_uploads and make sure that it is set to "on". If you are on shared webhosting, only your webhost can enable this for you.
- "upload_tmp_dir" needs to be set
On the phpinfo page, make sure that upload_tmp_dir needs to be set. If you are on shared webhosting, only your webhost can set this up for you. The script (i.e. the user the webserver runs under) needs to be allowed to write to that file.
Error message: Destination directory X is not writable by the script
Detailed error message
Destination directory albums/userpics/XXXXX/ is not writable by the script
The error message above of course will differ slightly from one setup to the other. The dynamic sections of the error message (that may differ) are highlighted in blue in the example, opposed to the static (unchangeable) parts of the error message that is printed in black.
Possible cause
Permissions on file system level are not correct. In fact that's what the
rant on permissions at the top of this page is about...
Suggested fix
Make sure to review your
file/folder permissions. If that doesn't help, ask your webhost for support.
All upload methods, but particularly HTTP uploads are limited by the restrictions placed upon them in PHP's configuration.
The PHP configuration file php.ini
Please understand that the settings in php.ini can only be changed if the server is yours to administer (i.e. if you run a webserver of your own). If you are webhosted, you will have to ask your webhost if he's willing to change those settings for you, which usually equals allowing you to use more resources on the server. Usually, your webhost will not accept this for sheer economical reasons: granting you to use more resources will mean that he can host less presences on one shared server.
Please don't ask questions on the coppermine support board what the actual settings are supposed to be or how you can change them - as suggested above: you usually won't be able to change them at all when you're webhosted.
If you're actually
self-hosted (which is something we can not recommend at all as running and maintaining a webserver requires constant monitoring and maintenance as well as a huge amount of experience and a high skill level), don't bother to ask trivial questions like "Where can I find my php.ini file" - if you don't know the answer to this question, you fall into the category "self-hosting not recommended due to lack of experience" and will be ignored on the coppermine support board.
Things to check
If you are webhosted, you will need to consult with your webhost regarding the following settings. You can review (although not change) those settings on your phpinfo page.
-
max_input_time
60 seconds is the default time limit for uploading files.
This time limit includes the time it takes for the files to upload, so if you exceed this limit, the file will not even parse, and the browser will not get a response. You can workaround this by trying to upload smaller or fewer files, or you can try uploading over broadband. The best solution, of course, is to increase the time limit to something more in line with your needs.
-
upload_max_filesize
2MB is the default limit for individual files.
-
post_max_size
8MB is the default limit for post requests.
-
memory_limit
8MB is the default size. Read up Memory usage during resizing for instructions how to change this setting and circumvent the error messages related to the memory limit being reached.
-
LimitRequestBody
512KB default limit. (mainly an issue on Redhat/Apache systems. Found in /etc/http/conf.d)
In general, upload_max_filesize < post_max_size < memory_limit in order for uploads to function properly. Coppermine may warn you if a file exceeds upload_max_filesize, but it cannot warn you if the total size of all the files exceeds the post limit or the memory limit.
-
file_uploads
This determines whether or not PHP will allow file uploads. It must be set to "On".
-
upload_tmp_dir
This specifies the temporary directory where PHP stores uploaded files.
The most common issue caused by this setting is an open_basedir warning. In this situation, your server administrator has restricted the files that PHP can work with to a certain directory. If he does not create and specify a temporary directory within the open_basedir restriction, PHP will attempt to use the OS temporary directory, and it will be rebuffed by the open_basedir restriction.
Upload mechanisms/methods
Some notes about the different types of upload mechanisms available since cpg1.3.x (or better):
Multiple HTTP uploads are designed to handle a small number of files. Therefore, they are not well suited for the uploading of large numbers of files unless you are running your own webserver or have control over the php.ini configuration.
If you are looking to upload more than 15 or 20 files at a time, you should consider the batch add process or the XP Publisher utility. Each has its own drawbacks and advantages.
The batch add process is fast, but it creates quite a load on the server and, as a result, you may experience timeouts causing your uploads to terminate prematurely. XP Publisher, on the other hand, is considerably slower, but it limits the load on the server. It also circumvents many of the pitfalls caused by limitations set in the php.ini configuration by uploading each file in the batch being uploaded as an individual post request.
Other alternative upload mechanisms (like Client-based agents as JUpload or similar) may be provided as third-party contributions - you're encouraged to look at them as well, but please keep in mind that the coppermine developers can only provide limited support for third-party contributions.
Keep in mind though that before trying any alternative upload mechanism, you have to make sure that the initial upload method "http uploads" works as expected - if it doesn't, you have to fix that first; it doesn't make sense to try alternative upload mechanisms if the core upload mechanism doesn't work.
Memory usage during resizing
There is (at least in theory) no limit in Coppermine to the file size or dimensions that the script can handle. However, there is at least one limit existing on the webserver: resizing images (to create intermediate images and/or thumbnails) consumes memory and burns CPU cylces.
If the resizing process is eating up too much memory, you usually get the error message Fatal error: Allowed memory size of XXXXXXX bytes exhausted at (null):0 (tried to allocate XXXX bytes) in /var/www/html/include/picmgmt.inc.php or similar.
To prevent the server from crashing, the server admin has to restrict the amount of memory that a PHP script is allowed to consume. This is done using the parameter memory_limit.
You might be tempted to believe that the memory usage equals the file size an image consumes on file system level, but that's not the case: the common file format JPEG is compressed, so if the server loads a JPEG file into memory, it consumes much more RAM than it consumed on file system level.
To calculate the amount of memory an image uses, you simply multiply the pixel width and height, and then you multiply the result by the number of base colors (RGB - 3, CMYK - 4). Finally, you divide by 1,048,576 (220) to get the memory usage in MB.
Here are some common image resolutions and their memory use in GD (assuming RGB):
Screen resolution name |
Width |
|
Height |
Memory usage |
Aspect ratio |
QVGA |
320 |
x |
240 |
0.2 MB |
4 : 3 |
VGA |
640 |
x |
480 |
0.9 MB |
4 : 3 |
SVGA |
800 |
x |
600 |
1.4 MB |
4 : 3 |
XGA |
1024 |
x |
768 |
2.3 MB |
4 : 3 |
WXGA |
1280 |
x |
800 |
2.9 MB |
16 : 10 |
SXGA |
1280 |
x |
1024 |
3.8 MB |
4 : 3 |
SXGA+ |
1400 |
x |
1050 |
4.2 MB |
4 : 3 |
UXGA |
1600 |
x |
1200 |
5.5 MB |
4 : 3 |
WUXGA |
1920 |
x |
1200 |
6.5 MB |
16 : 10 |
QXGA |
2048 |
x |
1536 |
9.0 MB |
4 : 3 |
WQXGA |
2560 |
x |
1600 |
11.7 MB |
16 : 10 |
QUXGA |
3200 |
x |
2400 |
22.0 MB |
4 : 3 |
QXGA |
4096 |
x |
3072 |
36.0 MB |
4 : 3 |
HUXGA |
6400 |
x |
4800 |
87.9 MB |
4 : 3 |
UHDTV |
7680 |
x |
4320 |
94.9 MB |
16 : 9 |
WHUXGA |
7680 |
x |
4800 |
105.5 MB |
16 : 10 |
Remember when using the above figures that the amount of memory being used by the rest of Coppermine must be taken into account, too.
As you can see, the memory consumption of images produced by modern digital cameras can easily be too much for your webserver to cope with, even when using single file uploads (let alone the consumption when processing several images using batch-add), so it's recommended to resize your images on your client before uploading them: if the server simply isn't capable to process the images uploaded, there's little point in blaming the script (i.e. Coppermine) or asking for support on the Coppermine support board: the Coppermine devs can not find a cure for the technology used on webservers. Use the webserver for what it has been designed to be used for; perform resources-intensive calculations (like resizing images with a high resolution) on your client.
To increase the memory limit allocation in php.ini, you must be the server's administrator. Also, .htaccess files cannot change this configuration setting, and it cannot be changed using ini_set(). This being said, most coppermine users who are on shared webhosting will not be able to change this. If you actually are the server admin, here's how to increase the memory limit:
First, you locate the following block in php.ini (if you actually are the server admin):
;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;
max_execution_time = 30 ; Maximum execution time of each script, in seconds
max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
memory_limit = 8M ; Maximum amount of memory a script may consume (8MB)
Now you increase the memory limit to fit your needs. 9 to 16 MB should handle most requirements.
If you are unable to change php.ini settings yourself, you can always ask your server administrator to change this for you. However, most administrators (especially on shared webhosting) will be reluctant to do so, as this setting will affect everyone on a shared server. A higher memory limit requires reducing the number of people who can be hosted on the same server in order to maintain server stability. This reduces profitability, etc.
Do not ask questions on the Coppermine support board how to configure your webserver; it's beyond the scope of the Coppermine support board to explain webserver setups. Usually (if you're on shared webhosting, which is the case for the vast majority of Coppermine users), you can't change webserver settings anyway. Only the person who actually administers the webserver (i.e. the webhost's admin) can change webserver settings.
Therefore, you better ask your webhost for support if you have issues with ressource limitations or other questions that related to webserver setup. If you're self-hosted (which is something the coppermine dev team doesn't recommend), you should read up your issue in the documentation that comes with your webserver.