# Coppermine Photo Gallery v1.5.x: Documentation and Manual

# Upload troubleshooting

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.

## Permissions

First and foremost: Check your folder and file permission settings on the `/albums`, `/albums/userpics`, and `/albums/edit` directories. On *nix-driven webservers, the folder `/albums` and all sub-folders should usually be 777 or 755 (depending on your webserver configuration). If you don't know what we mean by 777 or 755, you need to read up the permission section (if this doesn't help, do a Google search on UNIX file permissions). Windows has a similar set of file permissions. You can usually set these permissions using an FTP client (If you don't know what an FTP client is, Google for FTP client or take a look at the list of recommended tools).

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

We repeat - check/apply your permissions on the `/albums`, `/albums/userpics`, and `/albums/edit` directories. All should usually be 777 or 755 (depending on your webserver configuration) or whatever is needed on your webserver setup to allow the coppermine script write access.

Yes, we do want you to set the permissions of each folder even if you think you have already done this. Yes, we mean it. No, just checking permissions (i.e. looking up what your FTP client reports permissions to be) is not enough. As we said: set/apply permissions, don't just look at them.

## Enable troubleshooting settings

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.

Details
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.

When troubleshooting uploads in CPG 1.5, you are advised to activate 'Debug mode' in the config console. Changing this setting negates some of the error masking done in the multiple upload setting. This will allow you to access more detailed error messages.

- Log in as admin
  Go to your coppermine page and log in as admin
- Set "Default upload method" to "Simple"
  - Go to the config screen
  - Scroll to the section "User settings" and expand it by clicking on it
  - Set the Default upload mechanism to "Simple - one file at a time"
  - Scroll to the bottom of the page
  - Save the new settings by clicking on "Save new configuration"
- Enable "debug mode"
  - Go to the config screen
  - Scroll to the section "Maintenance settings" and expand it by clicking on it
  - Enable debug mode for everyone by clicking on "Yes: Everyone" in the line "Enable debug mode"
  - Leave display of notices switched off - if the checkbox "Display notices in debug mode" is ticked, un-tick it (notices are only meant for developers - if you have idea what they mean, leave them off permanently)
  - Scroll to the bottom of the page
  - Save the new settings by clicking on "Save new configuration"
- Go to the http uploads page by clicking on the "upload file" link in the main coppermine menu
  The http uploads page will be available for you as admin at any time. This is not the case though for non-admin visitors of your gallery: it depends on the permissions you assign them if they will have the upload file link in the menu.
- On the upload file screen, choose an album from the "Album" dropdown
  If you don't have an album you can pick from the list, you haven't created an album yet. You have to understand that you need at least one album where your upload can go to. Go to the album manager and create at least one album first, then try again uploading.
- Click the "Browse..." button and navigate to a small, known-good jpg-file on your hard drive.
  Don't assume that any image will work - the term "known-good" in this case means that you should use an image that already has been processed by coppermine to make sure it is a file that coppermine can handle - this can best be achieved if you download an image from the coppermine demo on the original coppermine home page.
- Submit the form by clicking on the "Upload file" button
  By submitting the form you start the actual upload process - everything you did before were just preparations.

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.

## Asking for support on upload issues

When asking for support on the coppermine forum, post a link to your site and a test user account (the test user mustn't be in the admin group!) with upload privileges, with the above mentioned settings in place - this way, supporters can see the error messages as well. Do not post debug_output unless requested. If you want fast results, you should disable admin approval for the group the test user is in, so supporters can tell instantly what is wrong without needing to double-check.

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!

### Step-by-step guide when asking for support

This is a step-by-step guide that is meant to explain in a fool-proof way what settings you need to make when asking for support on the Coppermine support board.

We assume that you have applied tight permission settings, so we'll go through this a bit more complicated than actually necessary on most setups: the instructions below are meant to allow upload troubleshooting for the supporter even if the rest of users of your gallery isn't allowed to upload or if you don't even allow user registration in the first place. If you know your way around, you can of course skip the steps that explain the creation of an extra group if all your registered users are allowed to upload anyway. In the end, the important thing that counts is that the supporter can go through uploading untill he/she can see what actually goes wrong during the upload stage.

- #### Log in as admin

  Go to your coppermine page and log in as admin

- #### Create uploader group

  The instructions below how to create a group only applies if you are running Coppermine in standalone mode. If you have bridged your Coppermine gallery, use your bridging application to create the uploader group.
  - Go to the group control panel by clicking on the corresponding link in the admin menu
  - Scroll to the bottom of the page
  - Click on the "Create new group" button
  - A new table row will appear at the bottom of the groups control panel table. Click into the name field and enter a name for the group that will make sense, e.g. "uploaders"
  - Scroll to the bottom of the page
  - Submit the form by clicking on the "Apply changes" button

- #### Assign upload permissions to the uploader group

  The instructions below how to assign upload permissions to a group applies both for bridged as well as for standalone galleries.
  - Go to the group control panel by clicking on the corresponding link in the admin menu
  - For the uploader group you created in the previous step, set the "Allowed" toggle to "Yes" in the column "Public albums upload". Set the "Approval" toggle to "No" in that table cell.
  - Scroll to the bottom of the page
  - Submit the form by clicking on the "Apply changes" button

- #### Create a non-admin test user account

  The instructions below how to create a user only applies if you are running Coppermine in standalone mode. If you have bridged your Coppermine gallery, use your bridging application to create the test user account.
  - Go to the user manager by clicking on the corresponding link in the admin menu
  - Scroll to the bottom of the page
  - Click on the "Create new user" button
  - On the following screen, enter a user name that is easy to memorize and type - we recommend something simple like "tester", preferably without capitalization.
  - Assign an easy password - can be the same as the user name.
  - Assign the user to the "Uploaders" user group you created previously - make sure that for the user group dropdown field the value is "Uploaders" (or whatever name you chose for the custom group).
  - Scroll to the bottom and submit the form.

- #### Create an album where the uploads can go into

  So far, we have created a custom group that is allowed to upload to public albums, but we haven't specified into what album the upload is allowed to go to. We need to create an album first.
  - Go to the album manager by clicking on the corresponding link in the admin menu
  - Choose a category in which the test album should be created in - pick the category using the dropdown field at the top of the album manager. For ease of use it's recommended to create the test album in the gallery root (i.e. picking "* No category *" from the dropdown).
  - Click on the "New album" button at the bottom of the album manager page
  - An input field will show. Enter the name of the new album as "test album" and submit the form by clicking on the OK button

- #### Allow uploads to the test album

  The album where the uploads should go to exists, but so far nobody except the admin has got permissions to upload to it. Let's allow uploads for that album.
  - Go to the gallery index by clicking on the "Album list" link in the regular gallery navigation
  - Navigate to the category in which you created the test album in (if you did as suggested and created the test album inside the gallery root, you should already be where you're suppossed to be, so no need for action here)
  - Click on the "Properties" button next to the empty thumbnail that represents the test album
  - On the album properties screen, set "Visitors can upload files" to "Yes"
  - If your gallery has heavy traffic and you don't want your site visitors to notice that there is a test album, choose "Members of the 'Uploaders' group" from the dropdown list "Visitors can upload files"
  - Scroll to the bottom and submit the form by clicking on the button "Update album"

- #### Set "Default upload method" to "Simple"

  - Go to the config screen
  - Scroll to the section "User settings" and expand it by clicking on it
  - Set the Default upload mechanism to "Simple - one file at a time"
  - Scroll to the bottom of the page
  - Save the new settings by clicking on "Save new configuration"

- #### Enable "debug mode"

  - Go to the config screen
  - Scroll to the section "Maintenance settings" and expand it by clicking on it
  - Enable debug mode for everyone by clicking on "Yes: Everyone" in the line "Enable debug mode"
  - Leave display of notices switched off - if the checkbox "Display notices in debug mode" is ticked, un-tick it (notices are only meant for developers - if you have idea what they mean, leave them off permanently)
  - Scroll to the bottom of the page
  - Save the new settings by clicking on "Save new configuration"

- #### Test uploading using the test user account

  You may be tempted to go ahead and ask for support now, but wait a minute: you haven't tried for yourself yet if everything works as expected. You wouldn't want to start a support thread and just be told "do your homework first" (because that's what will happen if you obviously failed to do as suggested here). Here's what you do:
  - Log out from Coppermine (or use another browser alternatively) if you're logged in as admin
  - Log in using the non-admin test user account that you created in the steps above. If logging in fails, review the test user account details while being logged in as admin.
  - Click on "Upload file". If you don't have that upload link, you have failed to set up permissions properly - review the steps above carefully.
  - On the upload file screen, choose the test album from the "Album" dropdown. If you can't select the test album, you have made a mistake when setting up the upload permissions
  - Click the "Browse..." button and navigate to a small, known-good jpg-file on your hard drive. Don't assume that any image will do: when in doubt, download a test image from the coppermine demo page
  - Submit the form by clicking on the "Upload file" button
  In an ideal world, everything will work as expected - your upload will succeed and you will see your uploaded image embedded into a coppermine page. If this is the case, http uploads work as expected. If this is not the case, you should get an error message that explains what went wrong. If you can't figure out what the error message means, but you were able to perform all the steps above including the last one (submitting the upload form), then please go ahead and ask for support on the coppermine support board. You're welcome to post your support request as well if http work as expected, but you want to request help with another upload method.

- #### Post your support request on the Coppermine support board

  - Go to the Coppermine support board
  - Register for a new account if you don't already have one and log in with that account on the coppermine forum.
  - Make sure to have read the board rules before posting (a link to the board rules can be found in the forum navigation)
  - Start a new thread on the support board that corresponds to your coppermine version. Since you are reading the documentation for cpg1.5.x, you are probably using that version, so you should start your thread on the sub-board that deals with that version. Posting on a board for another version is not an option and will lead to frustration only both for you as well as for the supporter. Since you have issues with uploading, you should post on the sub-board that deals with upload issues.
  - In your posting, make sure to post a link to your gallery. If your gallery contains adult content (mild nudity falls into this category as well), make sure to post a warning with your link
  - Post the test user account details (user name and password) that you have set up above
  - It's a good idea to show supporters that you tried for yourself before asking for support - explain what actually goes wrong, how far you got, what error message you get etc.

### Example support request

This is how your support request posting could look like (make sure that you populated the stuff in red with actual content from your case):

I'm having issues when uploading on my Coppermine driven gallery http://example.com/my_coppermine_folder/
When using http uploads and the suggested settings for upload troubleshooting in place, I get the error message
[code]The text of the error message here[/code]
Here's the test user account data:
Username: tester
Password: foobar
I have been using the image taken from http://example.com/path/to/test/file.jpg as an example to test with.
Having done as suggested in http://forum.coppermine-gallery.net/some_forum_thread didn't work as expected: I got
[code]Some other error message[/code]
when trying that. I have no idea what else to do.
Thanks in advance for your suggestions

## Error messages

Error message | Possible cause | Suggested fix
--- | --- | ---
`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` | PHP's temporary folder is missing or doesn't have the needed permissions | 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 somepic.jpg to albums/userpics/` | The coppermine script doesn't have permissions on the filesystem of the server to create the thumbnail or intermediate image within the specified folder | 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.
`Warning: opendir(./albums/edit): failed to open dir: No such file or directory` | 'edit'-folder in your albums folder is missing 'edit'-folder in your albums folder doesn't have rwx-permissions Improper upgrade from cpg1.3.x | Make sure you have a folder named 'edit' in your albums folder. Make sure the edit directory has been chmod to 777/755. Make sure you have completely upgraded to Coppermine 1.5.x
`Warning: Undefined variable: HTTP_POST_VARS in include/init.inc.php on line 43` | Outdated PHP-version on your server Improper webserver configuration | Check if your version of PHP fullfills the minimum requirements for Coppermine. If your version is 4.3.0 or better, then this error is probably caused by a misconfiguration of your hosting server, and not a Coppermine issue. If the server isn't yours to configure properly (that is: if you're with a webhost), you can try this workaround (at your own risk): Edit the file "init.inc.php" and look for $PHP_SELF = isset($_SERVER['REDIRECT_URL']) ? $_SERVER['REDIRECT_URL'] : $_SERVER['SCRIPT_NAME']; Replace it with $PHP_SELF = $_SERVER['PHP_SELF'];
`Sorry there is no album where you are allowed to upload files` | 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 | 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.
`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` | 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. | 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. You must be the server's administrator to do this. Also, .htaccess files cannot change this configuration setting, and it cannot be changed using ini_set(). 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. 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 1048576 to get the memory usage in MB. Here are some common image resolutions and their memory use in GD (assuming RGB): 800 x 600 - 1.37 MB 1024 x 768 - 2.25 MB 1200 x 1600 - 5.49 MB Remember when using the above figures that the amount of memory being used by the rest of Coppermine must be taken into account, too. 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 webhsoting) 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. 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.
`Exec() has been disabled` | php.ini allows the server administrator to disable certain functions. Usually this is the case if your server is running in safe_mode. | If the server administrator has disabled exec() you will not be able to use Image Magick. 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.
`Not a GD extension` | The file(s) you tried to upload can not be handled using the GD ImageLibrary | 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.
`The file 'albums/userpics/10001/somepic.jpg' can't be inserted in the album. Error executing ImageMagick - Return value 127` | You haven't specified the correct path to ImageMagick, or you don't have ImageMagic at all. | 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.
`PHP running on your server does not support the GD image library, check with your webhost if ImageMagick is installed.` | Your webserver doesn't come with support for the GD image library. | 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.
`No file was uploaded ! If you have really selected a file to upload, check that the server allows file uploads...` | File uploads are disabled in php.ini or there is a permissions issue or there is an issue with your webserver's upload mechansim. | 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.
`Destination directory albums/userpics/XXXXX/ is not writable by the script` | permissions on file system level are not correct | Make sure to review your file/folder permissions. If that doesn't help, ask your webhost for support.

## Server-sided restrictions

All upload methods, but particularly HTTP uploads are limited by the restrictions placed upon them in PHP's configuration.

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.

1. 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.
2. upload_max_filesize
   2MB is the default limit for individual files.
3. post_max_size
   8MB is the default limit for post requests.
4. memory_limit
   8MB is the default size.
5. PHP's 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.
6. file_uploads
   This determines whether or not PHP will allow file uploads. It must be set to "On".
7. 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.

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.