Skip to content

WordPress Internal Server Error 500 for Uploaded Images

After upgrading WordPress on my Windows Server 2008 to version 3.4.1, I encountered a quite strange behavior. Using the Add New Post functionality, images, uploaded by multi-file-uploader have not been displayed anymore, neither in the editor nor in the post itself.

Add New Post Editor

Once you finished your article, your blog will end up with a Internal Server Error 500. However, all thumbnails created by WordPress can be requested without any problems.

500 - Internal Server Error Message

Eventually, I started to do some research on this issue, ending in a quite exhaustive digging down to the metal of Windows, however, with a quite surprisingly outcome. In this article I’ll try to give an overview of this issue, explaining why this occurs on Windows and how to solve this with almost a  single click.

There are quite a lot of blog entries and stackoverflow answers about this topic with more or less useful steps. If you are just looking for the quick answer, without the need of understanding what causes this particular problem, here it comes:

Change the system’s default temp folder (C:\Windows\temp) rights by granting rights for IIS_IUSRS user and you are probably done.

Temp Properties

The WordPress image upload is using the standard PHP functionality, using the temporary upload folder specified in your php.ini file.  By default, PHP is using the system’s temporary directory (e.g. c:\windows\temp) for uploading the initial image.

php.ini File Uploads Settings

Eventually, using the system’s temp folder is the root cause of the issue described in this article. When uploading the image to the temp folder, the file is initially created on the system. Consequently, the file is inheriting the folder’s security settings. After uploading, the original file is copied into the destination folder, e.g. \wp-content\uploads\2012\08.  Here all thumbnails are generated from the original file. As they are being created in the destination folder, they will inherit the security settings from this folder resulting in two different sets of permissions applied to the original file and the thumbnails. This explains why you will only receive an error with error code 500 for the original file, while all the thumbnails can be requested without any problems. 

In case you have already images the destination folder causing an error code 500, you can reapply the actual rights of the wp-content folder which will probably fix the problem.

In case changing the permissions of the system’s temp folder does not fix the issue, check your php.ini file if another upload folder is specified in the file uploads section. Baer in mind that PHP will use the system’s temp file for uploads also as backup in case PHP has no access rights for the folder specified in the php.ini  file. 

If you consider granting IIS_IUSRS as a security risk to access the system’s default temp folder you might want to specify an alternate upload folder anyway.

Published introubleshooting

14 Comments

  1. djackiem djackiem

    I had the same problem after one of our techs made some security changes on our web server. I always explicitly set the WP uploads folder to allow IIS_IUSRS, but all of a sudden I was getting 500 errors when clicking on thumbnails. Thank you for doing a write up on this — not only did I fix it very quickly, but now I understand why that was happening.

    • Thanks for your feedback and the time to write the comment. I am glad that the writeup did help and this is quite motivating to go on with writing!

  2. Carlo Carlo

    Great post ! Explained my problem perfectly, gave a sensible technical solution. Good work.

  3. Lucy Lucy

    Very good one, works like charm, thanks for sharing!!!

  4. Have searched a whole day! Reinstalling some times and finally I got to your blog! And it is working now in a Server 2012 environment! Why tis topic is not written in wp help files? Godd job …..

  5. Nathan Nathan

    You just saved us from hours of searching! We tried so many different things. Had a feeling it was something with permissions but didn’t know what. Thank you so much! Glad you posted this!

  6. Thank you! I tried a lot of things, but this finally worked!

  7. Thank you mate!
    I spent much time figuring this one out.
    Once again thank you for help!

  8. P P

    Dude, this was a lifesaver! Thank you!

  9. how do you do this on a MAC System?

  10. Thanks man. I have just updated to the latest version and well as move from server 2012 to 2012 R2. This solved my issue.

  11. philsafc philsafc

    Thank you this was puzzling me for weeks

  12. sjf84 sjf84

    Thanks a ton for looking into this and sharing your findings. 5 years later, still fixes a common error on IIS systems!

  13. Seb Seb

    My Man! Life saver!! Thanks! Never would have found it. Still working 7 years later and with IIS 10.

Leave a Reply to DrMG Cancel reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.