Visualizzazione risultati 1 fino 6 di 6

Discussione: PHP Problema script ma in locale funziona

  1. #1
    Guest

    Predefinito PHP Problema script ma in locale funziona

    Salve ragazzi,
    utilizzo da poco altervista ma lo trovo un servizio davvero incredibile.
    Stavo provando certi script in locale attraverso xampp (l'apertura e la lettura di file Excel).
    Questi script in locale funzionano perfettamente, tuttavia uploadando su altervista e provandoli non mi funziona.

    L'errore è:
    Codice PHP:
    Fatal error: Class 'PHPExcel_Shared_ZipStreamWrapper' not found in /membri/dickymoser/classes/PHPExcel/Autoloader.php on line 31
    Per sicurezza comunque ho messo i file (script e cartella che contiene file utilizzati dallo script) nella cartella root.

    Ho spulciato un po' su internet un paio di ore ieri sera ma non sono riuscito a risolvere.
    Se ho capito bene il problema riguarda le inclusioni ed i percorsi.

    L'errore dovrebbe essere ricondotto a questo:
    Codice PHP:
    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()

    Per ovviare a quest'errore nel mio script ho provato ad includere il file che manca, ma poi mi compare l'errore con un'altra classe.
    Ho anche incluso l'altra classe e ripetuto questa procedura per svariate volte ma poi mi sono stancato.
    E' come se non caricasse i file l'autoloader (per via del path?!?).

    Sapreste aiutarmi?
    Vi ringrazio!

    Lo script è:
    Codice PHP:
    <?php

    error_reporting
    (E_ALL ^ E_NOTICE);

    // Stesso effetto di error_reporting(E_ALL);
    ini_set('display_errors', 'On');


    include
    'classes/PHPExcel/IOFactory.php';



    $inputFileName = 'calciatori.xls'; // SIA FILE .XLS CHE .XSLX

    try {
    $objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
    } catch(
    Exception $e) {
    die(
    'Error loading file "'.pathinfo($inputFileName,PATHINFO_BASENAME).'": '.$e->getMessage());
    }


    $allDataInSheet = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
    $arrayCount = count($allDataInSheet); // Here get total count of row in that Excel sheet

    for($i=1;$i<=$arrayCount;$i++){
    $campo1 = $allDataInSheet[$i]["A"];
    $campo2 = $allDataInSheet[$i]["B"];
    $campo3 = $allDataInSheet[$i]["C"];

    echo
    $campo1 . "<br>";
    echo
    $campo2 . "<br>";
    echo
    $campo3 . "<br>";
    }
    ?>


    EDIT:
    Mi funziona andando ad includere nello script le classi che risultano "mancanti"
    Codice PHP:
    include '/membri/dickymoser/classes/PHPExcel/shared/Date.php';
    include
    '/membri/dickymoser/classes/PHPExcel/shared/OLE.php';
    include
    '/membri/dickymoser/classes/PHPExcel/shared/CodePage.php';
    include
    '/membri/dickymoser/classes/PHPExcel/shared/OLERead.php';
    include
    '/membri/dickymoser/classes/PHPExcel/shared/String.php';
    include
    '/membri/dickymoser/classes/PHPExcel/shared/ZipStreamWrapper.php';
    include
    '/membri/dickymoser/classes/PHPExcel/IOFactory.php';
    Però la vedo piuttosto rudimentale come soluzione..
    Ultima modifica di dickymoser : 03-09-2016 alle ore 13.56.46

  2. #2
    Guest

    Predefinito

    Nello script che hai postato, questo include
    Codice PHP:
    include 'classes/PHPExcel/IOFactory.php';
    funziona correttamente. Se vai direttamente a http://dickymoser.altervista.org/cla.../IOFactory.php ti da lo stesso errore, e quindi il problema è in quella pagina (IOFactory.php). Dall'errore che compare mi sembra che quella pagina includa a sua volta Autoloader.php e che questa usi una classe (PHPExcel_Shared_ZipStreamWrapper) che non esiste. Controlla magari che i percorsi relativi siano corretti in quella pagina.

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da descartesadventures Visualizza messaggio
    Nello script che hai postato, questo include
    Codice PHP:
    include 'classes/PHPExcel/IOFactory.php';
    funziona correttamente. Se vai direttamente a http://dickymoser.altervista.org/cla.../IOFactory.php ti da lo stesso errore, e quindi il problema è in quella pagina (IOFactory.php). Dall'errore che compare mi sembra che quella pagina includa a sua volta Autoloader.php e che questa usi una classe (PHPExcel_Shared_ZipStreamWrapper) che non esiste. Controlla magari che i percorsi relativi siano corretti in quella pagina.
    Ciao ti ringrazio per la risposta!
    In effetti in quella pagina se ho capito bene si fa riferimento ad esempio a
    'PHPExcel/Autoloader.php' quando in realtà dovrebbe essere inclusa la root del mio account.
    Codice PHP:
    <?php
    /**
    * PHPExcel
    *
    * Copyright (c) 2006 - 2012 PHPExcel
    *
    * This library is free software; you can redistribute it and/or
    * modify it under the terms of the GNU Lesser General Public
    * License as published by the Free Software Foundation; either
    * version 2.1 of the License, or (at your option) any later version.
    *
    * This library is distributed in the hope that it will be useful,
    * but WITHOUT ANY WARRANTY; without even the implied warranty of
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    * Lesser General Public License for more details.
    *
    * You should have received a copy of the GNU Lesser General Public
    * License along with this library; if not, write to the Free Software
    * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    *
    * @category PHPExcel
    * @package PHPExcel
    * @copyright Copyright (c) 2006 - 2012 PHPExcel (http://www.codeplex.com/PHPExcel)
    * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
    * @version 1.7.8, 2012-10-12
    */


    /** PHPExcel root directory */
    if (!defined('PHPEXCEL_ROOT')) {
    /**
    * @ignore
    */
    ');
    require(PHPEXCEL_ROOT . '
    PHPExcel/Autoloader.php');
    }

    /**
    * PHPExcel_IOFactory
    *
    * @category PHPExcel
    * @package PHPExcel
    * @copyright Copyright (c) 2006 - 2012 PHPExcel (http://www.codeplex.com/PHPExcel)
    */
    class PHPExcel_IOFactory
    {
    /**
    * Search locations
    *
    * @var array
    * @access private
    * @static
    */
    private static $_searchLocations = array(
    array( '
    type' => 'IWriter', 'path' => 'PHPExcel/Writer/{0}.php', 'class' => 'PHPExcel_Writer_{0}' ),
    array( '
    type' => 'IReader', 'path' => 'PHPExcel/Reader/{0}.php', 'class' => 'PHPExcel_Reader_{0}' )
    );

    /**
    * Autoresolve classes
    *
    * @var array
    * @access private
    * @static
    */
    private static $_autoResolveClasses = array(
    '
    Excel2007',
    '
    Excel5',
    '
    Excel2003XML',
    '
    OOCalc',
    '
    SYLK',
    '
    Gnumeric',
    '
    HTML',
    '
    CSV',
    );

    /**
    * Private constructor for PHPExcel_IOFactory
    */
    private function __construct() { }

    /**
    * Get search locations
    *
    * @static
    * @access public
    * @return array
    */
    public static function getSearchLocations() {
    return self::$_searchLocations;
    } // function getSearchLocations()

    /**
    * Set search locations
    *
    * @static
    * @access public
    * @param array $value
    * @throws Exception
    */
    public static function setSearchLocations($value) {
    if (is_array($value)) {
    self::$_searchLocations = $value;
    } else {
    throw new Exception('
    Invalid parameter passed.');
    }
    } // function setSearchLocations()

    /**
    * Add search location
    *
    * @static
    * @access public
    * @param string $type Example: IWriter
    * @param string $location Example: PHPExcel/Writer/{0}.php
    * @param string $classname Example: PHPExcel_Writer_{0}
    */
    public static function addSearchLocation($type = '', $location = '', $classname = '') {
    self::$_searchLocations[] = array( '
    type' => $type, 'path' => $location, 'class' => $classname );
    } // function addSearchLocation()

    /**
    * Create PHPExcel_Writer_IWriter
    *
    * @static
    * @access public
    * @param PHPExcel $phpExcel
    * @param string $writerType Example: Excel2007
    * @return PHPExcel_Writer_IWriter
    * @throws Exception
    */
    public static function createWriter(PHPExcel $phpExcel, $writerType = '') {
    // Search type
    $searchType = '
    IWriter';

    // Include class
    foreach (self::$_searchLocations as $searchLocation) {
    if ($searchLocation['
    type'] == $searchType) {
    $className = str_replace('
    {0}', $writerType, $searchLocation['class']);

    $instance = new $className($phpExcel);
    if ($instance !== NULL) {
    return $instance;
    }
    }
    }

    // Nothing found...
    throw new Exception("No $searchType found for type $writerType");
    } // function createWriter()

    /**
    * Create PHPExcel_Reader_IReader
    *
    * @static
    * @access public
    * @param string $readerType Example: Excel2007
    * @return PHPExcel_Reader_IReader
    * @throws Exception
    */
    public static function createReader($readerType = '') {
    // Search type
    $searchType = '
    IReader';

    // Include class
    foreach (self::$_searchLocations as $searchLocation) {
    if ($searchLocation['
    type'] == $searchType) {
    $className = str_replace('
    {0}', $readerType, $searchLocation['class']);

    $instance = new $className();
    if ($instance !== NULL) {
    return $instance;
    }
    }
    }

    // Nothing found...
    throw new Exception("No $searchType found for type $readerType");
    } // function createReader()

    /**
    * Loads PHPExcel from file using automatic PHPExcel_Reader_IReader resolution
    *
    * @static
    * @access public
    * @param string $pFileName The name of the spreadsheet file
    * @return PHPExcel
    * @throws Exception
    */
    public static function load($pFilename) {
    $reader = self::createReaderForFile($pFilename);
    return $reader->load($pFilename);
    } // function load()

    /**
    * Identify file type using automatic PHPExcel_Reader_IReader resolution
    *
    * @static
    * @access public
    * @param string $pFileName The name of the spreadsheet file to identify
    * @return string
    * @throws Exception
    */
    public static function identify($pFilename) {
    $reader = self::createReaderForFile($pFilename);
    $className = get_class($reader);
    $classType = explode('
    _',$className);
    unset($reader);
    return array_pop($classType);
    } // function identify()

    /**
    * Create PHPExcel_Reader_IReader for file using automatic PHPExcel_Reader_IReader resolution
    *
    * @static
    * @access public
    * @param string $pFileName The name of the spreadsheet file
    * @return PHPExcel_Reader_IReader
    * @throws Exception
    */
    public static function createReaderForFile($pFilename) {

    // First, lucky guess by inspecting file extension
    $pathinfo = pathinfo($pFilename);

    $extensionType = NULL;
    if (isset($pathinfo['
    extension'])) {
    switch (strtolower($pathinfo['
    extension'])) {
    case '
    xlsx': // Excel (OfficeOpenXML) Spreadsheet
    case '
    xlsm': // Excel (OfficeOpenXML) Macro Spreadsheet (macros will be discarded)
    case '
    xltx': // Excel (OfficeOpenXML) Template
    case '
    xltm': // Excel (OfficeOpenXML) Macro Template (macros will be discarded)
    $extensionType = '
    Excel2007';
    break;
    case '
    xls': // Excel (BIFF) Spreadsheet
    case '
    xlt': // Excel (BIFF) Template
    $extensionType = '
    Excel5';
    break;
    case '
    ods': // Open/Libre Offic Calc
    case '
    ots': // Open/Libre Offic Calc Template
    $extensionType = '
    OOCalc';
    break;
    case '
    slk':
    $extensionType = '
    SYLK';
    break;
    case '
    xml': // Excel 2003 SpreadSheetML
    $extensionType = '
    Excel2003XML';
    break;
    case '
    gnumeric':
    $extensionType = '
    Gnumeric';
    break;
    case '
    htm':
    case '
    html':
    $extensionType = '
    HTML';
    break;
    case '
    csv':
    // Do nothing
    // We must not try to use CSV reader since it loads
    // all files including Excel files etc.
    break;
    default:
    break;
    }

    if ($extensionType !== NULL) {
    $reader = self::createReader($extensionType);
    // Let'
    s see if we are lucky
    if (isset($reader) && $reader->canRead($pFilename)) {
    return
    $reader;
    }
    }
    }

    // If we reach here then "lucky guess" didn't give any result
    // Try walking through all the options in self::$_autoResolveClasses
    foreach (self::$_autoResolveClasses as $autoResolveClass) {
    // Ignore our original guess, we know that won't work
    if ($autoResolveClass !== $extensionType) {
    $reader = self::createReader($autoResolveClass);
    if (
    $reader->canRead($pFilename)) {
    return
    $reader;
    }
    }
    }

    throw new
    Exception('Unable to identify a reader for this file');
    }
    // function createReaderForFile()
    }
    Qualche soluzione in merito?
    Cosa dovrei cambiare in questo file?
    Se provassi ad includere ogni singolo file funzionerebbe?
    Dovrei modificare questo?
    Codice PHP:
    //define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../'); <-- QUESTO NELLA RIGA SUCCESSIVA
    define('PHPEXCEL_ROOT', '/membri/dickymoser/classes/');
    Ultima modifica di dickymoser : 03-09-2016 alle ore 13.42.48

  4. #4
    Guest

    Predefinito

    Puoi postare il file Autoloader.php per favore?

  5. #5
    Guest

    Predefinito

    L'errore riguarda quindi la gestione dei percorsi e deve stare per forza in uno di questi due file:

    - autoloader.php
    Codice PHP:
    <?php
    /**
    * PHPExcel
    *
    * Copyright (c) 2006 - 2012 PHPExcel
    *
    * This library is free software; you can redistribute it and/or
    * modify it under the terms of the GNU Lesser General Public
    * License as published by the Free Software Foundation; either
    * version 2.1 of the License, or (at your option) any later version.
    *
    * This library is distributed in the hope that it will be useful,
    * but WITHOUT ANY WARRANTY; without even the implied warranty of
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    * Lesser General Public License for more details.
    *
    * You should have received a copy of the GNU Lesser General Public
    * License along with this library; if not, write to the Free Software
    * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    *
    * @category PHPExcel
    * @package PHPExcel
    * @copyright Copyright (c) 2006 - 2012 PHPExcel (http://www.codeplex.com/PHPExcel)
    * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
    * @version 1.7.8, 2012-10-12
    */

    PHPExcel_Autoloader::Register();
    // As we always try to run the autoloader before anything else, we can use it to do a few
    // simple checks and initialisations
    PHPExcel_Shared_ZipStreamWrapper::register();
    // check mbstring.func_overload
    if (ini_get('mbstring.func_overload') & 2) {
    throw new
    Exception('Multibyte function overloading in PHP must be disabled for string functions (2).');
    }
    PHPExcel_Shared_String::buildCharacterSets();


    /**
    * PHPExcel_Autoloader
    *
    * @category PHPExcel
    * @package PHPExcel
    * @copyright Copyright (c) 2006 - 2012 PHPExcel (http://www.codeplex.com/PHPExcel)
    */
    class PHPExcel_Autoloader
    {
    /**
    * Register the Autoloader with SPL
    *
    */
    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()


    /**
    * Autoload a class identified by name
    *
    * @param string $pClassName Name of the object to load
    */
    public static function Load($pClassName){
    if ((
    class_exists($pClassName,FALSE)) || (strpos($pClassName, 'PHPExcel') !== 0)) {
    // Either already loaded, or not a PHPExcel class request
    return FALSE;
    }

    $pClassFilePath = PHPEXCEL_ROOT .
    str_replace('_',DIRECTORY_SEPARATOR,$pClassName) .
    '.php';

    if ((
    file_exists($pClassFilePath) === false) || (is_readable($pClassFilePath) === false)) {
    // Can't load
    return FALSE;
    }

    require(
    $pClassFilePath);
    }
    // function Load()

    }

    oppure IOfactory.php che non posso scrivere in questo post altrimenti il file è troppo lungo

  6. #6
    Guest

    Predefinito

    L'errore segnalato è nel file Autoloader.php, qui:

    Codice PHP:
    PHPExcel_Shared_ZipStreamWrapper::register();
    perché questa classe non esiste. La prima classe che usi in quel file (PHPExcel_Autoloader) è definita in basso:

    Codice PHP:
    class PHPExcel_Autoloader
    {
    /**
    * Register the Autoloader with SPL
    *
    */
    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()


    /**
    * Autoload a class identified by name
    *
    * @param string $pClassName Name of the object to load
    */
    public static function Load($pClassName){
    if ((
    class_exists($pClassName,FALSE)) || (strpos($pClassName, 'PHPExcel') !== 0)) {
    // Either already loaded, or not a PHPExcel class request
    return FALSE;
    }

    $pClassFilePath = PHPEXCEL_ROOT .
    str_replace('_',DIRECTORY_SEPARATOR,$pClassName) .
    '.php';

    if ((
    file_exists($pClassFilePath) === false) || (is_readable($pClassFilePath) === false)) {
    // Can't load
    return FALSE;
    }

    require(
    $pClassFilePath);
    }
    // function Load()

    }
    Ma l'altra (PHPExcel_Shared_ZipStreamWrapper) non mi sembra che venga definita, per questo c'è l'errore.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •