Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

General Questions

General questions about getting started with SilverStripe that don't fit in any of the categories above.

Moderators: martimiz, Sean, biapar, Willr, Ingo, swaiba, simon_w

SS3 on lighttpd - /dev/xxx returns blank screen


Go to End
Reply

10 Posts   2931 Views

Avatar
martimiz

16 June 2012 at 1:32am (Last edited: 16 June 2012 1:50am), Forum Moderator, 1091 Posts

Hi everyone

I'm having a problem with ss3 on lighttpd: the frontend and cms seem to work fine, but all urls starting with /dev/ return blank screens (no errors)

I'm using the default settings here http://doc.silverstripe.org/sapphire/en/trunk/installation/lighttpd, as they always worked on 2.4...

The weird thing is that the proper functions are called: DevelopmentAdmin->Index() on /dev/, TaskRunner->Index() on /dev/tasks/ For instance: if I add an exit(); to the end of the Taskrunner->index() function, all the tasks are now printed to the screen just fine. But after that something happens that results in a blank...

I do not have any problems with Apache. Of course it could be due to some other settings I have made in Lighttpd, but I really don't know where to look any more...

[EDIT - even trimmed lighttpd.conf to the bare minimum at the temp. expense of all other sites...]

Can anyone reproduce this?

Thanks, Martine

Avatar
Fuzz10

18 June 2012 at 10:46pm Community Member, 787 Posts

Hmmm. Interesting, I have the same problem on a live server with Apache. Did not have time to thoroughly look, will let you know if I find a fix.

Avatar
martimiz

19 June 2012 at 1:12am Forum Moderator, 1091 Posts

That's strange. Are you referring to 3.0 as well? So maybe it isn't a lighttpd thing at all. Anyone else have this?

It looks like some redirect happens after the tekst is displayed - for instance /dev/tasks/ should only display the list of tasks and do nothing else after that. But if I remove the exit() from the Taskrunner->index() function, obviously it does do something else (turn everything to white) :-(

And there are no errors... And firebug doesn't help...

Avatar
martimiz

19 June 2012 at 5:38am (Last edited: 19 June 2012 5:41am), Forum Moderator, 1091 Posts

So far:
In my case the culprit was output buffering, preventing headers from being sent automatically with the generated output. So SilverStripe tries to create the headers 'manually' in SS_HTTPResponse->output(). Unfortunately the HTTPRespons body is always empty, so the Content-Length header is set to 0. That's the blank screen...

One way of getting the headers to be sent automatically seems to be flushing the output buffer.

In SS_HTTPResponse->output() around line 224:

} else {
   ob_flush(); <-- ADD
   if(!headers_sent()) {
      header($_SERVER['SERVER_PROTOCOL'] . " $this->statusCode " . $this->getStatusDescription());
      foreach($this->headers as $header => $value) {
         header("$header: $value", true, $this->statusCode);
      }
   }
   ...

This works but I've no idea yet about the impact on other code...

Another option would be to set output_buffering = off in php.ini

But obviously the respons body shouldn't be empty in the first place, and I don't quite know how that should be accomplished just yet, so this is not really a patch. I'll try and find a better solution to create one.

Avatar
Fuzz10

21 June 2012 at 9:46pm Community Member, 787 Posts

Applied your fix to my production environment , did the trick as well.

And yes, I'm referring to SS3 on Apache. Ssssttrrraaaange, no ?

Should we raise a ticket about this ?

Avatar
martimiz

26 June 2012 at 2:30am (Last edited: 26 June 2012 2:31am), Forum Moderator, 1091 Posts

So I created a ticket [url=http://open.silverstripe.org/ticket/7564]here[/url] - and then found out after I submitted it that the ob_flush() solution had issues after all :-(

I think this temporary(!) fix might work better, but it definitely isn't a patch and I wisely kept it from the ticket this time. It removes the Content-Length header if it is 0. Tested in ff, safari, chrome on mac:

HTTPResponse.php line 227 - replace:

foreach($this->headers as $header => $value) {
   header("$header: $value", true, $this->statusCode);
}


by

foreach($this->headers as $header => $value) {
   if ($header != 'Content-Length' || $value != '0') {
      header("$header: $value", true, $this->statusCode);
   }
}

Avatar
theorytank

6 July 2012 at 10:18am Community Member, 8 Posts

Not a solution, but I found you can force the output by including the showqueries parameter however there's a lot of output to sort through after.

/dev/build?flush=all&showqueries

For now I'm doing my /dev/build from the command line where it seems to work fine.

framework/sake dev/build flush=all

Avatar
richard-ward

12 July 2012 at 1:28am Community Member, 31 Posts

Just for extra info: I cannot get any output from dev/build either, but have found that adding the parameter debug=1 forces some output - and it may be less extra output than showqueries (which doesn't force output for me).

Go to Top