jQuery AJAX 的内部服务器错误仅在 Azure 上调用大型进程 PHP 任务

Internal server error for jQuery AJAX call for a large process PHP task only on Azure

现在,在任何人尝试将此问题视为重复之前,我想说我已经查看了 SO 和其他论坛上的所有类似问题,但完全无济于事。我尝试了所有 posted 的解决方案,但没有任何效果。话虽这么说,但问题是:

我有一大组 jpg/jpeg 图片 (6000-20000),每张最大 10 KB,每张尺寸 512x512 像素,正在上传到我的 Azure 网络 + MySQL 设置.我想出了如何在不破坏代码或我们的服务的情况下上传那么多文件,一切都很酷。

上传这些图像后,我对这些图像所做的就是构建各种平铺金字塔。如果有 5000 张图片,我一次将它们分批拼贴在一起,每批 4 张图片形成一张图片,使用 PHP 将结果图像重新采样到其一半大小,并将其作为新拼贴存储在文件夹中代表这个金字塔的另一个层次。因此,如果所有基本文件(已上传)都存储在 Folder-1 中,那么正在创建的新图像将存储在 Folder-2 中,然后是 Folder-3,依此类推,直到没有任何图像可以平铺。此时,所有图像都已拼接在一起并采样为 1 张图像。现在对于那些熟悉网络深度缩放概念的人来说,您会明白为什么这是必要的。

现在,真正的问题来了。所有这些在本地主机上都运行良好。我将此代码移植到我的 CentOS 运行 LAMP 个人服务器上,并且运行良好。但是,在免费层 Azure Web + MySQL 实例的公司服务器上,进程 return 内部服务器错误。

更具体地说,一旦上传功能 return 成功,jQuery AJAX 就会调用此金字塔功能。作为 PHP 过程的一部分,我将上传的 PHP 文件从指定的临时位置移动到其实际上传位置,并开始处理图像以进行平铺。通常,整个金字塔生成需要 5-15 分钟,具体取决于我上传的基础图像的数量。这些统计数据基于它在本地主机上的工作方式。在服务器上,我遇到了某种限制或超时,这似乎在几分钟后杀死了我的 PHP。图像可能在创建两个级别后停止处理。当总图像少于 2000 张时,此过程效果很好。

有时,AJAX 会失败。但是,当我通过 Filezilla 检查上传文件夹时,图像继续被处理,因为我看到它们是由我的脚本创建的。在这一点上,如果我的脚本在一段未知的时间内没有完成,它也会死掉。我得出这个结论是因为没有更多的 images/folders 用于后续处理。

在你说之前,我的 PHP.ini 设置已经被修改,并且在 post 来到这里之前我已经重启了无数次服务器。这些是我当前的设置:

max_execution_time = 9999
memory_limit = 3G
post_max_size = 10G
upload_max_filesize = 1G
max_input_time = 9999

phpinfo() 也反映了这一点。 .htaccess 在这里没有任何作用,所以尝试它没有任何区别。它没有被识别。 web.config 似乎有效,我还添加了以下行:

<system.web>
<httpRuntime executionTimeout="9999" maxRequestLength="2097151"/>
</system.web>

这也没什么区别。我知道 web.config 文件有效,因为我尝试使用其中的其他设置,并且更改确实反映在网络应用程序中。

那么,我缺少什么?我尝试提出支持请求,但 Azure 不让我这样做,除非我使用的是付费套餐。如果需要,我可以 post 我的代码,但我很确定这不是必需的,因为它在我的本地主机和我的个人 Linux 服务器上运行良好。

我在这个问题上花了太多时间。任何帮助,将不胜感激。提前致谢!

目前,对于未从 Azure 应用服务发回任何数据的请求,有 230 秒(即不到 4 分钟)的超时。所以我认为这提出了你的问题。详情可以查看我的earlier post