[PHP] Problema con istruzione "use"

samurai.sette

Utente Attivo
17 Dic 2015
235
6
18
Ciao a tutti, apro questa discussione per chiedervi un aiuto in merito all'istruzione "use".
Mi spiego.
All'interno di un articolo Joomla ho inserito un piccolo codice per permettere ad un utente di esportare determinati dati in Excel.
Ho testato il codice fuori da Joomla e funziona perfettamente ma all'interno di Joomla mi genera questo errore:"syntax error, unexpected 'use' (T_USE)".
Secondo voi da cosa può dipendere?
Questo è quello che ho scritto.
PHP:
<?php
    require 'vendor/autoload.php';
    use PhpOffice\PhpSpreadsheet\Spreadsheet;
    use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
    $spreadsheet = new Spreadsheet();
    $sheet = $spreadsheet->getActiveSheet();
    if (isset ($_POST['estrai_tutto']))
    {
.
.
.
.
}
?>
Ciao, grazie mille
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Namespace joomla!
PHP:
use \PhpOffice\PhpSpreadsheet\Spreadsheet;
use \PhpOffice\PhpSpreadsheet\Writer\Xlsx;
 

samurai.sette

Utente Attivo
17 Dic 2015
235
6
18
Ciao Macus_adi.
Scusa l'ignoranza, ma potresti darmi qualche informazione in più su come dovrei fare?
Ciao, grazie mille
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
Ho testato il codice fuori da Joomla e funziona perfettamente ma all'interno di Joomla mi genera questo errore:"syntax error, unexpected 'use' (T_USE)".
é un errore di sintassi
non dovrebbe funzionare ne fuori ne dentro Joomla
all'interno di Joomla stai usando un codice diverso da quello che hai postato ….

controlla che la riga che precede quella segnalata dall'errore, sia terminata con punto e virgola
 

samurai.sette

Utente Attivo
17 Dic 2015
235
6
18
Ciao Marino51.
Il codice che ho postato è quello che ho inserito all'interno di Joomla (ho fatto copia/incolla) e la riga precedente l'errore termina con ";".
Francamente non riesco a capire perchè all'esterno di Joomla funziona perfettamente mentre al suo interno mi genera quell'errore.
Comunque riporto di seguito il codice completo.
PHP:
<form method="post">
<input type="submit" name="excel" value="clicca qui" />
</form>
<?php
    require 'vendor/autoload.php';

    use PhpOffice\PhpSpreadsheet\Spreadsheet;
    use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

    $spreadsheet = new Spreadsheet();
    $sheet = $spreadsheet->getActiveSheet();
       
    $con = mysqli_connect("localhost","root","","database");

    if (isset ($_POST['excel']))
    {
        // individuo solo le colonne che mi interessano
        $query_col = mysqli_query ($con, "SELECT tabella FROM tabella1 ORDER BY id");
        while ($info_col = mysqli_fetch_array ($query_col))
        {
            $nomi_colonne = $info_col[0];
            $array_col[] = $nomi_colonne; // array nomi colonne
        }
       
        // inserisco i nomi delle colonne nel file excel
        $num_colonne = count ($array_col); // numero colonne tabella
        $ascii = 65; // lettera A in formato ascii
        for ($j=0; $j<=$num_colonne - 1; $j++)
        {
            $cella = chr($ascii + $j) . 1;
            $sheet -> setCellValue($cella,$array_col[$j]);
        }
       
        // nomi colonne in stringa separati tra loro da una virgola
        $select_dati = implode(',',$array_col);
       
        // estraggo i dati dalla tabella del monitoraggio
        $query_dati = mysqli_query ($con, "SELECT $select_dati FROM tabella2 ORDER BY id");
       
        $row = 3;
       
        while ($dati = mysqli_fetch_object($query_dati))
        {
            for ($k=0; $k<=$num_colonne - 1; $k++)
            {
                $colonna = $array_col[$k];
                $sheet -> setCellValue(chr($ascii + $k).$row, $dati->$colonna);
            }
            $row++;
        }

        $styleArray =
        [
            'font' => ['bold' => true,],
        ];
       
        $text_bold1 = 'A1:';
        $text_bold2 = chr($ascii + $num_colonne) . 1;
        $text_bold_totale = $text_bold1 . $text_bold2;
        $spreadsheet->getActiveSheet()->getStyle($text_bold_totale)->applyFromArray($styleArray);

        $writer = new Xlsx($spreadsheet);
        $writer->save('excel.xlsx');
   
        echo "Esportazione avvenuta con successo";  
    }
?>
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
PHP:
<?php
    use PhpOffice\PhpSpreadsheet\Spreadsheet;
    use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

    require 'vendor/autoload.php';

    $spreadsheet = new Spreadsheet();
scrivi in questo modo e nel caso persista l'errore, posta l'intero errore ed indica la riga dove si é verificato
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Appena provato con joomla ultima versione, copiando dalla doc ufficiale....
Nessun errore
PHP:
include_once 'vendor/autoload.php';
      
        use PhpOffice\PhpSpreadsheet\Spreadsheet;
        use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
      
        $spreadsheet = new Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();
        $sheet->setCellValue('A1', 'Hello World !');
        $writer = new Xlsx($spreadsheet);
        $writer->save('hello world.xlsx');
NB: la sintassi tecnicamente corretta è questa:
PHP:
/***************BLOCK INCLUDE******************/
include_once '........';
require '.............';
require_once '................';
/******END BLOCK************/

/*************BLOCK USE*************************/

use Class\Generator\Class as Name;
/*****END BLOCK************/

Sicuro che vendor/autoload.php abbia i realpath corretti?
prova a fare composer update,
sostituisci il require con include_once
 
Ultima modifica:

samurai.sette

Utente Attivo
17 Dic 2015
235
6
18
Ciao Macus_adi.
Ho fatto composer update e ho sostituito il require con include_once ma niente... :(
Scusa l'ignoranza ma potresti spiegarmi il discorso dei realpath?
Ciao, grazie mille.
P.S.: Allego una immagine con l'errore che mi genera
 

Allegati

  • Errore.JPG
    Errore.JPG
    42,9 KB · Visite: 428

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Se vedi la config del file autoload.php è questa:
PHP:
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit080b3b8961632bc4848cc3238fd9aab2::getLoader();
Autoload_real trova tutti i file per il corretto funzionamento della path vendor...
Il dubbio è questo...
Hai per caso copiato ed incollato la cartella vendor da installazione locale a remota?
Hai provato a cancellare la cartella vendor su joomla e installare direttamente da console?
Questo potrebbe essere anche un sintomo di mismatch path, ossia qualcosa non installata correttamente...
Il consiglio è questo:
Crea in locale un VHost con joomla e installa Spreadsheet, semplicemente copiando ed incollando il codice dalla doc ufficiale (5 minuti al massimo), e vedi se nella home trovi il file generato....
Se non da errore probabile che l'installazione composer (vendor/....) in remoto sia andata a farsi friggere, quindi cancella e reinstalla il tutto!
 

samurai.sette

Utente Attivo
17 Dic 2015
235
6
18
Ciao Macus_adi, ho provato più di una volta a reinstallare composer ma niente, ho sempre quell'errore.
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
non so se hai risolto,
in ogni caso ho letto da qualche parte che la posizione di "use" dipende dalla versione di PHP,
se apri un qualsiasi file di esempio, incluso nel pacchetto, vedi
PHP:
<?php
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Settings;

require __DIR__ . '/../Header.php';
ci sarà ben un motivo ….

quindi se tu provassi, mettendo "use" subito dopo il tag PHP,
PHP:
<?php
    use PhpOffice\PhpSpreadsheet\Spreadsheet;
    use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
?>
<form method="post">
<input type="submit" name="excel" value="clicca qui" />
</form>
<?php
    if (isset ($_POST['excel']))
    {
        require 'vendor/autoload.php';

        $spreadsheet = new Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();
potresti togliermi il dubbio
grazie
 

samurai.sette

Utente Attivo
17 Dic 2015
235
6
18
Ciao Marino51. Purtroppo non ho ancora risolto :(.
Per caso ricordi dove hai letto il discorso riguardante la posizione di "use"? (la versione di PHP è la 7.2.7)
Dove hai trovato i file di esempio?
Puoi, per favore, inserirmi i link in modo che posso guardare di persona? Te ne sarei molto grato.
Ciao, grazie mille.
 

samurai.sette

Utente Attivo
17 Dic 2015
235
6
18
Ciao a tutti.
Visto che non riesco a risolvere il problema ho deciso di scrivere uno script più semplice. Adesso riesco a estrapolare i dati in excel ma me li inserisce tutti dentro una sola cella.
Questo è lo script che ho scritto.
PHP:
<?php
    // recupero i dati dal file monitoraggio.php
    $tabella = $_SESSION['nome_monit'];
    $monitoraggio_elementi = $tabella . "_ok";

    $conn = new mysqli('localhost', 'root', ''); 
    mysqli_select_db($conn, 'meco'); 

    $query_col = mysqli_query ($conn, "SELECT tabella FROM $monitoraggio_elementi where tabella != '' ORDER BY id");
    while ($info_col = mysqli_fetch_array ($query_col))
    {
        $nomi_colonne = $info_col[0];
        $array_col[] = $nomi_colonne; // nomi colonne
    }
    
    $select_col = implode(',',$array_col); // elenco colonne in formato stringa

    $columnHeader = '';

    for ($i=0; $i<= count($array_col) - 1; $i++)
    {
        $columnHeader .= $array_col[$i] . "\t";
    }

    $setData = '';

    $setSql = "SELECT $select_col FROM $tabella ORDER BY id";
    $setRec = mysqli_query($conn, $setSql); 
 
    while ($rec = mysqli_fetch_row($setRec))
    {
        $rowData = ''; 
        foreach ($rec as $value)
        {
            $rowData .= $value . "\t";
        }

        $setData .= trim($rowData) . "\n"; 
    }
    
    header("Content-type: application/octet-stream"); 
    header("Content-Disposition: attachment; filename=User_Detail_Reoprt.xls"); 
    header("Pragma: no-cache"); 
    header("Expires: 0");
    
    echo ucwords($columnHeader) . "\n" . $setData . "\n";
?>
Secondo voi dove può essere il problema?
Ciao, grazie mille.
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
(la versione di PHP è la 7.2.7
Dalla versione 5.3 in poi è tutto uguale...

Secondo voi dove può essere il problema?
Ricordati la discussione qui :https://forum.mrw.it/threads/php-co...xcel-su-due-fogli-distinti.53241/#post-207103
I dubbi sono certezze...
---------------------------------------------------------------------------------------------------------
ci sarà ben un motivo ….
I file citati sono dei TEST, non adatti alla PRODUZIONE ... Ci sta un mondo di differenza...

In produzione si include la vendor prima di ogni cosa, questo il motivo per il quale si fa prima "include/require" e poi "use" (cosa più logica)...
 

samurai.sette

Utente Attivo
17 Dic 2015
235
6
18
Ciao Macus_adi.
Giorni addietro mi hai scritto che hai provato phpspreadsheet su joomla (ultima versione) e ti funziona.
Mi sorgono due domande:
1) hai modificato qualche impostazione su joomla?
2) il codice che hai provato lo hai inserito in un articolo?
Se hai fatto come ho fatto io comincio a pensare che sia joomla (per chissà quale motivo) a impedirmi di utilizzare phpspreadsheet.
Ciao, grazie
 
Ultima modifica:
Discussioni simili
Autore Titolo Forum Risposte Data
K [php] Problema con inner join PHP 4
K [PHP] Problema con variabili concatenate. PHP 1
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
Z Problema di sincronizzazione PAYPAL con PHP PHP 1
M Problema con php per calcolo costo percentuale PHP 7
L [PHP] Problema con Telegram PHP 1
K Help: problema con uno script di booking in php! PHP 0
N [Apache] problema con estensione php Apache 0
C [PHP] Problema con download file PHP 0
M [PHP] Problema con preg_match PHP 1
gandalf1959 [PHP] problema con l'utilizzo di Header PHP 3
M [PHP] Problema con query select PHP 2
Cosina [PHP] fwrite problema con le parole accentate PHP 9
F [PHP] Problema con number_format PHP 3
C Apache Cordova problema con php Programmazione 1
T PHP+MYSQL: problema con quelle maledette lettere accentate... PHP 5
F [PHP] Problema con array multidimensionale PHP 4
F Problema con pagine login in PHP PHP 2
A [PHP] Problema invio mail con funzione mail() PHP 3
gandalf1959 problema con la codifica caratteri accentati e speciali tra php e mysql PHP 3
webmachine [PHP][MYSQL] Problema con le SELECT PHP 5
alessandra86 [PHP] Popolamento database con form ricorsivi - problema array (foreach ) PHP 5
C [PHP] problema con un esercizio PHP 2
P [PHP] Problema con accenti ed apostrofi PHP 0
R [PHP] Problema stampa array bidimensionali con formula $html.=<<<myHtml... PHP 2
M [PHP] problema con preg_match PHP 11
L [PHP] problema con upload e javascript (upload multiplo) Javascript 2
D [PHP] problema con xml PHP 13
T4MAR4 [PHP] Problema ricerca con apostrofo PHP 2
xone Problema FPDF con pagina dinamica PHP PHP 1
A Problema con getCurrentPosition e passaggio variabili da javascript a PHP Javascript 3
SebaGravi [PHP] problema url semantici con .htaccess PHP 3
L [PHP] problema parsing con comando file get contents PHP 7
L Problema con recupero dati in PHP cURL e JAVA con server PHP 1
zammaeng [PHP] Problema form con lista PHP 8
M [PHP] Problema con algoritmo struttura iterativa PHP 2
D Problema con query in php PHP 5
S Problema con script php-javascript PHP 2
M [PHP] Problema con query PHP 17
C [PHP] Problema con creazione csv PHP 3
B sitoweb responsivo problema con include php HTML e CSS 1
neo996sps PHP/MySQL - Problema con generazione array PHP 14
P problema con codice php... PHP 7
C Problema con html e php :D PHP 1
E php problema incremento e decremento di 2 variabili con click da pulsante PHP 0
G Problema con codice php PHP 1
L xml e php. Problema con i nodi PHP 4
P Problema con file di registrazione in php, non funziona e dà continui errori PHP 0
R problema con pagine php apache su centos 5.3 Apache 1
V problema con mail e php PHP 6

Discussioni simili