- Home
- Categorie
- Coding e Sistemistica
- PHP
- upload immagini sul server
-
upload immagini sul server
Ciao a tutti.
Mi rivolgo a questo forum perchè so che, come altre volte è successo, ho avuto qui la risoluzione ai miei problemi.
Sto tentando di caricare immagini sul server insieme ad un messaggio di testo utilizzando un file.txt senza database. Il risultato è che il messaggio arriva ma l'immagine no. La destinazione è la cartella public.
Di seguito riporto i file incriminati, qualcuno mi può dare una mano a capire dove sta l'errore? Grazie anticipate.Questo è il form di invio:
[html]
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>form</title>
</head>
<body>
<form enctype="multipart/form-data" action="upload.php" method="POST">
<br>Nome
<input type="text" name="nome" size="20">
<br>Recapito
<input type="text" name="recapito" size="20">
<p>Oggetto
<br> <textarea name="oggetto" rows="3" cols="40"></textarea> </p>
<input type="hidden" name="MAX_FILE_SIZE" value="30000">
Invia questo file: <input name="userfile" type="file">
<input type="submit" value="Invia file"> </form>
</body>
</html>
[/html]questo è l'upload
[php]
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>upload</title>
</head>
<body>
<?
//percorso della cartella dove mettere i file caricati
$uploaddir = '/public/';if (!empty($_POST['nome'])){
$nome = $_POST['nome'];
}
if (!empty($_GET['nome'])){
$nome = $_GET['nome'];
}
if (!empty($_POST['recapito'])){
$recapito = $_POST['recapito'];
}
if (!empty($_GET['recapito'])){
$recapito = $_GET['recapito'];
}
if (!empty($_POST['oggetto'])){
$oggetto = $_POST['oggetto'];
}
if (!empty($_GET['oggetto'])){
$oggetto = $_GET['oggetto'];
}echo "<center>";
echo "Ciao ecco i risultati del tuo inserimento:";
$errore= false;
If((!$nome) || (!$recapito) || (!$oggetto)) {
#controllo che nessun campo sia vuoto
$errore=true;
echo "Non hai compilato tutti i campi <a href="upload.html">torna
indietro</a>";
exit;
}
else{
echo " i campi sono ok";
}//Recupero il percorso temporaneo del file
$userfile_tmp = $_FILES['userfile']['tmp_name'];
//recupero il nome originale del file caricato
$userfile_name = $_FILES['userfile']['name'];echo "<HR>";
che il file sia accessibile
if (!$apri = fopen ("file.txt","a+"))
{
$errore=true;
echo "non posso aprire il file";
}else{
$apriw = fopen ("file.txt","a+");
#ora creo una variabile che contiene la linea di separazione
$linea ="<hr color=red>";e sul file scrivo nome e vado a capo,il recapito e vado a capo
l'oggetto e vado a capo e la linea ti separazione
fputs($apriw,"$nome\n");
fputs($apriw,"$recapito\n");
fputs($apriw,"$oggetto\n");
fputs($apriw,"<img src=$userfile_name>\n");
fputs($apriw,"$linea");#chiudo il file
fclose($apriw);
}
#se c'e l'errore mi dice di inserirli di nuovo altrimenti mi fa leggere gli annunci
if($errore){
echo"<br> Riinseriscili per favore<br>";
} else{
echo "<br> <a href="annunci.php">leggi gli annunci</a>";
}
?>
</body>
</html>
[/php]Questo dovrebbe elencare i messaggi inviati al server:
[php]
<?php
echo "Ecco i vostri annunci<br>";
if (!$apri = fopen("file.txt","r")){
echo "Non posso aprire il file";
}else{#Se il file si può leggere allora con un ciclo while
leggo tutte le righe del mio file
while(!feof($apri)){
$leggo = fgets($apri,255);
echo "$leggo<br>";
}
}
fclose($apri);
?>
[/php]Ancora grazie, ciao.
-
Ciao eisenblu,
manca proprio la funzione che copia l'immagine sullo spazio web.
-
Ciao Darki
Pensavo proprio che mancasse qualcosa... non è che me la puoi suggerire?
-
Ciao,
puoi provare con qualcosa del genere, la cartella "images" devi cambiarla con il percorso che ti serve[php]if (!move_uploaded_file($_FILES['userfile']['name'], './images/'.$_FILES['userfile']['name'])) {
echo "<p>Errore nel caricamento dell'immagine!!</p>";
}[/php]
-
Ciao Noice
Purtroppo continua a darmi errore nel caricamento dell'immagine, non so se sia la posizione del codice o altro, io l'ho messo qui:[php]
......
//Recupero il percorso temporaneo del file
$userfile_tmp = $_FILES['userfile']['tmp_name'];
//recupero il nome originale del file caricato
$userfile_name = $_FILES['userfile']['name'];if (!move_uploaded_file($_FILES['userfile']['name'], '/images/'.$_FILES['userfile']['name'])) {
echo "<p>Errore nel caricamento dell'immagine!!</p>";
}
...
[/php]
Che ne pensi?
-
Prova così:
[php]<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>upload</title>
</head>
<body>
<?php
//percorso della cartella dove mettere i file caricati
$uploaddir = './public/';if (!empty($_POST['nome'])){
$nome = $_POST['nome'];
}
if (!empty($_GET['nome'])){
$nome = $_GET['nome'];
}
if (!empty($_POST['recapito'])){
$recapito = $_POST['recapito'];
}
if (!empty($_GET['recapito'])){
$recapito = $_GET['recapito'];
}
if (!empty($_POST['oggetto'])){
$oggetto = $_POST['oggetto'];
}
if (!empty($_GET['oggetto'])){
$oggetto = $_GET['oggetto'];
}echo "<center>";
echo "Ciao ecco i risultati del tuo inserimento:";
$errore= false;
If((!$nome) || (!$recapito) || (!$oggetto)) {
#controllo che nessun campo sia vuoto
$errore=true;
echo "Non hai compilato tutti i campi <a href="upload.html">torna
indietro</a>";
exit;
}
else{
echo " i campi sono ok";
}if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
$userfile_tmp = $_FILES['userfile']['tmp_name'];
$userfile_name = $_FILES['userfile']['name'];if (!move_uploaded_file($userfile_tmp, $uploaddir.$userfile_name)) {
echo "<p>Errore nel caricamento del file!!</p>";
die();
}
}
echo "<HR>";
che il file sia accessibile
if (!$apri = fopen ("file.txt","a+"))
{
$errore=true;
echo "non posso aprire il file";
}else{
$apriw = fopen ("file.txt","a+");
#ora creo una variabile che contiene la linea di separazione
$linea ="<hr color=red>";e sul file scrivo nome e vado a capo,il recapito e vado a capo
l'oggetto e vado a capo e la linea ti separazione
fputs($apriw,"$nome\n");
fputs($apriw,"$recapito\n");
fputs($apriw,"$oggetto\n");
fputs($apriw,"<img src=$userfile_name>\n");
fputs($apriw,"$linea");#chiudo il file
fclose($apriw);
}
#se c'e l'errore mi dice di inserirli di nuovo altrimenti mi fa leggere gli annunci
if($errore){
echo"<br> Riinseriscili per favore<br>";
} else{
echo "<br> <a href="annunci.php">leggi gli annunci</a>";
}
?>
</body>
</html>[/php]
-
Mah!! purtroppo continua a darmi errore, questo:
Ciao ecco i risultati del tuo inserimento: i campi sono ok.
Warning: move_uploaded_file(./public/casa_viola.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in D:\Inetpub\webs\tirumapifortit\public\upload.php on line 48
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\PHP\upload\php38A7.tmp' to './public/casa_viola.jpg' in D:\Inetpub\webs\tirumapifortit\public\upload.php on line 48
Errore nel caricamento del file!!
-
Quell'errore significa che la cartella di destinazione non esiste o non e' in quella posizione, modifica la stringa
[PHP]$uploaddir = './public/';[/PHP]
partendo dalla radice
-
Ho modificato così:
[php]
//percorso della cartella dove mettere i file caricati
$uploaddir = './miodominio.it/public/';
[/php]Ovviamente con http e www davanti a miodominio, ma continua a darmi lo stesso errore.
-
Mh no, sei andato troppo indietro nel percorso
con radice intendo la cartella in cui hai (o di norma c'e') l'index.php
-
Ciao Noice,
ho problemi di connessione alla rete, appena posso farò qualche prova e poi ti dirò, grazie
-
Ciao Noice, alleluia! Sono finalmente riuscito a trasferire delle immagini sul server.
La cosa però non riesce sempre, può dipendere secondo te dalla dimensione dell'ìmmagine? E se sì c'è un modo per consentire di trasferire files più pesanti?
Grazie ciao!
-
Ho risolto! Non avevo visto che nel form c'è il "max_file_size".
Grazie a tutti
-
Ciao,
nel tuo form e' presente un campo hidden per la dimensione massima dei files in upload (30kb nel tuo caso)
[HTML]<input type="hidden" name="MAX_FILE_SIZE" value="30000">
[/HTML]
ma manca il controllo di quest'ultimo nell'upload.php. In pratica e' qualcosa del genere:
[PHP]if ($_FILES['userfile'] > $_POST['MAX_FILE_SIZE']) {
echo "il file e' troppo grande";
}else{ // istruzioni
}[/PHP]altrimenti puoi controllare e modificare nel php.ini la stringa relativa:
upload_max_filesize = 2M
-
OK Noice, grazie ciao