Zen Cart offers multiple styles of serving downloads.
It "could" do the old-school way of just making every file downloadable from whatever place you actually upload it ... and then all your customers can share that link with their friends so nobody else has to "buy" it anymore. But most storeowners aren't in the business of giving all their paid downloads away for free.
So, the default method is to serve downloads "by redirect", which causes the server to:
- wait for order to be paid
- when the download link is clicked, it makes a new temporary folder the /pub/ directory with a random name starting with "." (because dot-prefixed files/folders are generally treated as "hidden" by most operating systems)
- then it makes a symlink to your product's download file into that temporary folder
- then that is what serves the file when the customer clicks the link
--- and before actually serving the file it checks whether the link has been used more than the allowed number of times you configured when you set it up in the Attributes Controller ... and if they've downloaded it too many times it denies access.
Another method is to download by "chunking" ... which is useful for extra-large files if the redirect method is having memory problems on the server. Same approach is used for authorizing the download, but the symlink is bypassed.
Possible causes of your problem:
- server doesn't support symlinks. This is rare nowadays, as most reliable servers support symlinks now. It's usually old servers that can't handle this.
-- the symlink issue could be a PHP version limitation (windows servers are still catching up)
-- the symlink issue could be an apache rule configuration that's preventing symmlinks from being honored, even though Zen Cart comes with an .htaccess file that tells it to honor symlinks (could be master apache config overriding it)
- your PHP and/or filesystem configuration might be disallowing files to be created under the pub folder (permissions issue)
Alterates:
- Try changing to download-by-streaming/chunking (Admin Configuration Attributes)
- Or, if neither of those more secure methods work, you could set downloads to go Direct ... but then you have no security or authorization control.
Several FAQs address the subject. Here's one: Download delivery methods explained