我的问题是如何检测托管的实际内存限制? php.ini 设置并不总是代表真正的限制,例如,内存限制为 512MB,脚本可能会在 128MB 时失败,最大执行时间也是如此。
如果 PHP exec 命令没有被阻止,您可以运行像这样的 shell 命令
$freeram_r = explode("\n", shell_exec("/usr/bin/free"));
并解析结果。或者直接输入您选择的参数,例如从 /proc/meminfo 输出获取真正可用的千兆字节,例如
$available = shell_exec('awk \'/MemAvailable/ { printf "%.3f \n", $2/1024/1024 }\' /proc/meminfo');
您无法使用 php 检查服务器的内存限制,您只能检查服务器管理员在 php.ini 文件中设置的限制
或
您可以使用 PHP 函数,如 memory_get_usage() 和 memory_get_peak_usage() 来测量脚本执行期间的内存使用情况。您可以重复检查脚本中不同点的内存使用情况,并将其与 memory_limit 值进行比较,以估计实际内存限制。请记住,这些函数可能无法提供精确的值,但可以让您了解内存消耗情况。
$memoryLimit = ini_get('memory_limit');
$currentMemoryUsage = memory_get_usage();
$peakMemoryUsage = memory_get_peak_usage();