I've set memory_limit same as post_max_size and upload_max_filesize to recreate the case on test server. In conclusion, memory_limit is the cause of upload failure. Memory_limit should be increased to accommodate upload and other functions. It is why small files upload just fine, but large files not. Problem solved.