@@ -92,6 +92,11 @@ protected function execute(InputInterface $input, OutputInterface $output)
92
92
93
93
$ output ->writeln (sprintf ("Server running on <info>%s</info> \n" , $ input ->getArgument ('address ' )));
94
94
95
+ if (defined ('HHVM_VERSION ' )) {
96
+ $ this ->executeWithHHVM ($ input , $ output , $ env );
97
+ return ;
98
+ }
99
+
95
100
$ builder = new ProcessBuilder (array (PHP_BINARY , '-S ' , $ input ->getArgument ('address ' ), $ router ));
96
101
$ builder ->setWorkingDirectory ($ input ->getOption ('docroot ' ));
97
102
$ builder ->setTimeout (null );
@@ -101,4 +106,65 @@ protected function execute(InputInterface $input, OutputInterface $output)
101
106
}
102
107
});
103
108
}
109
+
110
+ protected function executeWithHHVM (InputInterface $ input , OutputInterface $ output , $ env )
111
+ {
112
+ list ($ ip , $ port ) = explode (': ' , $ input ->getArgument ('address ' ));
113
+ $ output ->writeln (sprintf ("Server(with HHVM) running on <info> $ ip: $ port</info> \n" , $ ip , $ port ));
114
+ $ docroot = realpath ($ input ->getOption ('docroot ' ));
115
+ $ bootstrap = ('prod ' === $ env ? 'app.php ' : 'app_dev.php ' );
116
+ $ config = <<<EOF
117
+ Server {
118
+ IP = $ ip
119
+ Port = $ port
120
+ SourceRoot = $ docroot
121
+ RequestTimeoutSeconds = -1
122
+ RequestMemoryMaxBytes = -1
123
+ }
124
+
125
+ VirtualHost {
126
+ * {
127
+ Pattern = .*
128
+ RewriteRules {
129
+ * {
130
+ pattern = .?
131
+
132
+ # app bootstrap
133
+ to = $ bootstrap
134
+
135
+ # append the original query string
136
+ qsa = true
137
+ }
138
+ }
139
+ }
140
+ }
141
+
142
+ StaticFile {
143
+ Extensions {
144
+ css = text/css
145
+ gif = image/gif
146
+ html = text/html
147
+ jpe = image/jpeg
148
+ jpeg = image/jpeg
149
+ jpg = image/jpeg
150
+ png = image/png
151
+ tif = image/tiff
152
+ tiff = image/tiff
153
+ txt = text/plain
154
+ php = text/plain
155
+ }
156
+ }
157
+ EOF ;
158
+ $ tmpfile = $ this ->getContainer ()->get ('kernel ' )->getCacheDir ().DIRECTORY_SEPARATOR .'hhvm-server- ' .md5 ($ config ).'.hdf ' ;
159
+ file_put_contents ($ tmpfile , $ config );
160
+ $ builder = new ProcessBuilder (array (PHP_BINARY , '-ms ' , "-c $ tmpfile " ));
161
+ $ builder ->setWorkingDirectory ($ docroot );
162
+ $ builder ->setTimeout (null );
163
+ $ builder->getProcess ()->run (function ($ type , $ buffer ) use ($ output ) {
164
+ if (OutputInterface::VERBOSITY_VERBOSE <= $ output ->getVerbosity ()) {
165
+ $ output ->write ($ buffer );
166
+ }
167
+ });
168
+ }
169
+
104
170
}
0 commit comments