Pagina 2 di 2
Re: Uploader php
Inviato: mar 15 giu 2010, 13:47
da Paoletta
j0kers ha scritto:
4) C'è un limite alla dimensione dei file che puoi caricare. Guarda il file php.ini e cerca qualcosa come "post_max_size" o "upload_max_filesize"
50M
con il file php.ini di default il limite è settato a 2 mega...
Codice: Seleziona tutto
Maximum allowed size for uploaded files.
upload_max_filesize = 2M
Re: Uploader php
Inviato: mar 15 giu 2010, 14:20
da conraid
Inoltre userei move_uploaded_file o al massimo rename, perché tenere una copia in /tmp? ti è necessaria?
al resto ti hanno risposto emanuele e paoletta. Se vuoi usare \n ed avere un comportamento simile sia a browser sia in output standard usa nl2br() quando vuoi mostrare su browser, ma nel tuo caso non so quanto ti serva, mi sembra tutto a browser
poi naturalmente se metti in produzione cerca di prevenire errori, controlla l'input, etc...
io ho provato il tuo codice, con le correzioni che ti ho detto e con l'aggiunta di qualche riga per debug e mi funziona, anche se non avrei fatto così
comunque questo è quello che ho testato e mi funziona
Codice: Seleziona tutto
<?php
$up_path = "upload";
echo '<html>
<title>Upload file</title>
<body>';
function num_upload() {
echo '<form action="upload.php" method="post">
How many images do you want to upload?
<input type="text" name="num">
<input type="submit" value="Submit">
</form>';
}
function multi_upload($num) {
echo '<form action="upload.php" enctype="multipart/form-data" method="post">
<table border="0" width="400" cellspacing="0" cellpadding="0" align=center>';
for ($i = 1; $i <= $num; $i++) {
echo '<tr><td>'."Image ".$i.": ".'</td>
<td><input type="file" name="image[]"></td></tr>
<tr><td>'."Desc. ".'</td>
<td><input type="text" name="desc[]"></td></tr>';
}
echo '<tr><td colspan=2 align=center>
<input type=submit value="Add Image(s)"></td></tr>
</table></form>';
}
function upload($up_path) {
$j = 1;
while (list($key,$value) = each($_FILES['image']['name'])) {
print "1<br>\n";
//list($desc_k,$desc_v) = each($_REQUEST['desc']['name']);
echo "2<br>\n";
if (! empty($value)) {
echo $value."<br>\n";
$filename = $value;
$filename = str_replace(" ","_",$filename);
$filename = str_replace("'","",$filename);
echo $filename."<br>\n";
$path = $up_path."/".$filename;
if (file_exists($path)) {
echo "The file ".$filename." already exists.\n";
break;
}
echo $path."<br>\n";
$tempfile=$_FILES['image']['tmp_name'][$key];
echo $tempfile."<br>\n";
if (file_exists($tempfile)) {
echo "The file ".$tempfile." exists.\n";
} else {
echo "The file ".$tempfile." not exists.\n";
}
if (copy($tempfile,$path))
echo "File ".$j." caricato<br>\n";
else {
echo "Errore nella copia";
}
if (chmod($path,0660))
echo "File ".$j." chmod'd<br>\n";
if (! empty($desc[$j])) {
$desc_file = fopen("$path/.pics_desc","a");
$imgdesc = $desc_v;
$imgdesc = str_replace("\n"," ",$imgdesc);
$write = $filename.";".$desc_v."\n";
fwrite($desc_file,$write);
fclose();
}
$j++;
}
}
}
num_upload();
if (! empty($_REQUEST['num'])) {
echo'<br /><p>';
multi_upload($_REQUEST['num']);
echo '</p>';
}
if (! empty($_FILES['image'])) {
$up_path = "upload";
echo $_FILES['image']."<br>\n";
echo '<br /><p>';
upload($up_path);
echo '</p>';
}
echo '</body></html>';
il file si chiama upload.php ed è nella directory /home/htdocs/prova ed ho creato una directory /home/htdocs/prova/upload con i permessi per apache
/home/htdocs è la mia docroot
Re: Uploader php
Inviato: mar 15 giu 2010, 18:07
da Paoletta
relativamente alla variabile globale $up_path, il tuo problema è che non la richiami correttamente all'interno della funzione; per far questo basta usare la direttiva global, in modo da informare php che ti riferisci alla variabile globale (e non ad una interna alla funzione).
Qui c'è il codice:
Codice: Seleziona tutto
<?php
$up_path="upload";
echo '<html>
<title>Upload file</title>
<body>';
function num_upload() {
echo '<form action="upload.php" method="post">
How many images do you want to upload?
<input type="text" name="num">
<input type="submit" value="Submit">
</form>';
}
function multi_upload($num) {
echo '<form action="upload.php" enctype="multipart/form-data" method="post">
<table border="0" width="400" cellspacing="0" cellpadding="0" align=center>';
for ($i = 1; $i <= $num; $i++) {
echo '<tr><td>'."Image ".$i.": ".'</td>
<td><input type="file" name="image[]"></td></tr>
<tr><td>'."Desc. ".'</td>
<td><input type="text" name="desc[]"></td></tr>';
}
echo '<tr><td colspan=2 align=center>
<input type=submit value="Add Image(s)"></td></tr>
</table></form>';
}
function upload() {
$j = 1;
while (list($key,$value) = each($_FILES['image']['name'])) {
global $up_path;
print "1 <br/>";
//list($desc_k,$desc_v) = each($_REQUEST['desc']['name']);
echo "2 <br/>";
if (! empty($value)) {
echo $value."<br/>";
$filename = $value;
$filename = str_replace(" ","_",$filename);
$filename = str_replace("'","",$filename);
echo $filename."<br/>";
$path = $up_path."/".$filename;
if (file_exists($path)) {
echo "The file ".$filename." already exists.<br/>";
break;
}
echo $path."<br/>";
if (copy($_FILES['image']['tmp_name'][$key],$path))
echo "File ".$j." caricato<br/>";
else {
$error=error_get_last();
echo "Errore nella copia".$error['message'];
}
if (chmod($path,0660))
echo "File ".$j." chmod'd<br/>";
if (! empty($desc[$j])) {
$desc_file = fopen("$path/.pics_desc","a");
$imgdesc = $desc_v;
$imgdesc = str_replace("<br/>"," ",$imgdesc);
$write = $filename.";".$desc_v."<br/>";
fwrite($desc_file,$write);
fclose();
}
$j++;
}
}
}
num_upload();
if (! empty($_REQUEST['num'])) {
echo'<br /><p>';
multi_upload($_REQUEST['num']);
echo '</p>';
}
if (! empty($_FILES['image'])) {
echo $_FILES['image']."<br/>";
echo '<br /><p>';
upload();
echo '</p>';
}
echo '</body></html>';
?>
In questo modo risparmi anche l'utilizzo delle variabili di sessione (utili quando lavori con un insieme di script);
Re: Uploader php
Inviato: mer 16 giu 2010, 10:58
da Ansa89
Ok, grazie per le 1000 risposte dettagliate.
Non so bene a chi/cosa rispondere, quindi mi limito a ringraziare tutti.
Adesso farò qualche prova e se avrò ancora dei dubbi posterò qui
.
Grazie per la vostra disponibilità.
Re: Uploader php
Inviato: mer 16 giu 2010, 11:07
da conraid
Ansa89 ha scritto:Ok, grazie per le 1000 risposte dettagliate.
Non so bene a chi/cosa rispondere, quindi mi limito a ringraziare tutti.
Adesso farò qualche prova e se avrò ancora dei dubbi posterò qui
.
Grazie per la vostra disponibilità.
comunque se vuoi un consiglio rivedi il tutto, nel manuale php c'è una parte apposita per l'upload dei file, con tanto di descrizione degli errori
Re: Uploader php
Inviato: mer 16 giu 2010, 11:15
da Ansa89
conraid ha scritto:rivedi il tutto
Sì, quello è da considerare solo come "prova", giusto per capire come funziona.
Guarderò anche il manuale online di php.
Re: Uploader php
Inviato: mer 16 giu 2010, 11:19
da conraid
e questo solo per il php, anche l'html... ehm... sa di anni '90 usare le tabelle per quelle cose, poi con le impostazioni nei tag... brrrrrrrrr
Re: Uploader php
Inviato: mer 16 giu 2010, 11:21
da Ansa89
conraid ha scritto:l'html... ehm... sa di anni '90 usare le tabelle per quelle cose, poi con le impostazioni nei tag... brrrrrrrrr
Me l'hanno insegnato in terza superiore...ho detto tutto.
Re: Uploader php
Inviato: sab 19 giu 2010, 17:39
da Ansa89
Vi posto il lavoro ultimato (nel senso che per me va bene così e non andrò oltre).
I tag sembrano arrivare direttamente dall'inizio anni '90 e me ne scuso (per chi non l'avesse ancora capito, io non so programmare in html/php).
Codice: Seleziona tutto
<?php
echo '<html>
<title>Upload file</title>
<body bgcolor="Teal">
<center>';
function num_upload() {
echo '<form action="upload.php" method="post">
How many images do you want to upload?
<br /><input type="text" name="num">
<input type="submit" value="Submit">
</form>';
}
function multi_upload($num) {
if ($num > 10)
$num = 10;
echo '<form action="upload.php" enctype="multipart/form-data" method="post">
<table border="0" width="400" cellspacing="0" cellpadding="0" align=center>';
for ($i = 1; $i <= $num; $i++) {
echo '<tr><td>'."Image ".$i.": ".'</td>
<td><input type="file" name="image[]"></td></tr>
<tr><td>'."Desc. ".'</td>
<td><input type="text" name="desc[]"></td></tr>';
}
echo '<tr><td><br /></td></tr>
<tr><td colspan=2 align=center>
<input type=submit value="Add Image(s)"></td></tr>
</table>
<input type="hidden" name="num_up" value="'.$num.'">
</form>';
}
function upload($up_path, $num_up) {
$allowed_ext = array('.jpg','.jpeg','.gif','.png');
$desc_path = "$up_path/.pics_desc";
if (! file_exists($up_path)) {
$mode = 0755;
$recursive = true;
if (! mkdir($up_path,$mode,$recursive))
echo "Error creating upload directory ".$up_path.'<br />';
}
if ($num_up > 10)
$num_up = 10;
for ($i = 0; $i < $num_up; $i++) {
$filename = $_FILES['image']['name'][$i];
if (! empty($filename)) {
$pos = strrpos($filename,".");
$ext = strtolower(substr($filename,$pos,(strlen($filename) - $pos)));
if (! in_array($ext,$allowed_ext)) {
echo "Error: file type not allowed (\"".$ext."\").".'<br /><br />';
echo "Allowed extensions: \"".implode("\", \"",$allowed_ext)."\".".'<br />';
continue;
}
$filename = str_replace(" ","_",$filename);
$filename = str_replace("'","",$filename);
$filename = str_replace("(","",$filename);
$filename = str_replace(")","",$filename);
$filename = str_replace("[","",$filename);
$filename = str_replace("]","",$filename);
$filename = str_replace("{","",$filename);
$filename = str_replace("}","",$filename);
$path = $up_path."/".$filename;
if (file_exists($path)) {
echo "The file ".$filename." already exists.".'<br />';
continue;
}
if (move_uploaded_file($_FILES['image']['tmp_name'][$i],$path))
echo "Image ".($i + 1)." loaded.".'<br />';
else {
echo "Upload error on image ".($i + 1).'.<br />';
continue;
}
if (! chmod($path,0660))
echo "Chmod error on image".($i + 1).'.<br />';
$desc_file = fopen("$desc_path","a");
$write = $filename.";";
if (! fwrite($desc_file,$write))
echo "Error writing ".$desc_path." for ".$filename.'.<br />';
if (! empty($_REQUEST['desc'][$i])) {
$imgdesc = $_REQUEST['desc'][$i];
$imgdesc = str_replace("\n"," ",$imgdesc);
$write = $imgdesc."\n";
if (! fwrite($desc_file,$write))
echo "Error writing description for ".$filename.'.<br />';
}
else
if (! fwrite($desc_file,"\n"))
echo "Error writing ".$desc_path." for ".$filename.'.<br />';
if (! fclose($desc_file))
echo "Error closing ".$desc_path.'.<br />';
}
}
}
num_upload();
if (! empty($_REQUEST['num'])) {
echo'<br /><p>';
multi_upload($_REQUEST['num']);
echo '</p>';
}
if (! empty($_FILES['image']) && ! empty($_REQUEST['num_up'])) {
$up_path = 'upload';
echo '<br /><p>';
upload($up_path,$_REQUEST['num_up']);
echo '</p>';
}
echo '</center></body></html>';
?>