0

I updated to PHP 7 at my localhost, but since then anytime i want to redirect from one page to another in my nette application, I'll receive error: 500 - Internal Server Error.

I was searching through stack overflow and found a problem that is quite similar to mine here: How to solve "mod_fastcgi.c.2566 unexpected end-of-file (perhaps the fastcgi process died)" when calling .php that takes long time to execute? . However, I don't work with large files and my connection dies immediately.

My /var/log/lighttpd/error.log

2016-03-06 10:54:11: (server.c.1456) [note] graceful shutdown started 
2016-03-06 10:54:11: (server.c.1572) server stopped by UID = 0 PID = 351 
2016-03-06 11:03:48: (log.c.194) server started 
2016-03-06 11:07:17: (mod_fastcgi.c.2390) unexpected end-of-file (perhaps the fastcgi process died): pid: 21725 socket: unix:/run/lighttpd/php-fastcgi.sock-3 
2016-03-06 11:07:17: (mod_fastcgi.c.3171) response not received, request sent: 1029 on socket: unix:/run/lighttpd/php-fastcgi.sock-3 for /~rost/lp/web/www/index.php?, closing connection 
2016-03-06 11:09:01: (mod_fastcgi.c.2390) unexpected end-of-file (perhaps the fastcgi process died): pid: 21725 socket: unix:/run/lighttpd/php-fastcgi.sock-3 
2016-03-06 11:09:01: (mod_fastcgi.c.3171) response not received, request sent: 1061 on socket: unix:/run/lighttpd/php-fastcgi.sock-3 for /~rost/lp/web/www/index.php?action=list&presenter=Campaign, closing connection 
2016-03-06 11:09:06: (mod_fastcgi.c.2390) unexpected end-of-file (perhaps the fastcgi process died): pid: 21725 socket: unix:/run/lighttpd/php-fastcgi.sock-3 
2016-03-06 11:09:06: (mod_fastcgi.c.3171) response not received, request sent: 942 on socket: unix:/run/lighttpd/php-fastcgi.sock-3 for /~rost/lp/web/www/index.php?, closing connection 
2016-03-06 11:09:14: (mod_fastcgi.c.2390) unexpected end-of-file (perhaps the fastcgi process died): pid: 21725 socket: unix:/run/lighttpd/php-fastcgi.sock-3 
2016-03-06 11:09:14: (mod_fastcgi.c.3171) response not received, request sent: 1051 on socket: unix:/run/lighttpd/php-fastcgi.sock-3 for /~rost/lp/web/www/index.php?action=out&presenter=Sign, closing connection 

My /etc/lighttpd/lighttpd.conf

server.modules       = ( "mod_userdir", 
                         "mod_access", 
                         "mod_accesslog", 
                         "mod_fastcgi", 
                         "mod_rewrite", 
                         "mod_auth" 
                       )
server.port          = 80
server.username      = "http"
server.groupname     = "http"
server.document-root = "/srv/http"
server.errorlog      = "/var/log/lighttpd/error.log"
dir-listing.activate = "enable"
index-file.names     = ( "index.html" )

# Rewrite URL without dots to index.php
#url.rewrite-once     = ( "/^[^.?]*$/" => "/index.php" )
mimetype.assign      = ( ".html" => "text/html", 
                         ".htm" => "text/html", 
                         ".txt" => "text/plain", 
                         ".properties" => "text/plain", 
                         ".jpg" => "image/jpeg", 
                         ".png" => "image/png",
                         ".svg" => "image/svg+xml", 
                         ".gif" => "image/gif",  
                         ".css" => "text/css", 
                         ".js" => "application/x-javascript",
                         "" => "application/octet-stream" 
                       )
userdir.path         = "public_html"

# Fast CGI
include "conf.d/fastcgi.conf"

My /etc/lighttpd/conf.d/fastcgi.conf

server.modules += ( "mod_fastcgi" )

#server.indexfiles += ( "index.php" ) #this is deprecated
index-file.names += ( "index.php" )

fastcgi.server = (
    ".php" => (
        "localhost" => ( 
        "bin-path" => "/usr/bin/php-cgi",
        "socket" => "/run/lighttpd/php-fastcgi.sock",
        "max-procs" => 4, # default value
        "bin-environment" => (
          "PHP_FCGI_CHILDREN" => "1", # default value
        ),
        "broken-scriptfilename" => "enable"
      ))
 )

Variables from /etc/php/php.ini

cat /etc/php/php.ini | grep max_execution_time
max_execution_time = 30

cat /etc/php/php.ini | grep default_socket_timeout
default_socket_timeout = 60

Update 7.3.2016

I switched from php fast cgi to php-fpm and interesting thing is that problem prevails, but is less often. Sometimes the redirect jump to 500 and sometimes not. And error log again:

2016-03-07 22:23:32: (mod_fastcgi.c.2390) unexpected end-of-file (perhaps the fastcgi process died): pid: 0 socket: unix:/run/php-fpm/php-fpm.sock 
2016-03-07 22:23:32: (mod_fastcgi.c.3171) response not received, request sent: 1084 on socket: unix:/run/php-fpm/php-fpm.sock for /~rost/lp/web/www/index.php?action=out&presenter=Sign, closing connection 
Community
  • 1
  • 1
Michal
  • 1,955
  • 5
  • 33
  • 56

2 Answers2

0

Also, try to delete Nette cache first.

Tomáš Jacík
  • 645
  • 4
  • 12
0

I've finally found a solution. It is probably Nette / Cassandra related problem.

The error was appearing because of object Nette\Security\Identity, after I assigned user data into it:

public function authenticate(array $credentials) {

  // Retrieve username and password
  list($email, $passwd) = $credentials;

  // Select user with given email from database
  $usr = $this->daoManager->getDao("AppUser")->loadByEmail($email);
  if ($usr == null || count($usr) == 0) {
    $msg = 'The email is incorrect.';
    $arg = self::IDENTITY_NOT_FOUND;
    throw new Nette\Security\AuthenticationException($msg, $arg);
  }

  // TODO Check user password
  // TODO Check verification      

  // Create identity - THE PROBLEM WAS HERE
  return new Identity($email, $usr['role'], $usr);
}

It was caused by value 'registered' in $usr array which was of type Cassandra\Timestamp. Since then almost every redirect crashed with above mentioned error.

Following code fixed the issue:

return new Identity($email, $usr['role'], $this->fixUserArray($usr));

Where:

protected function fixUserArray(array $user) {
  $result = array();
  foreach ($user as $key => $val) {
    if ($key === "registered") {
      $result[$key] = $val->time();
    } else {
      $result[$key] = $val;
    }
  } 
  return $result;
}
Michal
  • 1,955
  • 5
  • 33
  • 56