1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace Portiere\WebServer; |
4
|
|
|
|
5
|
|
|
use Symfony\Component\Finder\Finder; |
6
|
|
|
|
7
|
|
|
/** |
8
|
|
|
* Class NginxManager. |
9
|
|
|
* |
10
|
|
|
* Manager handling Nginx web server actions |
11
|
|
|
* |
12
|
|
|
* @author Ignacio Velazquez <[email protected]> |
13
|
|
|
*/ |
14
|
|
|
class NginxManager extends Manager |
15
|
|
|
{ |
16
|
|
|
/** |
17
|
|
|
* @var string Template filename |
18
|
|
|
*/ |
19
|
|
|
const TEMPLATE_FILE = 'nginx.php'; |
20
|
|
|
|
21
|
|
|
/** |
22
|
|
|
* @var array |
23
|
|
|
*/ |
24
|
|
|
protected $config = [ |
25
|
|
|
'sitesAvailablePath' => '/etc/nginx/sites-available/', |
26
|
|
|
'sitesEnabledPath' => '/etc/nginx/sites-enabled/', |
27
|
|
|
'logsDir' => '/var/log/nginx/', |
28
|
|
|
]; |
29
|
|
|
|
30
|
|
|
/** |
31
|
|
|
* Gets the full path of the available vhost file. |
32
|
|
|
* |
33
|
|
|
* @param VhostInterface $vhost |
34
|
|
|
* |
35
|
|
|
* @return string |
36
|
|
|
*/ |
37
|
1 |
|
public function getVhostAvailablePath(VhostInterface $vhost) |
38
|
|
|
{ |
39
|
1 |
|
return "{$this->config['sitesAvailablePath']}{$vhost->getFilename()}"; |
40
|
|
|
} |
41
|
|
|
|
42
|
|
|
/** |
43
|
|
|
* Gets the full path of the enabled vhost file. |
44
|
|
|
* |
45
|
|
|
* @param VhostInterface $vhost |
46
|
|
|
* |
47
|
|
|
* @return string |
48
|
|
|
*/ |
49
|
1 |
|
public function getVhostEnabledPath(VhostInterface $vhost) |
50
|
|
|
{ |
51
|
1 |
|
return "{$this->config['sitesEnabledPath']}{$vhost->getFilename()}"; |
52
|
|
|
} |
53
|
|
|
|
54
|
|
|
/** |
55
|
|
|
* Gets template for this web server. |
56
|
|
|
* |
57
|
|
|
* @param VhostInterface $vhost |
58
|
|
|
* |
59
|
|
|
* @return false|string |
60
|
|
|
*/ |
61
|
|
|
public function getTemplate(VhostInterface $vhost) |
62
|
|
|
{ |
63
|
|
|
return $this->templating->render(self::TEMPLATE_FILE, [ |
64
|
|
|
'server' => $this->config, |
65
|
|
|
'vhost' => $vhost, |
66
|
|
|
]); |
67
|
|
|
} |
68
|
|
|
|
69
|
|
|
/** |
70
|
|
|
* {@inheritdoc} |
71
|
|
|
*/ |
72
|
|
|
public function createVhost(VhostInterface $vhost) |
73
|
|
|
{ |
74
|
|
|
$template = $this->getTemplate($vhost); |
75
|
|
|
|
76
|
|
|
$this->fs->dumpFile($this->getVhostAvailablePath($vhost), $template); |
|
|
|
|
77
|
|
|
$this->enableVhost($vhost); |
78
|
|
|
} |
79
|
|
|
|
80
|
|
|
/** |
81
|
|
|
* {@inheritdoc} |
82
|
|
|
*/ |
83
|
|
|
protected function enableVhost(VhostInterface $vhost) |
84
|
|
|
{ |
85
|
|
|
$this->fs->symlink( |
86
|
|
|
$this->getVhostAvailablePath($vhost), |
87
|
|
|
"{$this->config['sitesEnabledPath']}{$vhost->getFilename()}" |
88
|
|
|
); |
89
|
|
|
} |
90
|
|
|
|
91
|
|
|
/** |
92
|
|
|
* {@inheritdoc} |
93
|
|
|
*/ |
94
|
|
|
public function deleteVhost(VhostInterface $vhost) |
95
|
|
|
{ |
96
|
|
|
foreach ($this->getGeneratedFiles($vhost) as $file) { |
97
|
|
|
$this->fs->remove($file); |
98
|
|
|
} |
99
|
|
|
} |
100
|
|
|
|
101
|
|
|
/** |
102
|
|
|
* {@inheritdoc} |
103
|
|
|
*/ |
104
|
|
|
public function listVhosts() |
105
|
|
|
{ |
106
|
|
|
$finder = new Finder(); |
107
|
|
|
$enabled = $vhosts = []; |
108
|
|
|
foreach ($finder->files()->in($this->config['sitesEnabledPath']) as $file) { |
109
|
|
|
$enabled[] = $file->getFilename(); |
110
|
|
|
} |
111
|
|
|
|
112
|
|
|
$finder = new Finder(); |
113
|
|
|
foreach ($finder->files()->in($this->config['sitesAvailablePath']) as $file) { |
114
|
|
|
$vhosts[] = [$file->getFilename(), in_array($file->getFilename(), $enabled)]; |
115
|
|
|
} |
116
|
|
|
|
117
|
|
|
return $vhosts; |
118
|
|
|
} |
119
|
|
|
|
120
|
|
|
/** |
121
|
|
|
* {@inheritdoc} |
122
|
|
|
*/ |
123
|
|
|
public function getGeneratedFiles(VhostInterface $vhost) |
124
|
|
|
{ |
125
|
|
|
return [ |
126
|
|
|
$this->getVhostAvailablePath($vhost), |
127
|
|
|
$this->getVhostEnabledPath($vhost), |
128
|
|
|
"{$this->config['logsDir']}{$vhost->getErrorLogFilename()}", |
129
|
|
|
"{$this->config['logsDir']}{$vhost->getAccessLogFilename()}", |
130
|
|
|
]; |
131
|
|
|
} |
132
|
|
|
|
133
|
|
|
/** |
134
|
|
|
* {@inheritdoc} |
135
|
|
|
*/ |
136
|
|
|
public function restartServer() |
137
|
|
|
{ |
138
|
|
|
shell_exec('service nginx restart'); |
139
|
|
|
} |
140
|
|
|
} |
141
|
|
|
|
This check looks for type mismatches where the missing type is
false
. This is usually indicative of an error condtion.Consider the follow example
This function either returns a new
DateTime
object or false, if there was an error. This is a typical pattern in PHP programming to show that an error has occurred without raising an exception. The calling code should check for this returnedfalse
before passing on the value to another function or method that may not be able to handle afalse
.