考虑普通的PHP图像上传功能(不使用AJAX),并且存在此大图上传的问题偶尔失败 - 在一台测试服务器上较少,而在另一台测试服务器上更频繁。假设调试器尚未开始调试问题,并且没有文件/文件夹权限问题,如何进行?

我确定我有 file_uploads 上。我不想只盲目设置一些安全值或增加值,直到其工作。基本上,我希望这些值完全按照我的相关模块符合。如果这是最好的方法,我准备覆盖相关模块中的设置。

根据 与文件上传有关的设置, ,这些都是相关/相关的设置 -
* file_uploads
* upload_max_filesize
* max_input_time
* memory_limit
* max_execution_time
* post_max_size

  1. 查找有关脚本的参数/值 -
    这样我就可以找出其中哪一个是/实际上有多少人被我的脚本违反并导致失败,我需要首先找到我脚本的相应值。如何找到我脚本的以下值:

    • 总上传文件大小
    • 输入时间
    • 内存使用情况
    • 脚本执行时间
    • 发布的数据大小

    哪种工具可以用于相同的。我认为使用PHP代码,我可以找到一些:

    • 脚本执行时间 - 差异 microtime(true) 在脚本开始和结束。
    • 上传的文件大小 - foreach循环 $_FILES 找到的总和 ['size'] 属性

    如何找出诸如内存使用,输入时间等之类的其余部分?

  2. 在哪里/如何覆盖
    最后,当我发现违规设置时,假设我需要增加2个设置的值。在哪里应用覆盖?我想设置不正确 memory_limit 等方面的HTACCESS或PHP脚本中的所有模块。相反,仅应用于相关的模块更好。我对么?

  3. 设置要求较少要求的模块
    另外,对于其他不需要大量资源的模块,在仔细研究模块的资源要求之后,覆盖设置以减少设置是好的/明智的吗?它会减少不必要的资源消耗吗?如果是这样,如何将这些设置的2或3个组合(取决于项目要求,将其命名为正常订阅,重型效费)并调用单个功能来为每个模块加载任何一个组合?

  4. Memory_limit预防措施
    关于 memory_limit 这里提到 -

    设置过高的值可能非常危险,因为如果处理多个上传,所有可用的内存都将被用尽,而其他不相关的脚本会消耗大量内存,也可能影响整个服务器。

采取什么总体预防措施?

谢谢,
Sandeepan

有帮助吗?

解决方案

调试的一些想法:

对于手动测试,我将准备一系列具有不同尺寸的图像,其净大小(宽度x高)以小步骤增加:100 x 100,100 x 200,100 x 300 ....然后尝试它们。在某个时候,如果问题是内存限制,它们可能会开始失败。你可以打开 error_reporting() 仅对自己(也许使用某种调试的cookie),因此您可以看到到底失败了。

如果不是一个选项,我将设置某种机制以用于长期记录,该机制将图像的尺寸存储到日志文件或表格之前,然后在调整大小开始之前,以及 $_FILES 大批。在脚本的成功结束时,向该条目添加一个“确定”。这样,如果它们可以通过脚本到脚本(并且由于超时设置而不会事先失败),您将能够找到有关失败上传的更多信息。

同样,对于其他不需要大量资源的模块,覆盖设置以减少它们是好的/明智的

我认为答案总是“不”。据我所知,内存限制是可以分配的内存的最大限制,但是该金额并非为每个请求保留。我从未听说过任何人以这种方式微调记忆限制。

但是,如果系统的某些部分(例如,图像恢复器)需要极高的内存限制,则可以明智地应用特定的内存限制 memory_limit 仅针对他们的设置,例如 一个 .htaccess 环境.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top