PhpExcel: фатальная ошибка: класс 'PHPExcel_Shared_ZipStreamWrapper' - PullRequest
2 голосов
/ 31 января 2012

Я столкнулся с этой ошибкой

Неустранимая ошибка: класс 'PHPExcel_Shared_ZipStreamWrapper' не найден в \ VBOXSVR \ ACACIASOFT \ apc \ spreadsheet \ lib \ phpexcel \ PHPExcel \ Autoloader.php в строке 29

Моя текущая настройка: Хост-машина: Windows 7 : это где я проверяю свое решение от SVN

Virtual Box Guest Machine: : Windows XP : где мой apache, php, mysql установлен. : Я также добавил общий каталог в свой виртуальный ящик, чтобы использовать его в качестве местоположения documentroot

Моя дилемма началась, когда я изменил documentroot. это вызывает ошибку на моих модулях phpexcel, но когда я вернул обратно documentroot c: / program files / apache .... скопируйте проект в этот каталог. это не принесет никакой ошибки.

Ответы [ 5 ]

14 голосов
/ 20 ноября 2012

Та же проблема мучила меня до смерти целый день. Я обнаружил, что если у вас есть собственная функция автозагрузчика, ранее зарегистрированная в spl, то вам придется вернуть false в случае, если ваш автозагрузчик не сможет загрузить требуемый класс, например:

spl_autoload_register('my_autoload');
function my_autoload($className)
{
    if(file_exists(CLASS_PREFIX.".$className.php"))
    {
        require_once(CLASS_PREFIX.".$className.php");
    }
    else
    {
        return false;
    }
}
4 голосов
/ 31 января 2012

Похоже, вы работаете с какой-то другой библиотекой со своим собственным автозагрузчиком, который мешает автозагрузчику PHPExcel. Последний код SVN был изменен для предотвращения этой проблемы.

В самом скрипте /Classes/PHPExcel/Autoloader.php измените:

public static function Register() {
    return spl_autoload_register(array('PHPExcel_Autoloader', 'Load'));
}   //  function Register()

до

public static function Register() {
    if (function_exists('__autoload')) {
        //    Register any existing autoloader function with SPL, so we don't get any clashes
        spl_autoload_register('__autoload');
    }
    //    Register ourselves with SPL
    return spl_autoload_register(array('PHPExcel_Autoloader', 'Load'));
}    //    function Register()
2 голосов
/ 27 апреля 2013

Если кто-то окажется в Linux, эта ошибка может быть вызвана неправильными правами на использование.

У меня была такая же проблема, но я изменил владельца папки «Shared» и установил ее как пользователя «www-data», который является пользователем apache в моей системе (chown www-data: www-data Общий). Исправлена ​​ошибка «Class 'PHPExcel_Shared_ZipStreamWrapper' not found».

Тем не менее, это не полное исправление. Вам действительно нужно убедиться, что папки и файлы в папке PHPExcel назначены правильному пользователю, и что они имеют правильные права. Вот как вы это делаете:

Вам необходимо назначить папку PHPExcel и каждый элемент в ней пользователю www-данных, чтобы Apache мог получить доступ к файлам. Убедитесь, что вы находитесь на один уровень ниже вашей папки PHPExcel, а затем выполните эту команду:

sudo chown -R www-data:www-data PHPExcel

И это все. Apache должен иметь доступ ко всем файлам, и ошибка должна быть устранена.

0 голосов
/ 25 января 2013

Хорошо, я знаю, что это уже год назад, но поскольку эта проблема возникла в моей настройке (виртуальная машина под управлением Windows 7 Professional в сети Active Directory с явными правами пользователя) всего несколько дней назад я хотел поделиться своим решением, может быть, это поможет другим сэкономить время:

Я разобрался с 2 проблемами (только на WINDOWS HOSTS!):

  • константа PHPEXCEL_ROOT определена с неверными разделителями каталогов

МОЕ РЕШЕНИЕ: измените код php для использования константы DIRECTORY_SEPARATOR в определениях в файле: PHPExcel.php (около строки 32), например:

//OLD: define('PHPEXCEL_ROOT', dirname(__FILE__) . '/');
define('PHPEXCEL_ROOT', dirname(__FILE__) . DIRECTORY_SEPARATOR);

есть еще 2 файла для изменения: «IOFactory.php» и «Settings.php» (строка 34) на:

//OLD: define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../');
define('PHPEXCEL_ROOT', dirname(__FILE__) . DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR);
  • PHP-функция «is_readable» не всегда возвращает правильные результаты на хостах Windows, в моем случае файл был читабельным, но результат был false .

МОЙ РЕШЕНИЕ: Чтобы обойти эту ошибку, вы можете убрать проверку «is_readable» в файле «autoload.php», изменив строку 77 на:

// if ((file_exists($pClassFilePath) === FALSE) || (is_readable($pClassFilePath) === FALSE)) {
if (file_exists($pClassFilePath) === FALSE) {
0 голосов
/ 08 февраля 2012

Вы должны включить на расширении php zip dll

...