Newsgroup: it.comp.www.php
Titolo: Un aiuto ad un neofita... disperato

Salve a tutti. Sto battendo la testa contro il muro per un problema
che, magari per molti di voi sarà una banalità.
Ho scritto il seguente codice per un upload di files.
Tutto bene, dal form tutto passa... l'uploadfile nei suoi parametri
viene realizzato e salvato nel file temporaneo.
Ma non riesco però a copiarlo dove vorrei. Ho provato in tutte le
maniere... niente....
<?php
echo "<pre>";
echo "Nome del file locale creato dopo l'invio: $uploadfile\n";
echo "Nome originale del file remoto: $uploadfile_name\n";
echo "Dimensioni del file in byte: $uploadfile_size\n";
echo "Tipo di file: $uploadfile_type\n";
echo "</pre>";
//esiste davvero un file?
if ($uploadfile =="none") {
echo "Non è stato inviato alcun file<br />";
echo "Ritorna al <a href=\"upload.htm\">form per inviare il file</a>";
exit;
}
//controlla le dimensioni del file <100K
if ($uploadfile_size < 102400) {
if(copy($uploadfile, "C:\AppServ\www\images\libri\\$uploadfile_name"))
{
echo "Invio del file riuscito";
//cancella il file temporaneo
unlink ($uploadfile);
} else {
echo "Invio del file fallito";
}
} else {
echo "Spiacente, il file da inviare non deve superare le dimensioni di
100 KB<br />";
}
?>
------------------------------------------------------------------------
Ho provato in tutte le maniere, ho raddoppiato le \, ho cambiato mille
directories, ma niente da fare. Ho verificato anche il file php.ini,
che mi sembra a posto. Il messaggio è sempre lo stesso:
Warning: copy(C:\AppServ\www\images\libri\banner-accommodation-in-
tus.jpg) [function.copy]: failed to open stream: No such file or
directory in D:\Inetpub\webs\italiarestauroit\uploadit.php on line 27
Dove sto sbagliando?

> Dove sto sbagliando?
hai provato ad utilizzare
move_uploaded_file($uploadfile, "C:\AppServ\www\images\libri\$name");
?

michelangelo giacomelli ha scritto:

Forse "C:\\AppServ\\www\\images\\libri\\$name"?

 ha scritto nel messaggio 
news:efff0f54-0d96-4ab7...@z30g2000yqz.googlegroups.com...
Salve a tutti.
Non ho capito bene dov� che ti intacchi, comunque questo � un codice 
semplicissimo di come si effettua l'upload dei file via PHP.
E' descritto su 2 pagine ma pu� essere anche messo in una sola pagina PHP
Per eseguire il trasferimento di un file sul server il linguaggio di 
scripting PHP
mette a disposizione la funzione move_uploaded_file() .
Tale funzione accetta tre parametri obbligatori,
ovvero il percorso del file sul client che lo invia,
il percorso della directory remota in cui caricare il file
ed il nome con cui dovr� essere caricato il file,
che per default � il nome originario del file sul client.
L'upload dei file puo' essere realizzato creando due files:
1) un modulo di selezione del files da uploadare (esempio: upload.html)
2) uno script PHP che effettua l'upload (esempio: upload.php)
----------------------------------------------------------------------
Di seguito il codice HTML del modulo upload.html
----------------------------------------------------------------------
<html>
<body>
<form method="post" action="upload.php" enctype="multipart/form-data">
    <input type="file" name="miofile">
    <input type="submit" value="Upload">
</form>
</body>
</html>
------------------------------------------------------------------------
----------------------------------------------------------------------
Di seguito il codice commentato del file upload.php
---------------------------------------------------------------------
<?PHP
    // RECUPERO I PARAMETRI DA PASSARE ALLA FUNZIONE PREDEFINITA PER 
L'UPLOAD
    $cartella = 'upload/';
    $percorso = $_FILES['miofile']['tmp_name'];
    $nome = $_FILES['miofile']['name'];
    // ESEGUO L'UPLOAD CONTROLLANDO L'ESITO
    if (move_uploaded_file($percorso, $cartella . $nome))
    {
        print "Upload eseguito con successo";
    }
    else
    {
        print "Si sono verificati dei problemi durante l'Upload";
    }
?>
------------------------------------------------------------------------------------
Oltre alla funzione move_uploaded_file() vediamo che il codice del file 
upload.php viene aperto
con un riferimento all'oggetto $_FILE[][] che lavora come variabile 
d'ambiente
nel recupero di informazioni sul file specificato come primo parametro;
il secondo parametro � rappresentato dalla collezione a cui fa riferimento 
$_FILE[][]
nel recupero delle informazioni.
E' possibile sfruttare questo oggetto per eseguire controlli,
ad esempio, sul tipo di file e sulle sue dimensioni,
per ottenere Upload controllati e coerenti a seconda delle esigenze 
dell'amministratore del sito,
ad esempio solo immagini in un certo formato, file di testo, ecc...
Per ottenere queste informazioni � possibile utilizzare le collezioni:
$_FILES['miofile']['type']
$_FILES['miofile']['size']
Il valore di size � espresso in byte.
Secondo me, per imparare e testare, dovresti evitare i controlli (esiste 
davvero un file, controlla le dimensioni del file ecc.)
Che esiste lo sai, la dimensione massima la stabilirai quando funzioner� 
ecc. Con troppi controlli c'� il rischio di perdersi e di non capire se � il 
controllo che non funziona o � la parte principale del codice.
Ciao
Leonardo

 Leonardo
-----------------------
Grazie Leonardo.
Ho provato anche così. Temo però che il problema sia tutto nel
percorso dove copiare il file (copy o, meglio, move_uploaded_file) che
sul mio pc (windows e cs3 dreamweaver) è C:\AppServ\www\images\libri\
$name, che io non riesco ad inserire correttamente.
Oppure un problema di permessi (e davvero non so dove andare ad
impostarli).
Non so altrimenti il motivo, per quanti cambiamenti abbia fatto, del
persistere di questo messaggio (o simile)
Warning: copy(C:\AppServ\www\images\libri\banner-accommodation-in-
tus.jpg) [function.copy]: failed to open stream: No such file or
directory in D:\Inetpub\webs\italiarestauroit\uploadit.php on line 27
Dato che l'immagine mi serve soprattutto per un database di libri
(sono copertine). L'alternativa sarebbe caricare direttamente
l'immagine sul server mysql, come formato blob, presumo. Non mi
aiuterebbe a risolvere questo problema ma almeno.... Hai qualche
"dritta" per caso? Ho trovato solo codice estremamente complesso
(almeno per me).
In ogni caso grazie.
Claudio

 persistere di questo messaggio (o simile)
Problema di percorso.
Devi mettere la cartella come ti ho scritto, in questa maniera e testarlo, 
sicuramente funziona.
In caso contrario hai dei problemi di scrittura per quella cartella ed � in 
quella direzione che va risolto il problema.
Poi, solo poi, ti devi occupare delle cartella dove andr� realmente.
Fai cos�: Metti manualmente un file nella cartella dove andr� realmente, 
dalla pagina upload.html (modo progettazione) inserisci un link al file che 
hai inserito nella cartella dove andr� realmente.
In Seleziona file, casella URL potri vedere il percorso senza possibilit� di 
errori. Naturalmente � senza il nome del file che hai inserito.
Nell'esempio che ti ho mandato � quello che devi sostituire a upload/ 
(attenzione alla barra finale).
 $cartella = 'upload/';
Fai un passo per volta
Stai scrivendo qualcosa del genere?
http://www.massodellefate.it/mf/pagine/LIBRO.php?ID=398
Saluti
Leonardo

spazza ha scritto:

ah beh sorry non vedo windows dal 2001... cmq vero le slah vanno quotate
errore mio imperdonabile...