ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
DeliveryMethodObjective.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22
27
32{
33 public const SETTINGS = 'delivery_method';
34 public const XSENDFILE = 'xsendfile';
35 public const XACCEL = 'xaccel';
36 public const PHP = 'php';
37
38 public function getArtifactName(): string
39 {
40 return "delivery_method";
41 }
42
43 public function build(): Artifact
44 {
45 // check if mod_xsendfile is loaded
46 if ($this->isModXSendFileLoaded()) {
47 return new ArrayArtifact([
48 self::SETTINGS => self::XSENDFILE
49 ]);
50 }
51
52 return new ArrayArtifact([
53 self::SETTINGS => self::PHP
54 ]);
55 }
56
57 private function isModXSendFileLoaded(): bool
58 {
59 if (function_exists('apache_get_modules') && in_array('mod_xsendfile', apache_get_modules(), true)) {
60 return true;
61 }
62
63 try {
64 $command_exists = shell_exec("which apache2ctl");
65 if ($command_exists === null || empty($command_exists)) {
66 return false;
67 }
68
69 $loaded_modules = array_map(
70 static fn(string $module): string => explode(" ", trim($module))[0] ?? "",
71 explode("\n", shell_exec("apache2ctl -M 2>/dev/null") ?? '')
72 );
73 } catch (\Throwable $e) {
74 $loaded_modules = [];
75 }
76 return in_array('xsendfile_module', $loaded_modules, true);
77 }
78
79 #[\Override]
80 public function isApplicable(Environment $environment): bool
81 {
82 return !file_exists(BuildArtifactObjective::PATH());
83 }
84
85}
isApplicable(Environment $environment)
Get to know whether the objective is applicable.
An array as an artifact.
This is an objective to build some artifact.
An artifact is some file that is build on demand per installation and is not shipped with the ILIAS s...
Definition: Artifact.php:28
An environment holds resources to be used in the setup process.
Definition: Environment.php:28