Visualizzazione risultati 1 fino 7 di 7

Discussione: Apertura allegato inviato con form creato su Altervista

  1. #1
    Guest

    Predefinito Apertura allegato inviato con form creato su Altervista

    Buonasera a tutti,
    dopo molte prove sono riuscito a creare un form che fa l'upload di un .pdf e lo invia al destinatario (inserito nel form html);
    l'allegato mi arriva come .pdf, ma Adobe Reader non lo legge:
    qs. solo nel caso in cui utilizzo il sito Altervista,
    mentre in locale funziona perfettamente.
    E' molto probabile che qs. dipenda da qualche impostazione di Altervista:
    qualcuno saprebbe aiutarmi?
    Grazie in anticipo.

  2. #2
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,745

    Predefinito

    Puoi indicare il codice che utilizzi?

  3. #3
    Guest

    Predefinito Si cero, ecco il codice del file invia.php. Grazie

    Codice PHP:
    <?php
    function Invia()
    {
    $boundary="";
    $destinatario="";
    $data="";

    ini_set(' memory_limit', -1);
    ini_set('cgi.rfc2045_headers', 1);
    ini_set('file_uploads', 'On');
    ini_set('upload_max_filesize', '100G');
    ini_set('mbstring.http_output_conv_mimetype','application/pdf');
    ini_set ('AddType','application/octet-stream');
    ini_set ('AddType', 'application/pdf');

    $allegato_name = $_FILES['upload']['name'];
    $allegato_type= $_FILES['upload']['type'];
    $allegato_tmp= $_FILES['upload']['tmp_name'];
    $oggetto="INVIO FATTURA $_POST[nome] $_POST[cognome]";
    echo
    $allegato_type;
    //read the attachment file contents into a string,
    //encode it with MIME base64,
    //and split it into smaller chunks
    //Apro e leggo il file allegato


    $file=@fopen($allegato_name,'rb'); // apro il file in lettura $miofile = fopen('leggimi.txt','r');
    //$allegato_size=filesize($allegato_name);// memorizzo in una variabile la lunghezza del file $bytes=filesize('leggimi.txt');
    $data=@fread($file, filesize($allegato_name));
    fclose($file);
    $data=chunk_split(base64_encode($data));
    //define the body of the message.
    ob_start(); //Turn on output buffering
    $headers = ob_get_clean();
    $boundary = md5(time());
    $headers="From: <volirosa@gmail.com>\n";
    $headers .="MIME-Version: 1.0";
    $headers .= "--PHP-alt-$boundary\n";
    $headers .= "Content-Type: application/pdf; name=\"$allegato_name\"\n";
    $headers .= "Content-Transfer-Encoding: base64\n";
    $headers .= "Content-Disposition: attachment\n\n";
    $headers .="--PHP-mixed-$boundary\n";


    $destinatario=@$_POST['email'];
    if ((isset(
    $destinatario))&($data<>null))
    {
    $mail_sent=@mail($destinatario,$oggetto,$data,$headers);
    echo
    $mail_sent ? "<p>Mail inviata con successo!</p>" : "Mail failed";
    include
    "samtel.html";
    }else{
    echo
    "<p>errore</p>";
    include
    "samtel.html";
    }

    }
    ?>
    Ultima modifica di karl94 : 02-05-2013 alle ore 14.54.55 Motivo: Formattazione del codice PHP

  4. #4
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,745

    Predefinito

    Devi andare a leggere il file il cui percorso è memorizzato nella variabile $allegato_tmp.

  5. #5
    Guest

    Predefinito

    Grazie per la gentile risposta:
    non penso sia così perché per la lettura del file, usando $allegato_name anziché $allegato_tmp funziona tutto (almeno in locale);
    credo piuttosto che la lettura da parte di Adobe del mio allegato .pdf sia legata a dei permessi sul file: in locale sono riuscito a far ciò col comando Chmod, ma su Altervista ancora non sono riuscito; ho cercato dapprima di spostare il file dell'upload su server tramite move_uploaded_file (che però è fallito: la funzione move_uploaded_file non funziona: non so se dovuto ad Altervista), per poi dargli dei permessi... il codice è qs. (da notare che in locale apre l'allegato, anche se la funz. move_uploaded_file non funziona mentre inviando la mail da altervista non apre l'allegato):
    Codice PHP:
    <?php
    function Invia()
    {
    $boundary="";
    $destinatario="";
    $data="";
    ini_set ("display_errors", "1");
    ini_set ("SAFE_MODE", "Off");

    error_reporting(E_ALL);

    // Valorizzo le variabili relative all'allegato
    //i file caricati sono salvati all'interno di $FILES, dal q.le saranno accessibili anche altre informazioni,
    //come il nome del file temporaneo: NOTA BENE: E' LEGATO AL TAG upload
    $allegato_name = $_FILES['upload']['name'];
    $allegato_type= $_FILES['upload']['type'];
    //$allegato_tmp= $_FILES['upload']['tmp_name'];

    //recupero i parametri da passare alla funzione predefinita per l'upload

    $percorso=$_FILES['upload']['tmp_name'];
    //$nome=$_FILES['upload']['name'];



    // Lettura e scrittura per il proprietario, e nessun permesso per gli altri
    chmod(".", 0600);

    // Lettura e scrittura per il proprietario, e lettura per gli altri
    chmod(".", 0644);
    // Accesso completo per il proprietario, e lettura ed esecuzione per gli altri
    chmod (".", 0755);


    // Accesso completo per il proprietario, e lettura ed esecuzione per il gruppo del proprietario
    chmod (".",0750);

    chmod (".",0777);
    if (!
    is_dir("tmp")){
    $cartella=Mkdir("tmp","0777");
    }

    $cartella='tmp/';
    //ESEGUO L'UPLOAD CONTROLLANDO L'ESITO
    if(move_uploaded_file($percorso,$cartella.$allegato_name))
    {
    echo
    "Upload eseguito con successo";
    }
    else
    {
    echo
    "Si sono verificati problemi durante l'upload";
    }

    //read the attachment file contents into a string,
    //encode it with MIME base64,
    //and split it into smaller chunks
    //Apro e leggo il file allegato


    $file=@fopen($allegato_name,'r'); // apro il file in lettura $miofile = fopen('leggimi.txt','r');
    //$allegato_size=($allegato_name);// memorizzo in una variabile la lunghezza del file $bytes = filesize('leggimi.txt');
    $data=@fread($file, filesize($allegato_name)); //// leggo il file per l'intera lunghezza -->fread($miofile, 100): leggere i primi 100bytes;

    // Adatto il file al formato MIME base64 usando base64_encode
    //$encoded_allegato=chunk_split(base64_encode(file_get_contents($data)));
    $data=chunk_split(base64_encode($data));

    //define the body of the message.
    ob_start(); //Turn on output buffering
    $attachment = ob_get_clean();
    //DELIMITATORE
    // Genero il "separatore"
    // Serve per dividere, appunto, le varie parti del messaggio.
    // Nel nostro caso separerà la parte testuale dall'allegato
    $boundary = md5(uniqid(time()));


    //Aggiungo le intestazioni necessarie per l'allegato
    $headers="\nMIME-Version; 1.0\n";
    $headers.="Content-Type: application/*";
    $headers.="boundary=\{$boundary}\"";
    $mittente="volirosa@gmail.com";

    $oggetto="INVIO FATTURA $_POST[nome] $_POST[cognome]";

    $headers = "From:<p>".$mittente;

    //read the attachment file contents into a string,
    //encode it with MIME base64,
    //and split it into smaller chunks
    //Apro e leggo il file allegato
    // Lettura e scrittura per il proprietario, e nessun permesso per gli altri
    //chmod("C:/xampp/htdocs/samtelALTERVISTA3/mur.pdf", 0600);

    // Lettura e scrittura per il proprietario, e lettura per gli altri
    //chmod("C:/xampp/htdocs/samtelALTERVISTA3/mur.pdf", 0644);

    // Accesso completo per il proprietario, e lettura ed esecuzione per gli altri
    //chmod("C:/xampp/htdocs/samtelALTERVISTA3/mur.pdf", 0755);

    // Accesso completo per il proprietario, e lettura ed esecuzione per gli altri
    //chmod("C:/xampp/htdocs/samtelALTERVISTA3/mur.pdf", 0777);

    // Accesso completo per il proprietario, e lettura ed esecuzione per il gruppo del proprietario
    //chmod("C:/xampp/htdocs/samtelALTERVISTA3/mur.pdf", 0750);


    $file=@fopen($allegato_name,'rb'); // apro il file in lettura $miofile = fopen('leggimi.txt','r');
    $allegato_size=($allegato_name);// memorizzo in una variabile la lunghezza del file $bytes = filesize('leggimi.txt');
    $data=@fread($file, filesize($allegato_name)); //// leggo il file per l'intera lunghezza -->fread($miofile, 100): leggere i primi 100bytes;

    // Adatto il file al formato MIME base64 usando base64_encode
    //$encodedallegato=chunk_split(base64_encode(file_get_contents($data)));
    $data=chunk_split(base64_encode($data));

    //define the body of the message.
    ob_start(); //Turn on output buffering
    $attachment = ob_get_clean();

    $messaggio = "Utente: $_POST[nome] $_POST[cognome] \n";
    $messaggio.= "Indirizzo: $_POST[via] $_POST[civ] \n";
    $messaggio.= "$_POST[cap] \n";
    $messaggio.= "$_POST[citta] \n";
    $messaggio.= "n° cellulare: $_POST[cel] \n";
    $messaggio.= "telefono: $_POST[telefono] \n";
    $messaggio.= "e-mail utente: $_POST[email] \n";
    $messaggio.= "messaggio per l'utente: $_POST[note] \n";



    //Aggiungo l'allegato al messaggio
    $attachment .="MIME-Version: 1.0";
    $attachment .= "--PHP-alt-$boundary\n";
    $attachment .= "Content-Type: application/pdf; name=\"$allegato_name\"\n";
    $attachment .= "Content-Transfer-Encoding: base64\n";
    $attachment .= "Content-Disposition: attachment\n\n";
    //NOTA BENE: L'INVIO DELL'ALLEGATO NON DIPENDE DA QS. RIGA QUI SOTTO!!
    $attachment.="--PHP-mixed-$boundary\n";
    $messaggio .= "$data\n";
    $attachment .= "--PHP-mixed-$boundary\n";
    $destinatario=@$_POST['email'];
    if ((isset(
    $destinatario))&($data<>null))
    {

    $mail_sent=@mail($destinatario,$oggetto,$data,$attachment,$messaggio);
    echo
    $mail_sent ? "<p>Mail inviata con successo!</p>" : "Mail failed";
    include
    "samtel.html";
    }else{
    echo
    "<p>errore</p>";
    include
    "samtel.html";
    }


    @
    fclose($file);
    rmdir("tmp");
    }
    ?>
    Vorrei chiedere anche una cosa precisa:
    per i permessi sulle cartelle di upload sulle cartelle: c'è modo di settarli da me o mi può aiutare qualcuno del team di AlterVista??
    Grazie!
    Buona serata.
    Ultima modifica di karl94 : 03-05-2013 alle ore 19.31.25 Motivo: Migliorie alla formattazione

  6. #6
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,745

    Predefinito

    Ma prima di cominciare a complicati la vita hai provato a seguire il mio suggerimento?

  7. #7
    Guest

    Predefinito

    Si, ho seguito il tuo consiglio, ma senza esito positivo:mi arriva un file null.pdf o, facendo altre prove, sempre lo stesso messaggio tipo "Adobe non è in grado di aprire il file perchè è danneggiato o non è stato codificato correttamente; sotto riporto il codice di invia.php; poichè al comando echo allegato_name,allegato_tmp, allegato_size l'unico che dà output è allegato_name, e allegato_size=0 (zero), mentre allegato_tmp non dà nulla, mi è venuto il sospetto che l'UPLOAD NON AVVIENE CORRETTAMENTE: QS. ANCHE IN LOCALE CON LO SCRIPT CHE MI APRE L'ALLEGATO (differisce dal codice sotto perchè vado a leggare allegato_name anzichè allegato_tmp: il codice sotto è quello testato su Altervista andando a leggere allegato_tmp come da suggerimento di Karl94; QS. SOSPETTO E'RAFFORZATO DAL FATTO CHE IN LOCALE, q.do apre l'allegato, in realtà sta aprendo un file temporaneo nella cartella dei file temporanei di WIndows;QUINDI VORREI CHIEDERE ALLO STAFF DI ALTERVISTA: POTRESTE CONFIGURARMI IL WEB SERVER PER FARE L'UPLOAD?? Ho provato anche a modificare i permessi sulle cartelle e sui file con FileZilla, ma non è cambiato nulla. Da notare che ci sono in gioco 3 pagine: A)form html; B)pagina php legata al FORM ACTION del form CHE CONTROLLA L'IMMISSIONE DI TUTTI I CAMPI; C) invia.php riportata sotto (modifica come da suggerimento di Karl94): ho pensato che magari il problema fosse dovuto al form action=pagina B nella pagina A.html, ma non è così; COSA NE PENSI kARL94? ------ ASPETTO RISPOSTA DALLO STAFF DI ALTERVISTA PER POTER AVERE LA CONFIGURAZIONE DEL WEB SERVER PER POTER FARE L'UPLOAD CORRETTAMENTE O SUGGERIMENTI IN QS. SENSO. GRAZIE!!!



    <?php
    function Invia()
    {
    // Directory dove salvare i files Uploadati ( chmod 777, percorso assoluto)
    $upload_dir = $_SERVER["DOCUMENT_ROOT"] . “/upload”;

    // Se $new_name è vuota, il nome sarà lo stesso del file uploadato
    $file_name = ($new_name) ? $new_name : $_FILES["upfile"]["name"];

    if(trim($_FILES["upload"]["name"]) == "" ) {

    print ("Non hai indicato il file da uploadare !");

    }
    if(@is_uploaded_file($_FILES["upload"]["tmp_name"])) {

    @move_uploaded_file($_FILES["upload"]["tmp_name"], "$upload_dir/$file_name")
    or die("Impossibile spostare il file, controlla l’esistenza o i permessi della directory dove fare l’upload.");

    } else {

    die("Problemi nell’upload del file " . $_FILES["upload"]["name"]);

    }

    echo "L’upload del file " . $_FILES["upload"]["name"] . " è avvenuto correttamente";





    $allegato_type= $_FILES["upload"]["type"];
    $allegato_tmp=$_FILES["upload"]["tmp_name"];
    $allegato_name = $_FILES["upload"]["name"];
    $allegato_size=$_FILES["upload"]["size"];
    echo $allegato_type;
    echo $percorso;
    echo $allegato_name;


    //chmod($allegato_name, 0750);
    //recupero i parametri da passare alla funzione predefinita per l'upload

    //$directory="./tmp";
    //if (!file_exists($directory))
    //{$cartella=mkdir("tmp", 0777);
    //$directory="./tmp";
    //} //CREA LA CARTELLA tmp/
    //$new_file=$directory.'/'.$allegato_name;
    //$command=move_uploaded_file($percorso,$new_file);
    //if(!$command)$error="Il file non può essere caricato, numero di errore:".print_r($_FILES);
    //echo $error;
    //chmod(".", 0777);
    //chmod($allegato_name1, 0777);

    //$cartelladest="./$cartella";

    //if (!file_exists($cartelladest)

    //eseguo l'upload e controllo l'esito
    //if($daleggere=move_uploaded_file($_FILES['upload']['tmp_name'],"./$cartella/".$_FILES['upload']['name']))
    //{
    //echo "Upload eseguito";
    //}
    //else
    //{
    //echo "Upload non eseguito";
    //}


    $file=@fopen($allegato_tmp,'rb'); // apro il file in lettura $miofile = fopen('leggimi.txt','r');
    //$allegato_size=($allegato_name);// memorizzo in una variabile la lunghezza del file $bytes = //filesize('leggimi.txt');
    $data=@fread($file, filesize($allegato_tmp)); //// leggo il file per l'intera lunghezza //-->fread($miofile, 100): leggere i primi 100bytes;

    //Adatto il file al formato MIME base64 usando base64_encode
    //$encoded_allegato=chunk_split(base64_encode(file_g et_contents($data)));
    $data=chunk_split(base64_encode($data));

    //define the body of the message.
    ob_start(); //Turn on output buffering
    $attachment = ob_get_clean();
    //DELIMITATORE
    // Genero il "separatore"
    // Serve per dividere, appunto, le varie parti del messaggio.
    // Nel nostro caso separerà la parte testuale dall'allegato
    $boundary = md5(uniqid(time()));


    //Aggiungo le intestazioni necessarie per l'allegato
    $headers="MIME-Version; 1.0\n";
    $headers.="Content-Type: application/*";
    $headers.="boundary=\{$boundary}\"";
    $mittente="volirosa@gmail.com";

    $oggetto="INVIO FATTURA $_POST[nome] $_POST[cognome]";

    $headers = "From:<$mittente>";

    //read the attachment file contents into a string,
    //encode it with MIME base64,
    //and split it into smaller chunks
    //Apro e leggo il file allegato
    // Lettura e scrittura per il proprietario, e nessun permesso per gli altri
    //chmod("C:/xampp/htdocs/samtelALTERVISTA3/mur.pdf", 0600);

    // Lettura e scrittura per il proprietario, e lettura per gli altri
    //chmod("C:/xampp/htdocs/samtelALTERVISTA3/mur.pdf", 0644);

    // Accesso completo per il proprietario, e lettura ed esecuzione per gli altri
    //chmod("C:/xampp/htdocs/samtelALTERVISTA3/mur.pdf", 0755);

    // Accesso completo per il proprietario, e lettura ed esecuzione per gli altri
    //chmod("C:/xampp/htdocs/samtelALTERVISTA3/mur.pdf", 0777);

    // Accesso completo per il proprietario, e lettura ed esecuzione per il gruppo del proprietario
    //chmod("C:/xampp/htdocs/samtelALTERVISTA3/mur.pdf", 0750);

    $messaggio = "Utente: $_POST[nome] $_POST[cognome] \n";
    //$messaggio.= "Indirizzo: $_POST[via] $_POST[civ] \n";
    //$messaggio.= "$_POST[cap] \n";
    //$messaggio.= "$_POST[citta] \n";
    //$messaggio.= "n° cellulare: $_POST[cel] \n";
    //$messaggio.= "telefono: $_POST[telefono] \n";
    //$messaggio.= "e-mail utente: $_POST[email] \n";
    //$messaggio.= "messaggio per l'utente: $_POST[note] \n";

    //Aggiungo l'allegato al messaggio
    $attachment .="MIME-Version: 1.0";
    $attachment .= "--PHP-alt-$boundary\n";
    $attachment .= "Content-Type: application/pdf; name=\"$allegato_tmp\"\n";
    $attachment .= "Content-Transfer-Encoding: base64\n";
    $attachment .= "Content-Disposition: attachment\n\n";
    //NOTA BENE: L'INVIO DELL'ALLEGATO NON DIPENDE DA QS. RIGA QUI SOTTO!!
    $attachment.="--PHP-mixed-$boundary\n";
    $messaggio .= "$data\n";
    $attachment .= "--PHP-mixed-$boundary\n";
    $destinatario=@$_POST['email'];
    if ((isset($destinatario))&($data<>null))
    {

    $mail_sent=@mail($destinatario,$oggetto,$data,$att achment,$messaggio);
    echo $mail_sent ? "<p>Mail inviata con successo!</p>" : "Mail failed";
    include "samtel.html";
    }else{
    echo "<p>errore</p>";
    include "samtel.html";
    }


    @fclose($file);
    //rmdir("tmp");
    }
    ?>

Regole di scrittura

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