Visualizzazione risultati 1 fino 11 di 11

Discussione: upload immagini

  1. #1
    Guest

    Predefinito upload immagini

    ciao a tutti,

    ho creato un sito che in locale (apache - php - mysql) funziona benissimo ma che pubblicato su altervista non va!
    in particolare faccio l'upload di un'immagine (che ridimensiono e duplico al volo). Tento di salvare questa immagine in una cartella del sito ma questa operazione non va...

    ricapitolo:
    - stesse pagine php
    - in locale il sito funziona e se apro le cartelle (sotto htdocs stessa struttura pubblicata su altervista) trovo le immagini 'ritoccate'
    - pubblicate su altervista tutte le funzionalità vanno tranne l'upload dei files..

    grazie

  2. #2
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Dovresti spiegare meglio che errori riscontri. Inoltre dovresti far vedere il codice che utilizzi.
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  3. #3
    Guest

    Predefinito

    descrivo i passi (ripeto in locale apche-php-mysql funziona):

    1) ricevo l'immagine
    2) ne salvo una copia nella cartella opportuna
    3) ne ridimensiono una copia
    4) salvo la copia ridimensionata con un altro nome

    aggiungo una nuova informazione: ho abilitato lettura/scrittura per 'tutti' sulle cartelle coinvolte (codice 777 linux)

    la pagina non riporta errori, semplicemente non trovo nessuno dei due file che volevo creare in nessuna cartella...

    allego il codice (so bene che è antipatico da leggere):

    Codice PHP:
    <?php
    //<!--

    function GDVersion(){
    if( !
    in_array('gd', get_loaded_extensions()) ) return 0;
    elseif(
    isGD2supported() ) return 2;
    else return
    1;
    }

    function
    isGD2supported(){
    global
    $GD2;
    if( isset(
    $GD2) AND $GD2 ) return $GD2;
    else{
    $php_ver_arr = explode('.', phpversion());
    $php_ver = intval($php_ver_arr[0])*100+intval($php_ver_arr[1]);
    if(
    $php_ver < 402 ){ // PHP <= 4.1.x
    $GD2 = in_array('imagegd2',get_extension_funcs("gd"));
    }
    elseif(
    $php_ver < 403 ){ // PHP = 4.2.x
    $im = @imagecreatetruecolor(10, 10);
    if(
    $im ){
    $GD2 = 1;
    @
    imagedestroy($im);
    }
    else
    $GD2 = 0;
    }
    else{
    // PHP = 4.3.x
    $GD2 = function_exists('imagecreatetruecolor');
    }
    }
    return
    $GD2;
    }

    function
    IsFormatSupported($format){
    if( (
    $format == 'gif') AND (imagetypes() & IMG_GIF) )return true;
    elseif( (
    $format == 'jpeg') AND (imagetypes() & IMG_JPG) )return true;
    elseif( (
    $format == 'png') AND (imagetypes() & IMG_PNG) )return true;
    else return
    false;
    }

    function
    resizeImage($im, $size, $w, $h, $uploaddir, $nomeFile, $estensioneFile) {
    $newwidth = $size[0];
    $newheight = $size[1];

    if(
    $newwidth > $w ){
    $newheight = ($w / $newwidth) * $newheight;
    $newwidth = $w;
    }
    if(
    $newheight > $h ){
    $newwidth = ($h / $newheight) * $newwidth;
    $newheight = $h;
    }

    if( (
    GDVersion() == 2) AND ($size[2] != 1) ){
    $new = imagecreatetruecolor($newwidth, $newheight);
    imagecopyresampled($new, $im, 0, 0, 0, 0, $newwidth, $newheight, $size[0], $size[1]);
    }
    else{
    $new = imagecreate($newwidth, $newheight);
    imagecopyresized($new, $im, 0, 0, 0, 0, $newwidth, $newheight, $size[0], $size[1]);
    }

    $previewFileName=$uploaddir."/".$nomeFile.$estensioneFile;
    ImageJpeg($new,$previewFileName);
    @
    imagedestroy($new);
    }

    function
    uploadFile($target, $w, $h, $nextPageOnError) {

    $nome_file = $_FILES['file']['name'];
    $tipo_file = $_FILES['file']['type'];
    $dim_file = $_FILES['file']['size'];
    $file_tmp = $_FILES['file']['tmp_name'];
    $cod_err = $_FILES['file']['error'];

    $estensioneFile = substr(basename($nome_file), strlen(basename($nome_file))-4);
    $nomeCodificatoFile = time();
    $tmpFileName = "buttami_".$nomeCodificatoFile;

    $error[1] = "File troppo grande per il server";
    $error[2] = "File troppo grande";
    $error[3] = "Upload incompleto";
    $error[4] = "File già esistente o nessun file inviato";
    $error[6] = "Errore nella cartella dei file temporanei";

    if (
    $cod_err==0){
    $uploaddir = $_SERVER['DOCUMENT_ROOT']."$target";
    $uploadfile = $uploaddir ."/". $tmpFileName . $estensioneFile;
    $src = $uploadfile;

    move_uploaded_file($file_tmp, $uploadfile);

    $size = getimagesize($src);

    if(
    $size[2] == 2 ){$im = @imagecreatefromjpeg($src);}
    elseif(
    $size[2] == 1 ){$im = @imagecreatefromgif($src);}
    elseif(
    $size[2] == 3 ){$im = @imagecreatefrompng($src);}

    $tmpString=$nomeCodificatoFile."_preview";
    resizeImage($im, $size, $w, $h, $uploaddir, $tmpString , $estensioneFile);
    $w = 320;
    $h = 240;
    resizeImage($im, $size, $w, $h, $uploaddir, $nomeCodificatoFile, $estensioneFile);

    @
    imagedestroy($im);
    $previewFileName=$uploaddir."/".$tmpFileName.$estensioneFile;
    unlink($previewFileName);
    }
    else {
    header("Location: ../../errore.php?motivo=uploadFile: $error[$cod_err]&continua=$nextPageOnError&invia=no"); exit; }
    return
    $nomeCodificatoFile;
    }



    // -->
    ?>
    Ultima modifica di funcool : 16-02-2008 alle ore 17.51.44

  4. #4
    Guest

    Predefinito

    in poche parole l'immagine che hai salvato e alla quale hai modificato il nome non ti si vede?

  5. #5
    Guest

    Predefinito

    l'immagine non si vede, ma il motivo è che in realtà l'immagine non è stata salvata sul disco, ritengo che ci sia un problema o con il percorso o con le autorizzazioni


    EDIT: altra info

    ho fatto un pò di debug e le immagini 'nuove' (dopo upload e modifica) hanno il path:

    // versione scalata
    /var/www/html/immagini/tuning/1203185124_preview.JPG

    //versione 'quasi originale'
    /var/www/html/immagini/tuning/1203185124.JPG

    //originale
    /var/www/html/immagini/tuning/buttami_1203185124.JPG

    l'ultima (originale) la cancello esplicitamente io
    le altre due non riesco a ritrovarle. il percorso iniziale

    /var/www/html/

    chi lo mette?
    potrebbe essere questo il problema?
    qualcuno ha mai fatto un upload sul proprio sito?

    ciao


    RI-EDIT: ultima notizia:

    lo stesso debug in locale (apache-php-mysql):

    C:/Programmi/Apache Software Foundation/Apache2.2/htdocs/immagini/tuning/1203185382_preview.JPG

    C:/Programmi/Apache Software Foundation/Apache2.2/htdocs/immagini/tuning/1203185382.JPG

    C:/Programmi/Apache Software Foundation/Apache2.2/htdocs/immagini/tuning/buttami_1203185382.JPG

    le uniche differenze sono i path, ma ribadisco che in locale funziona!
    Ultima modifica di funcool : 16-02-2008 alle ore 20.16.45

  6. #6
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Al posto di:
    Codice PHP:
    $uploaddir = $_SERVER['DOCUMENT_ROOT']."$target";
    Metti:
    Codice PHP:
    $uploaddir = $target;
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  7. #7
    Guest

    Predefinito

    non funge!

    il codice del chiamente è:
    Codice PHP:
    <?php

    include "../../funzioni/imageTools.inc";
    include_once(
    "../../funzioni/executequery.inc");
    include_once(
    "../../funzioni/fetchrow.inc");
    include_once
    "../../funzioni/verifyIfLogged.inc";
    verifyIfLogged();

    $precondition = IsSet($_POST['descrizione']) & IsSet($_POST['categoriaInput']) & IsSet($_POST['categoriaSelect']) & IsSet($_POST['categoriaTesto']) & IsSet($_POST['prezzo']);

    if (
    $precondition) {
    @
    session_start();
    $categoria=$_POST['categoriaTesto'];
    if (
    $_POST['categoriaInput']=="select") $categoria=$_POST['categoriaSelect'];
    $prezzo = $_POST['prezzo'];
    $descrizione = $_POST['descrizione'];

    $foto = "";
    // if ($_POST['foto']=="on") $foto = uploadFile("/immagini/tuning", 100, 75,"amministratore/tuning.php");
    if ($_POST['foto']=="on") $foto = uploadFile("immagini/tuning", 100, 75,"amministratore/tuning.php");

    $query = "INSERT INTO tuning (foto, descrizione, categoria, prezzo)";
    $query .= " VALUES ('$foto',";
    $query .= " '$descrizione', '$categoria', '$prezzo')";
    executeQuery($query, $query."inserisciTuningAmministratore");
    header("Location: ../tuning.php");
    }
    ?>
    la struttura di directory è:

    <home>/amministratore/action/<funzione chiamente>
    <home>/funzioni/<funzione di upload>

    p.s. come si fa a mettere il codice in evidenza nei post del form?

    ulteriore debug, non utilizzavo <funzione> or die();
    utilizzandolo vedo che fallisce

    move_uploaded_file($file_tmp, $uploadfile);

    $file_tmp contiene "/membri/.dummy/temp/phpd8qXhi"
    $uploadfile contiene "/var/www/html/immagini/tuning/buttami_1203187528.JPG"
    Ultima modifica di funcool : 17-02-2008 alle ore 11.04.52 Motivo: altro debug

  8. #8
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Citazione Originalmente inviato da neplasco Visualizza messaggio
    $file_tmp contiene "/membri/.dummy/temp/phpd8qXhi"
    $uploadfile contiene "/var/www/html/immagini/tuning/buttami_1203187528.JPG"
    E' lo stesso problema che ti dicevo prima. Per risolvere devi togliere "/var/www/html/" e per farlo devi fare quello che ho scritto qui.

    Citazione Originalmente inviato da neplasco Visualizza messaggio
    p.s. come si fa a mettere il codice in evidenza nei post del form?
    Leggi da qui.
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  9. #9
    Guest

    Predefinito

    come dicevo ci ho provato e non funziona: l'output di debug è:

    // $file_tmp path
    /membri/.dummy/temp/php8gyovF

    // $uploadfile path
    immagini/tuning/buttami_1203244348.JPG

    // esito di "move_uploaded_file($file_tmp, $uploadfile) or die("errore move");"
    errore move

    ipotizzo che non piacciano i path impostati.

  10. #10
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Al posto di:
    Codice PHP:
    $uploaddir = $target;
    Metti:
    Codice PHP:
    $uploaddir = "../".$target;
    Se non funziona ancora, scrivi la struttura delle cartelle in cui si trova lo script che carica i file e di quelle della cartella in cui bisogna caricare i file.
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  11. #11
    Guest

    Predefinito

    grazie,
    adesso funziona!

    Giusto per completezza della 'soluzione', ho dovuto modificare un bel pò gli indirizzi.
    In locale $_SERVER[DOCUMENT_ROOT] funziona ma a quanto pare non è utilizzabile una volta che il sito è stato pubblicato.
    Rimangono sempre validi gli indirizzi relativi.

Regole di scrittura

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