Excel file gets corrupted when uploading to the server via PHP upload form
I have a simple HTML file upload form:
<form enctype="multipart/form-data" method="post">
<input name="description" type="text">
<input name="file" type="file">
<button type="submit">Submit</button>
</form>
When the user submits - it sends an AJAX post request to my php script that is running in an Azure App Service (Azure Function). The PHP script saves the file to the server like this:
<?php
file_put_contents($filename, $data);
This is working perfectly for all files - except .xlsx excel files.
When trying to open the excel file that got saved on the server - I receive the following error in excel: We found a problem with some content in 'test-excel-file.xlsx'. Do you want to try to recover as much as we can?
Anyone have any ideas why the .xlsx file is somehow getting corrupted when being saved to the server? I did some testing and can see that when I open both the original excel file and the newly saved excel file in a text editor - the content is the same. So why is Excel complaining?
In fact, I can create a brand new workbook in excel with a sample row of data - save this file. Then open it in a text editor and copy/paste the contents to a new file and the same error occurs. So I really don't think it's an issue with file_put_contents
.
So what is the issue with trying to save Excel (.xlsx) file contents to a new .xlsx file? Anyone have any suggestions? Thank you for your time.
Answer
Solution:
The solution was to not host this PHP script in an Azure Function, because Azure Functions do not expose the $_FILES
global. Without access to $_FILES
, I had to parse the multipart form request manually, which was somehow corrupting complex files.
So I moved the script over to one of our regular Azure App Service's where I could then access the $_FILES
global and didn't need to do any manual parsing of the file contents.