-
php upload file
Sapete dirmi dove sbaglio...
Codice PHP:
<?php
if(isset($_POST["carica"])){
$nome_temporaneo = $_FILES['file']['tmp_name'];
$nome = $_FILES['file']['name'];
$size = $_FILES['file']['size'];
$tipo = $_FILES['file']['type'];
$error = $_FILES['file']['error'];
$contenuto = addslashes(file_get_contents($nome_temporaneo));
if($size < 50000){
if(!$error > 0){
if(stripos($tipo,'image/') != false){
if(!file_exists("/".$nome)){
if(move_uploaded_file($nome,"/{nome}")){
echo "
File caricato con successo.<br>
Nome: <b>{$nome}</b><br>
Tipo: <b>{$tipo}</b><br>
Dimensione: <b>{$size} kb</b><br>
";
}else{
echo "C'è stato un problema durante l'upload!";
}}else{
echo "Il file è già presente sul server";
}}else{
echo "Il file non e un immagine";
}}else{
echo "C'è stato un problema durante l'upload! Codice Errore: {$error}";
}}else{
echo "Dimensioni del file eccessive, il file non può superare i 50000 bytes.";
}}?>
-
Mmh, innanzitutto pare tu abbia sbagliato questa riga:
Codice PHP:
if(move_uploaded_file($nome,"/{nome}")){
dove hai dimenticato di mettere la $ di variabile nel nuovo percorso ed inoltre il primo argomento di move_uploaded_file() deve essere il nome temporaneo, non quello originale. Quindi:
Codice PHP:
if(move_uploaded_file($nome_temporaneo,"/{$nome}")){
Inoltre è sbagliata anche la directory in cui tu vuoi caricare il file: mettendo /nome_file.ext come secondo argomento PHP tenterà di andare a scrivere il file nella root del server e non nella tia root. Di conseguenza, non avendo il tuo account i permessi di root, non potrai andarci a scrivere. Stessa cosa vale per il controllo sull'esistenza o meno del file. Ti conviene creare una cartella chiamata per esempio upload in cui vai a caricare i files. Quindi il codice dovrebbe diventare:
Codice PHP:
<?php
if(isset($_POST["carica"]))
{
$nome_temporaneo = $_FILES['file']['tmp_name'];
$nome = $_FILES['file']['name'];
$size = $_FILES['file']['size'];
$tipo = $_FILES['file']['type'];
$error = $_FILES['file']['error'];
$contenuto = addslashes(file_get_contents($nome_temporaneo));
if($size < 50000)
{
if(!$error > 0)
{
if(stripos($tipo,'image/') != false)
{
if(!file_exists("upload/".$nome))
{
if(move_uploaded_file($nome,"upload/{$nome}"))
{
echo "
File caricato con successo.<br>
Nome: <b>{$nome}</b><br>
Tipo: <b>{$tipo}</b><br>
Dimensione: <b>{$size} kb</b><br>
";
}
else
{
echo "C'è stato un problema durante l'upload!";
}
}
else
{
echo "Il file è già presente sul server";
}
}
else
{
echo "Il file non e un immagine";
}
}
else
{
echo "C'è stato un problema durante l'upload! Codice Errore {$error}";
}
}
else
{
echo "Dimensioni del file eccessive, il file non può superare i 50000 bytes.";
}
}
?>
Ora dovrebbe andare (non l'ho testato).
Ciao!
-
Ti spiego cosa e che non va....^^
1)la parte di codice php
Codice PHP:
if(stripos($tipo,'image/') !== false){
mi da errore
Codice PHP:
Fatal error: Call to undefined function: stripos() in
2)Vorrei caricare più file contemporaneamente come posso fare....
-
Se vuoi utilizzare la funzione stripos(), devi attivare php5.
-
si può usare qualcos'altro al posto di stripos senza attivare php 5....
p.s
Potresti dirmi dove sto sbagliando qui...
Codice PHP:
<?php
error_reporting(E_ALL);
if(isset($_POST["carica"])){
#Variabili
$dir_upload = "upload/";#directory dove effettuare l'upload
$permessi_dir = "0700";# permessi della directory
$dim_massima = "512000";#dimensione massima upload in kb
$sovrascrivi_file=0;# 1=sovrascrivi i files se esistenti, 0=non sovrascrivere i files
$check_file=1;# 1=controlla il tipo di file, 0=non controllare
$numero = 0;
#Variabili
if(count($_FILES) > 0){
$numero_file = count($_FILES['file']['tmp_name']);
for($i=0;$i<$numero_file;$i++){
$nome_temporaneo = $_FILES['file']['tmp_name'][$i];
$nome = $_FILES['file']['name'][$i];
$size = $_FILES['file']['size'][$i];
$tipo = $_FILES['file']['type'][$i];
$error = $_FILES['file']['error'][$i];
$contenuto = addslashes(file_get_contents($nome_temporaneo));
}
if($size < 512000){
if(!$error > 0){
if(!is_dir($dir_upload)){
if(@mkdir($dir_upload,permessi_dir)){
}else{
echo("Errore nella creazione della directory <strong> upload/ </strong>");
}}
if(file_exists($dir_upload.$nome) AND $sovrascrivi_file = 0){
if(move_uploaded_file($contenuto,$dir_upload.$nome)){
echo "Hai caricato $numero_file file<br>";
foreach($_FILES['file']['name'] as $chiave=>$valore){
$numero++;
echo "
({$numero})Nome: <b>{$_FILES['file']['name'][$chiave]}</b><br>
Tipo: <b>{$_FILES['file']['type'][$chiave]}</b><br>
Dimensione: <b>{$_FILES['file']['size'][$chiave]} kb</b><br>
";
}}else{
echo "C'è stato un problema durante l'upload!";
}}else{
echo "Il file è già presente sul server.";
}}else{
echo "C'è stato un problema durante l'upload! Codice Errore: {$error}.";
}}else{
echo "Dimensioni del file eccessive, il file non può superare i 512000 bytes.";
}}else{
echo "Nessun file è stato caricato.";
}}?>
<form enctype="multipart/form-data" action="" name="File" method="post">
<table id="upload_table" border="0">
<tr>
<td>File</td>
<td>Carica un file:</td>
</tr>
<tr>
<td>1</td>
<td><input class="text" type="file" name="file[]"></td>
</tr>
<tbody ></tbody>
<tr>
<td><input type="submit" name="carica" value="carica"></td>
</tr>
</table>
</form>
mi dice
Il file è già presente sul server.
dovrebbe caricare più file ma se ne carico uno mi dice la stessa cosa....
-
Il mime-type di solito è tutto in minuscolo (image/png etc..), quindi puoi usare benissimo strpos (comunque perchè non vuoi usare php5???)
Poi una cosa che mi sembra strana è:
Codice PHP:
if(file_exists($dir_upload.$nome) AND $sovrascrivi_file = 0){
Non devi assegnare $sovrascirvi_file ma controllare il suo valore:
Codice PHP:
if(file_exists($dir_upload.$nome) AND $sovrascrivi_file == 0) {
-
perché essendo sto creando uno script se nel caso l'utente non abbia attivato php 5 il codice non funziona capito...
distrazione xD
la seconda cosa invece di controllare volevo fare che e l'utente tramite il form
scelga lui se si o no...
in questo modo se sono selezionati vale 1 se non sono selezionati vale 0
Codice PHP:
Sovrascrivi:<input type="checkbox" name="sovrascrivere" value="sovrascrivere" checked="checked">
Controlla:<input type="checkbox" name="controlla" value="controlla" checked="checked">
ma non so come potrei impostare le variabili
tu pensi se usasi operatore ternario php, devo controllare se sono selezionati o no...
Codice PHP:
$sovrascrivi_file=0;# 1=sovrascrivi i files se esistenti, 0=non sovrascrivere i files
$check_file=1;# 1=controlla il tipo di file, 0=non controllare
-
Se una checkbox non è attiva non viene inviata, quindi così dovrebbe funzionare:
Codice PHP:
$sovrascrivi_file=isset($_POST['sovrascrivere']) ? 1 : 0;# 1=sovrascrivi i files se esistenti, 0=non sovrascrivere i files
$check_file=isset($_POST['controlla']) ? 1 : 0;# 1=controlla il tipo di file, 0=non controllare
-
ok pero nel codice che ho postato ce un errore non riesco a capire perché non mi invia i file....
dove l'errore...