diff options
Diffstat (limited to 'bin/symfony_requirements')
-rwxr-xr-x | bin/symfony_requirements | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/bin/symfony_requirements b/bin/symfony_requirements new file mode 100755 index 00000000..1eca6719 --- /dev/null +++ b/bin/symfony_requirements | |||
@@ -0,0 +1,143 @@ | |||
1 | #!/usr/bin/env php | ||
2 | <?php | ||
3 | |||
4 | require_once dirname(__FILE__).'/../var/SymfonyRequirements.php'; | ||
5 | |||
6 | $lineSize = 70; | ||
7 | $symfonyRequirements = new SymfonyRequirements(); | ||
8 | $iniPath = $symfonyRequirements->getPhpIniConfigPath(); | ||
9 | |||
10 | echo_title('Symfony2 Requirements Checker'); | ||
11 | |||
12 | echo '> PHP is using the following php.ini file:'.PHP_EOL; | ||
13 | if ($iniPath) { | ||
14 | echo_style('green', ' '.$iniPath); | ||
15 | } else { | ||
16 | echo_style('warning', ' WARNING: No configuration file (php.ini) used by PHP!'); | ||
17 | } | ||
18 | |||
19 | echo PHP_EOL.PHP_EOL; | ||
20 | |||
21 | echo '> Checking Symfony requirements:'.PHP_EOL.' '; | ||
22 | |||
23 | $messages = array(); | ||
24 | foreach ($symfonyRequirements->getRequirements() as $req) { | ||
25 | /** @var $req Requirement */ | ||
26 | if ($helpText = get_error_message($req, $lineSize)) { | ||
27 | echo_style('red', 'E'); | ||
28 | $messages['error'][] = $helpText; | ||
29 | } else { | ||
30 | echo_style('green', '.'); | ||
31 | } | ||
32 | } | ||
33 | |||
34 | $checkPassed = empty($messages['error']); | ||
35 | |||
36 | foreach ($symfonyRequirements->getRecommendations() as $req) { | ||
37 | if ($helpText = get_error_message($req, $lineSize)) { | ||
38 | echo_style('yellow', 'W'); | ||
39 | $messages['warning'][] = $helpText; | ||
40 | } else { | ||
41 | echo_style('green', '.'); | ||
42 | } | ||
43 | } | ||
44 | |||
45 | if ($checkPassed) { | ||
46 | echo_block('success', 'OK', 'Your system is ready to run Symfony2 projects'); | ||
47 | } else { | ||
48 | echo_block('error', 'ERROR', 'Your system is not ready to run Symfony2 projects'); | ||
49 | |||
50 | echo_title('Fix the following mandatory requirements', 'red'); | ||
51 | |||
52 | foreach ($messages['error'] as $helpText) { | ||
53 | echo ' * '.$helpText.PHP_EOL; | ||
54 | } | ||
55 | } | ||
56 | |||
57 | if (!empty($messages['warning'])) { | ||
58 | echo_title('Optional recommendations to improve your setup', 'yellow'); | ||
59 | |||
60 | foreach ($messages['warning'] as $helpText) { | ||
61 | echo ' * '.$helpText.PHP_EOL; | ||
62 | } | ||
63 | } | ||
64 | |||
65 | echo PHP_EOL; | ||
66 | echo_style('title', 'Note'); | ||
67 | echo ' The command console could use a different php.ini file'.PHP_EOL; | ||
68 | echo_style('title', '~~~~'); | ||
69 | echo ' than the one used with your web server. To be on the'.PHP_EOL; | ||
70 | echo ' safe side, please check the requirements from your web'.PHP_EOL; | ||
71 | echo ' server using the '; | ||
72 | echo_style('yellow', 'web/config.php'); | ||
73 | echo ' script.'.PHP_EOL; | ||
74 | echo PHP_EOL; | ||
75 | |||
76 | exit($checkPassed ? 0 : 1); | ||
77 | |||
78 | function get_error_message(Requirement $requirement, $lineSize) | ||
79 | { | ||
80 | if ($requirement->isFulfilled()) { | ||
81 | return; | ||
82 | } | ||
83 | |||
84 | $errorMessage = wordwrap($requirement->getTestMessage(), $lineSize - 3, PHP_EOL.' ').PHP_EOL; | ||
85 | $errorMessage .= ' > '.wordwrap($requirement->getHelpText(), $lineSize - 5, PHP_EOL.' > ').PHP_EOL; | ||
86 | |||
87 | return $errorMessage; | ||
88 | } | ||
89 | |||
90 | function echo_title($title, $style = null) | ||
91 | { | ||
92 | $style = $style ?: 'title'; | ||
93 | |||
94 | echo PHP_EOL; | ||
95 | echo_style($style, $title.PHP_EOL); | ||
96 | echo_style($style, str_repeat('~', strlen($title)).PHP_EOL); | ||
97 | echo PHP_EOL; | ||
98 | } | ||
99 | |||
100 | function echo_style($style, $message) | ||
101 | { | ||
102 | // ANSI color codes | ||
103 | $styles = array( | ||
104 | 'reset' => "\033[0m", | ||
105 | 'red' => "\033[31m", | ||
106 | 'green' => "\033[32m", | ||
107 | 'yellow' => "\033[33m", | ||
108 | 'error' => "\033[37;41m", | ||
109 | 'success' => "\033[37;42m", | ||
110 | 'title' => "\033[34m", | ||
111 | ); | ||
112 | $supports = has_color_support(); | ||
113 | |||
114 | echo($supports ? $styles[$style] : '').$message.($supports ? $styles['reset'] : ''); | ||
115 | } | ||
116 | |||
117 | function echo_block($style, $title, $message) | ||
118 | { | ||
119 | $message = ' '.trim($message).' '; | ||
120 | $width = strlen($message); | ||
121 | |||
122 | echo PHP_EOL.PHP_EOL; | ||
123 | |||
124 | echo_style($style, str_repeat(' ', $width).PHP_EOL); | ||
125 | echo_style($style, str_pad(' ['.$title.']', $width, ' ', STR_PAD_RIGHT).PHP_EOL); | ||
126 | echo_style($style, str_pad($message, $width, ' ', STR_PAD_RIGHT).PHP_EOL); | ||
127 | echo_style($style, str_repeat(' ', $width).PHP_EOL); | ||
128 | } | ||
129 | |||
130 | function has_color_support() | ||
131 | { | ||
132 | static $support; | ||
133 | |||
134 | if (null === $support) { | ||
135 | if (DIRECTORY_SEPARATOR == '\\') { | ||
136 | $support = false !== getenv('ANSICON') || 'ON' === getenv('ConEmuANSI'); | ||
137 | } else { | ||
138 | $support = function_exists('posix_isatty') && @posix_isatty(STDOUT); | ||
139 | } | ||
140 | } | ||
141 | |||
142 | return $support; | ||
143 | } | ||