0) { $limits[] = $bytes; } } $memory = self::bytes((string) ini_get('memory_limit')); if ($memory > 0) { $limits[] = intdiv($memory, 4); } $limit = ($limits === [] ? self::MAX_BATCH : min($limits)) - 262144; return max(self::MIN_BATCH, min(self::MAX_BATCH, $limit)); } /** Enough free disk space for $bytes of files: twice (staging plus restore point), once for uploads in low-disk mode. */ public static function check_disk_space(int $bytes, bool $low_disk): void { $free = Fs::free_space(Paths::work_dir()); $need = $low_disk ? $bytes : $bytes * 2; if ($free !== false && $free < $need) { throw new RelayError( 'files.disk_space', /* translators: 1: site URL, 2: size needed, 3: size free */ esc_html(sprintf(__('%1$s does not have enough free disk space for the files: %2$s needed, %3$s free.', 'siterelay'), home_url(), size_format($need), size_format((int) $free))), esc_html__('Free some space on that server, copy fewer files, or use low-disk mode for uploads.', 'siterelay') ); } } /** "64M" → 67108864; "-1" or "0" (no limit) → 0. */ public static function bytes(string $value): int { $value = trim($value); if ($value === '' || (int) $value <= 0) { return 0; } $unit = strtolower(substr($value, -1)); $number = (int) $value; $factor = ['k' => 1024, 'm' => 1048576, 'g' => 1073741824][$unit] ?? 1; return $number * $factor; } }