Newsgroup: it.comp.www.php
Titolo: Problema con il form per file e javascript

Il problema č che utilizzando il submit di javascript
$_FILES['videoName']['name']
c'č,
mentre
$_FILES['videoName']['tmp_name']
no
Mi spiego meglio sto creando un form per uploadare video.
Siccome i tempi per il trasferimento dei file sono lunghi, ho pensato di
utilizzare "ajax" in questo modo:
la pagina contiene il form visibile e la gif animata progressbar nascosta.
clickando sul pulsante send, nasconde il form, visualizza la gif e spedisce
il form con questa funzione:
function submitFile( idLoading, idForm, page, video )
{
        // loading image
        createElement( idLoading, idForm );
        visibleLoading( true );
        // aziono il form
        video.action = page;
        video.submit();
};
Quando carica la pagina "page"
$_FILES['videoName']['name']
ossia il nome del file e' presente, mentre
$_FILES['videoName']['tmp_name']
ossia il nome del file temporaneo non c'e'
ed io non posso eseguire la funzione move_uploaded_file()
Qualcuno sa spiegarmi perchč e come posso risolvere questo problema ?
Ho provato a cercare in rete ma niente.
Grazie

 Qualcuno sa spiegarmi perchè e come posso risolvere questo problema ?


 esecuzione dello script all'infinito.
Questi sono i valori (ricavati con la funzione phpinfo() ):
memory_limit = 128M
post_max_size = 8M
upload_max_filesize =   2M

 metterci ;-)
E' vero e questo problema è risolto, però me ne nasce un altro:
non ho modificato il file di configurazione, ma ho provato con un file
più piccolo (per ora sto solo facendo delle prove), ed effettivamente la
variabile $_FILE[form]["tmp_name"] ora c'è.
però  ci sono dei problemi:
una volta compilato il form, la action aprirà la pagina che contine questo:
<div id="divUpLoad" ></div>
<script type="text/javascript">
        uploadFile( 'testo.php', 'divLoading', 'divUpLoad', '<?
                echo( $videoForm[ "name" ] ); ?>', '<?
                echo( $videoForm[ "temp" ] ); ?>' );
</script>
all'interno viene inclusa una classe, della quale riporto solo una parte:
// Valori del form upload video
$videoForm = array(     "name" => "",
                        "type" => "",
                        "size" => "",
                        "temp" => "",
                        "error" => "" );
$videoForm[ "name" ] = basename( $_FILES['videoName']['name'] ); // nome
originale
$videoForm[ "type" ] =  $_FILES['videoName']['type']; // tipo di file
$videoForm[ "size" ] = $_FILES['videoName']['size']; // grandezza in byte
$videoForm[ "temp" ] = $_FILES['videoName']['tmp_name']; // nome temporaneo
$videoForm[ "error" ] = $_FILES['videoName']['error']; // errore
// ---> INIZIO CLASSE
class flatcrew_cvf
{
[...]
/***********************************************\
* upload( $nome, $temp )                        *
*-----------------------------------------------*
* copio il video sul sever. Restituisce il nome *
* completo del video                            *
\***********************************************/
function upload( $nome, $temp )
{
        $destinazione = $this->get_name_video( $nome );
        if( file_exists( $destinazione ) )
        {
                // Esiste gia' il file sul server
                echo( "Errore: $nome esisteste gi&egrave; sul server" );
        } else {
                // Copio il video sul server
                move_uploaded_file( $temp, $destinazione )
                or die( "Errore nella copia del video $destinazione $temp");
        }
        return( $destinazione );
}
[...]
// FINE DELLA CLASSE
}
e tra le funzioni javascript:
function uploadFile( scriptFile, idLoading, idForm, nome, temp )
{
        // creo l'oggetto
        ajax = createHttpRequest();
        // loading image
        createElement( idLoading, idForm );
        visibleLoading( true );
        // impostazione richiesta asincrona
        // del file specificato
        ajax.open( "post", scriptFile, true );
 
        // impostazione controllo e stato della richiesta
        ajax.onreadystatechange = handleStateChange;
ajax.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded;" );
        // invio richiesta
        ajax.send( "nome="+nome+"&temp="+temp );
};
infine il file di prova testo.php (richiamato da ajax):
<?
require("../libs_adm/config_adm.php");  // Carico il file di configurazione
// Apro la libreria
require( "../libs_adm/flatcrew_cvf_adm.php" );
$video = new flatcrew_cvf( 4000000, "../video" );
$video->upload( $_POST["nome"], $_POST["temp"] );
?>
Il risultato è:
Errore nella copia del video ../video/prev_casa_loggiato.pdf /tmp/phpOng9vI
quindi il nome del file ed il file temporaneo vengono passati
ma non lo copia, la dir video (che ha i permessi idonei) rimane vuota.
La funzione upload della classe, prima che la usassi con ajax, funzionava.
Ti ringrazio anticipatamente per l'aiuto. Ciao.