I'm having trouble installing and updating modules from the UI. When I update a module using the UI, I get the start of a progress bar and the message that download is commencing, but then it simply freezes.
When I want to install a new module (using the UI from Update Manager) I simply get a WSOD.

Admittedly, my website exists for a few years now, but having updated all modules (using FTP) and setting PHP to version 5.6.6 the problem still exists.

My provider can't give me any more hints, so I hope someone here has any lead on how to get this fixed. Your help will be highly appreciated!

Comments

VM’s picture

Have you tried getting an error to print to the screen for the WSOD? : https://www.drupal.org/node/158043
Have you checked your Drupal logs for relevant error messages?
Have you checked apache logs for relevant error messages?

mfgr’s picture

No error messages in my Drupal logs, but after enabling the error print, this is what I got:

Fatal error: Class 'ArchiverTar' not found in /public_html/includes/common.inc on line 8281

(or 'ArchiverZip' if I try to install a .zip-file.)

I've no idea what this means or how to fix it...

VM’s picture

That indicates that your PHP instance no longer has the necessary module/component enabled to extract archives. Speak to your host or review your environment.

mfgr’s picture

My host is pretty unhelpful unfortunately, he keeps referring to the Drupal community for help.
The common.inc contains the following code:

function archiver_get_archiver($file) {
  // Archivers can only work on local paths
  $filepath = drupal_realpath($file);
  if (!is_file($filepath)) {
    throw new Exception(t('Archivers can only operate on local files: %file not supported', array('%file' => $file)));
  }
  $archiver_info = archiver_get_info();

  foreach ($archiver_info as $implementation) {
    foreach ($implementation['extensions'] as $extension) {
      // Because extensions may be multi-part, such as .tar.gz,
      // we cannot use simpler approaches like substr() or pathinfo().
      // This method isn't quite as clean but gets the job done.
      // Also note that the file may not yet exist, so we cannot rely
      // on fileinfo() or other disk-level utilities.
      if (strrpos($filepath, '.' . $extension) === strlen($filepath) - strlen('.' . $extension)) {
        return new $implementation['class']($filepath);
      }
    }
  }
}

...and the error message indicates that it goes wrong on that last line

        return new $implementation['class']($filepath);

My provider wants me to give them the exact hosting setting that causes the problem, and I think it's because the archiver has gone missing - even though I have indicated through their UI that I want it to be 'on'. Or does Drupal set the filepath for the archiver somewhere? Because I have migrated the database from one host to another last year, it isn't entirely impossible that something has been changed on the server environment but not in the database.
Is this making any sense at all? Because I don't know what I am writing about anyway. :)

VM’s picture

If your host doesn't know what the tar archiver component is or how to look it up on google, you should boldly fire the current host and find a new one. The path to the archiver is not stored.

https://pear.php.net/package/Archive_Tar

PHP version may need to be rolled back to a version where the PHP component may still work.