Forum Image Upload Stuck at 90%: What’s Actually Happening and How to Fix It
What’s actually happening at 90%
When a forum upload freezes at 90%, the file has already reached the server. The browser finishes transmitting the data — that’s roughly the first 85–90% of the progress bar — and then the server takes over: write the file to disk, generate a thumbnail, update the database, return a response. If any of that server-side processing fails or times out, the progress bar just sits there.
That’s why changing the file size rarely helps. The bottleneck isn’t the transfer.
The most common causes
PHP execution and memory limits
Most forum software runs on PHP. PHP has a max_execution_time setting — 30 seconds by default — that kills a script if it runs too long. Generating a thumbnail from a 12-megapixel image can hit that wall easily. There’s also memory_limit: loading a large photo into GD or ImageMagick for resizing can consume several hundred megabytes of RAM, and on shared hosting that budget is tight.
Image format incompatibility
Phones increasingly save images as HEIC (Apple’s default since iOS 11) or AVIF. Older forum software — most installations of vBulletin, phpBB, or XenForo that haven’t been updated recently — doesn’t know how to process these formats. The upload completes from the browser’s perspective, the server fails silently trying to thumbnail it, and the progress bar just hangs.
Web server body-size limits
nginx has a client_max_body_size directive; Apache has LimitRequestBody. If either is set lower than PHP’s upload_max_filesize, the server drops the upload partway through — sometimes right around that 90% mark — without giving a useful error message to the browser.
Server-side antivirus scanning
Some shared hosting environments run uploaded files through a malware scanner before storing them. Large or unfamiliar-format images can cause that scan to time out. Not common, but it produces exactly this symptom.
What you can try as a regular member
- Convert to JPEG before uploading. This is the single most effective user-side fix. On iPhone, go to Settings → Camera → Formats and switch to “Most Compatible.” On Android, most camera apps have a similar option. Or open the image in any photo editor and export as JPEG.
- Reduce pixel dimensions, not just file size. A JPEG at 4000 × 3000 pixels can be well within the forum’s file-size cap and still exhaust server memory during thumbnail generation. Resize to 1920 × 1440 or smaller first.
- Try a different browser. Chrome, Firefox, and Safari handle multipart uploads slightly differently. Takes 30 seconds to test and sometimes that’s all it takes.
- Check your connection. On weak mobile data, the browser can report the upload as complete before the server has fully received the payload. Switch to Wi-Fi and try again.
- Clear site cookies and cache. Stale session data occasionally causes the post-upload handshake to fail. Log out, clear cookies for the forum domain, log back in, and try once more.
If you’re an admin
The fix almost always lives in php.ini or your web server config. Check these first:
- Raise
max_execution_timeto 120 seconds or more - Set
memory_limitto at least 256M — 512M if members regularly upload high-resolution photos - Make sure
post_max_sizeis larger thanupload_max_filesize; when they’re equal or reversed, uploads fail silently - Confirm your web server’s body-size limit matches or exceeds the PHP limit
- Consider switching from GD to ImageMagick (
php-imagick) for image processing — it handles large files more efficiently
On nginx specifically, a missing or low client_max_body_size is probably the most common culprit on a freshly configured server.
The HEIC problem deserves its own mention
iPhones have been shooting HEIC by default for years, and plenty of forum software still can’t process it. The upload appears to work — the file lands on the server — then the thumbnail step fails and the whole request times out. If your members are primarily iPhone users and you’re seeing widespread 90% hangs, HEIC is the first thing to investigate. Most major forum platforms now have a plugin or extension that converts HEIC on ingest; it’s worth installing before you go digging through PHP config.
