• Bannato User Attivo

    Creo l'immagine e subito dopo la voglio visualizzare: non sempre funge

    <?
    // adesso creiamo la thumbnail!!!
    echo "<img border=\"0\" src=\"upload-createthumb-upload.php?l=140&src=../skiforum/upload/".$categoria_foto."/".$nome1."&categoria=".$categoria_foto."&nomefoto=".$nome1."\">";
    echo "thumbnail creata";
    ?>
    <p>Questa &egrave; la foto che hai appena caricato:</p>
    <p><img border="0" src="upload/<?php echo"$cat_upload"; ?>/preview/<?php echo "$nome1"; ?>"></p>
    
    • Faccio caricare una foto.
    • Con la funzione: upload-createthumb-upload.php creo una piccola anteprima.
    • Questa anteprima la faccio visualizzare subito dopo.
    • L'anteprima viene sempre creata PERO' nella pagina che contiene il codice seguente non viene sempre visualizzata.

    Ho il dubbio che succeda questo:
    l'anteprima viene chiamata prima che la funzione upload-createthumb-upload.php abbia effettivamente creato e messo nella cartella prevista l'immagine.

    Che soluzioni mi consigliate?
    Posso mettere, che ne so, un secondo di pausa appena dopo la chiamata della funzione che mi crea l'anteprima?

    Il problema mi pesa perchè l'utente non vedendo la fotina mi fa a"aggiorna la pagina" e questa mi carica sul server una seconda, terza,... volta la stessa identica foto. Ecco, secondo dubbio OT rispeto la mia richiesta principale, come posso vietare di fare il refresh della pagina?


  • Super User

    Potresti mettere il contenuto del file upload-createthumb-upload.php in una funzione chiamata createthumb(),così come lo script che visualizza l'immagine (funzione mostrathumb())
    Successivamente potresti richiamare prima la funzione createthumb e successivamente la funzione mostrathumb().
    In alternativa puoi mettere una pausa prima della visualizzazione dell'immagine così:

    [PHP]
    <? sleep(1);?>
    [/PHP]


  • Bannato User Attivo
    // adesso creiamo la thumbnail!!!
    echo "<img border=\"0\" src=\"upload-createthumb-upload.php?l=140&src=../skiforum/upload/".$categoria_foto."/".$nome1."&categoria=".$categoria_foto."&nomefoto=".$nome1."\">";
    echo "thumbnail creata";
    **// Ferma lo script per 2 secondi
    sleep(2);**
    ?>
    <p>Questa &egrave; la foto che hai appena caricato:</p>
    <p><img border="0" src="upload/<?php echo"$cat_upload"; ?>/preview/<?php echo "$nome1"; ?>"></p>
    <?
    

    Ho aggiunto lo sleep di ben due secondi e su tre foto caricate per 2 mi ha visualizzato l'anteprima mentre per la terza, proprio quando mi stavo convincendo di aver risolto il problema non me l'ha visualizzata.

    Sto usando firefox. La cosa dipende dal browser?

    Ieri su 40 foto caricate mi ha visualizzato l'anteprima per tutte... (sempre con firefox)


  • Bannato User Attivo

    <style type="text/css">
    .nodisp {
    display: none;
    }
    </style>
    come mai che con il browser OPERA non mi viene creata l'immagine di anteprima che con gli altri browser ottengo sftuttando questo codice?

    <?
    // adesso creiamo la thumbnail!!!
    echo "<div class=\"nodisp\">\n";
    echo "<img border=\"0\" src=\"uploads-createthumb-upload.php?l=140&src=../skiforum/upload/".$categoria_foto."/".$nome1."&categoria=".$categoria_foto."&nomefoto=".$nome1."\">\n";
    echo "thumbnail creata";
    echo"</div>\n";
    // Ferma lo script per 2 secondi
    //sleep(2);
    ?>
    

    Può essere che il display:none faccia si che OPERA non mi attivi la funzione richiamata in quel div.

    Se si, come posso non far apparire al visitatore la crocetta rossa di immagine mancante che tale funzione mi genera?


  • Super User

    puoi modificare lo script in modo che visualizzi l'immagine solamente dopo aver fatto il controllo di esistenza del file.

    p.s. non ho il link ad una pagina di esempio per poter controllare ma tra tutti quei parametri sicuro che non passi anche il nome del file con il quale viene creata la fotografia?

    in caso tu passi anche il nome di destinazione attento perchè con una semplicissima modifichina all'url si potrebbero generare sul tuo server migliaia di fotografie saturandoti lo spazio su disco disponbile.

    :ciauz:


  • Bannato User Attivo

    Problema risolto. Con Opera la direttiva DISPLAY: NONE da problemi.
    Usando:

    <style type="text/css"> 
    .hidden	{
    	position:absolute;
     	left:0px;
     	top:-500px;
     	width:1px;
     	height:1px;
     	overflow:hidden;
     	}
    </style>
    

    Anche Opera mi crea l'anteprima.

    Commenti al post precedente.
    Il controllo del file esistente o meno lo faccio per thumbnail nelle pagine del sito.

    Mi hai suggerito un OTTIMO CONTROLLO.
    Per evitare che qualcuno mi faccia creare l'anteprima delle SUE immagini nel MIO spazio applicherò la creazione delle preview SOLAMENTE SE la foto da rimpicciolire è presente in una cartella del mio spazio.

    Quindi ora mi metto al lavoro ed affino ulteriormente lo script con la condizione:

    if (preview non ancora esistente){
    if (la foto grande è nella posizione del mio spazio...) {
    CREO

    A proposito. Come faccio a dire allo script:
    se la foto è nel mio spazio procedi oppure fermarti e stampa (foto non presente nel mio spazio)


  • Super User

    if file_exists(nomefiledatrattare)

    il problema è definire tu da script il nome del file di destinazione e non passarlo come parametro altrimenti appena scopro l'url della tua pagina faccio uno script di questo tipo:

    for ($i=0;$i<10000;$i++)
    pagina.php?destinazione=$i;

    :ciauz:


  • Bannato User Attivo

    i parametri li passo via url però ho fatto questo controllo.
    ottengo il nome del file che tu vuoi usare per creare l'anteprima nel mio server, controllo che questo file sia sul MIO spazio.
    Se così non è non ti creo la preview.

    Al massimo qualcuno potrebbe divertirsi e farmi creare le anteprima di tutte le foto presenti nel mio sito. Magari in continuazione...
    Mmmm, brutta cosa.
    Cosa succede se dico al server di creare la stessa immagine che già esiste?