come posso in php dare l'ordine di creare una nuova cartella nel mio server con nome l'id del utente?
come posso in php dare l'ordine di creare una nuova cartella nel mio server con nome l'id del utente?
questo qui è il codice
io vorrei che un utente entri nel mio sito e carichi un immagine a questo punto viene creata una cartella con il nome id del utnete (per evitare che 2 utenti carichino una foto con lo setesso nome e una delle due verebbe canbellata) e all'interno della cartella si salva l'immagine.Codice PHP:
<?php
mkdir("/path/to/my/dir", 0777);
?>
COSA DEVO MODIFICARE?
Scusa ma se l'id è diverso per ogni utente, non dovresti avere problemi.
Chiedi di modificare qualcosa, ma che cosa , forse vorresti adattarlo al tuo script.
Se è così, dovresti postare il codice
Ma in ogni caso, basta che lo stesso utente, carichi due volte la stessa immagine e avresti sempre lo stesso problema.
Devi fare un while e controllare con la funzione file_exists() che il file, se esiste, mostrare un errore o rinominarla
no, questo deve essere un avatar quindi l'utente deve caricare una sola immagineMa in ogni caso, basta che lo stesso utente, carichi due volte la stessa immagine e avresti sempre lo stesso problema.
Devi fare un while e controllare con la funzione file_exists() che il file, se esiste, mostrare un errore o rinominarla
index.php
class.upload.phpCodice PHP:
<? ##################################
# PHP CLASS 1.2 #
# CLASSE PER L'UPLOAD #
# TUTORIAL E GUIDA ALL'USO #
# IL NET-SURFER #
##################################
$max_file_size = 15000000;//Dimensione massima di un file.102400 Bytes = 100 KiloByte;1024 Bytes = 1 KiloByte
$image_type = array('gif','jpeg','jpg','x-png','bmp','pict','pct','psd','pngpeg','png'); //Estensioni accettate.Badate bene di scriverle in minuscolo!
if(isset($_FILES['file'])){//Se esiste $_FILES
require "class.upload.php";//includiamo la classe
$obj = new upload($_FILES['file'],"uploads/",$max_file_size,$image_type); //Inizializziamo la classe!
/*Il primo parametro è il file
il secondo la cartella con le immagini(E ricordate di inserire / dopo il nome);
Il terzo parametro è il limite massimo di grandezza dei files
il quarto parametro è l'array contenente le estensioni accettate
*/
}
?><?php echo "Estensioni accettate : ";//Scrive, tramite foreach, tutte le estensioni accettate
foreach($image_type as $type){
echo $type." ";
}
?>
<form enctype="multipart/form-data" action="index.php"
method="post"><input name="MAX_FILE_SIZE"
value="<?php echo $max_file_size; ?>" type="hidden">
<input name="file" type="file"><input
name="upload" value="Upload" type="submit">
Codice PHP:
<?php
##################################
# PHP CLASS 1.2 #
# CLASSE PER L'UPLOAD #
# TUTORIAL E GUIDA ALL'USO #
# IL NET-SURFER #
##################################
class upload{//Il nome della classe
public $files;//Variabile pubblica di classe contenente il file
public $dir;//Variabile pubblica di classe contenente la cartella
public $max_size;//Variabile pubblica di classe contenente la dimensione massima dei files
public $ext;//Variabile pubblica di classe contenente l'estensione del file
public $ammissed_ext;//Variabile pubblica di classe contenente l'array con le estensioni accettate
public $error;//Variabile pubblica di classe contenente gli errori
public $complete;//Variabile pubblica di classe contenente il path sul disco dell'immagine
public $link;//Variabile pubblica di classe contenente l'URL dell'immagine
public $my_err;//Variabile pubblica di classe contenente l'errore finale
function load($esito,$err = ""){//Funzione load .Prevede due variabili :
//esito(true o false, true se non c'è errore, false se c'è);
//Err : se esito è false allora dentro contiene l'errore.Altrimenti sarà vuoto
if(empty($err) && $esito = true){//Se non ci sono errori e l'esito è ok
$this->error = "";
if(!$this->is_ammissed_file()){ //Qui si fa uso di una funzione interna alla classe
//Con $this->miafunc(); apriamo la funzione.Se la classe è statica utilizzeremo self::miafunc();
$this->error[] = "Estensione non accetta!";//Aggiungiamo un errore nell'array
}
if(empty($this->error)){
{
$this->files['name'] = str_ireplace(" ","_",$this->files['name']);//Eliminiamo gli spazi e sostituiamoli con -
$id = 0;
if(file_exists($this->dir.$id."_".$this->files['name'])){//Se esiste il file con quel nome..
while(file_exists($this->dir.$id."_".$this->files['name'])){//Finchè esiste il file con quel nome...
$id++;//incrementa l'id
$this->complete = $this->dir.$id."_".$this->files['name']; //Crea il file con il nome : n_nomefile.ext dove n sta per un numero
}
if(!@move_uploaded_file($this->files['tmp_name'],$this->complete)){ //Se l'upload è andato a buon fine...
$this->error[] = "Impossibile copiare il file nella directory";
}
$this->link = "http://".$_SERVER['SERVER_NAME'].substr($_SERVER['REQUEST_URI'],0,-9).$this->complete; //Crea il link!
}else{//Se non esiste un file con quel nome...
if(!@move_uploaded_file($this->files['tmp_name'],$this->dir.$id."_".$this->files['name']))//Upload!
{
$this->error[] = "Impossibile copiare il file nella directory";
}
$this->link = "http://".$_SERVER['SERVER_NAME'].substr($_SERVER['REQUEST_URI'],0,-9).$this->dir.$id."_".$this->files['name'];
}
}
}
else{
$this->error[] = $err;//Altrimenti aggiunge l'errore
}
}
$this->no_error() ? print($this->link):print("Sono stati riscontrati i seguenti errori :
".$this->my_err);
}
function set_file_ext($_resource_file_name){//Funzione che restituisce l'estensione del file
$ext_file = explode("." , $_resource_file_name);//Dividiamo la stringa in tante parti quante sono i punti + 1
//ES: $stringa = "ciao.mi.chiamo.valerio";
//$stringa_array = explode(".",$stringa);
//$stringa contiene:
//$stringa[0] = "ciao"
//$stringa[1] = "mi"
//$stringa[2] = "chiamo"
//$stringa[3] = "valerio"
$count_ext_files = count($ext_file)-1;//Contiamo il numero di elementi nell'array
//ES: $array = Array("Ciao","xx","xxxx","jjb");
//$count = count($array);
//Restituisce 4
$myext = $ext_file[$count_ext_files];
return $myext;//La funzione darà come risultato l'estensione
}
function is_ammissed_file(){//Funzione che restituisce true o false se l'estensione dei file è accettata
$this->ext = $this->set_file_ext($this->files['name']); //Tramite la nostra funzione creata prima settiamo l'estensione
if(in_array(strtolower($this->ext),$this->ammissed_ext))//Se l'estensione è contenuta nell'array della estensioni(con la funzione strtolower tutti i caratteri diventano in minuscolo(es .PHP diventa .php)
{
return true;//Restituisce true
}else{
return false;//Restituisce false
}
}
function __construct($files,$dir,$max_size,$ammissed_ext){// __construct, funzione che parte alla dichiarazione della classe
//Da notare l'uso di $this->files invece di $files
// la variabile globale di classe $this-> si usa nelle funzioni della classe
//nelle classi di tipo statico non si utilizza $this-> ma self::
//Assegnamo ad ogni variabile di classe il rispettivo contenuto
$this->files = $files;
$this->dir = $dir;
$this->max_size = $max_size;
$this->ammissed_ext = $ammissed_ext;
switch($this->files['error'])
{ //Fa uno switch degli errori presenti all'interno della variabile error di $this->files
case UPLOAD_ERR_NO_FILE://Se non è stato selezionato alcun file...
$this->error[] = "Non è stato selezionato alcun file!";
$this->load(false,$this->error);
break;
case UPLOAD_ERR_INI_SIZE://Se si superano le dimensioni massime secondo php.ini...
$this->error[] = "è stato riscontrato un errore!Il file è troppo grande secondo le impostazioni del file php.ini!";
$this->load(false,$this->error);
break;
case UPLOAD_ERR_FORM_SIZE://Se si superano le dimensioni massime di max_file_size...
$this->error[] = "Le dimensioni superano il valore massimo consentito!";
$this->load(false,$this->error);
break;
case UPLOAD_ERR_PARTIAL://Se si riscontra un errore nell'upload...
$this->error[] = "è stato riscontrato un errore nell'upload!";
$this->load(false,$this->error);
break;
case UPLOAD_ERR_OK://Nessun errore
$this->load(true);
break;
default: //S c'è un errore sconosciuto...
$this->error[] = "è stato riscontrato un errore sconosciuto!";
$this->load(false,$this->error);
break;
}
}
function no_error(){ //Funzione che controlla se ci sono errori
if(!empty($this->error)){//Se $this->error (variabile di classe) non è vuoto, vuol dire che ci sono errori
foreach($this->error as $err){//Scorre l'array ...
$this->my_err .= $err."<br />"; //E lo riempe!
}
return false;
}else{ //Altrimenti...
$this->link = "Il link della tua immagine : <a href = \"".$this->link."\">".$this->link."</a>";
return true;
}
}
}
?>
capito quello che volgio fare creare una cartella con il nome dell'id e poi metterci dentro l'immagine.
Oppure sarebbe più semplice rinominare il file con l'id del utente?
Ultima modifica di AVVVARRIALE : 01-06-2009 alle ore 18.38.21
se si può fare ok ci stò ma il problema e che non so come fare qualcuno ha un idea?
Sul tuo sito hai un sistema di registrazione, giusto?
Se questo è stato fatto bene, è impossibile che esistano due utenti con stesso id,nickname etc...
Quindi nessun problema di avatar!
si ho capito questo e lo voglio fare.
Il problema e che non so modificare il mio codice di upload (che è sopra) quale righa devo modificare e con cosa
questa è la tabella se serve altro ditemelo! sono a disposizione
CREATE TABLE `utenti` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`user` TEXT NOT NULL ,
`pass` TEXT NOT NULL
`mail` TEXT NOT NULL
) ENGINE = MYISAM ;
Se variabili di sessione che utilizzi
ma che stai dicendo? stai sclerando?
ecco QUI i codici che utilizzo per il mio login e sopra quelli per l'upload....MI DITE COSA DEVO MODIFICARE E AL POSTO DI COSA????
Se studiassi e avessi un minimo di basi del PHP, che ti servono anche per sapere dove mettere le mani, avresti capito cosa intendevo.
$_SESSION['login'] è una variabile di sessione, che indica se l'utente è loggato o no.
$_SESSION['id'] è un'altra variabile di sessione che indica l'id, credo dell'utente, ed è quella che dovrai utilizzare per creare la cartella.
ok questo l'avevo capito io non ho capito a cosa va sostituito.
Per chiamare l'immagine con l'di del utente devo usare "$_SESSION['id']" ma dove lo devo mettere?
in questo script:
<? ##################################
# PHP CLASS 1.2 #
# CLASSE PER L'UPLOAD #
# TUTORIAL E GUIDA ALL'USO #
# IL NET-SURFER #
##################################
$max_file_size = 15000000;//Dimensione massima di un file.102400 Bytes = 100 KiloByte;1024 Bytes = 1 KiloByte
$image_type = array('gif','jpeg','jpg','x-png','bmp','pict','pct','psd','pngpeg','png'); //Estensioni accettate.Badate bene di scriverle in minuscolo!
if(isset($_FILES['file'])){//Se esiste $_FILES
require "class.upload.php";//includiamo la classe
$obj = new upload($_FILES['file'],"uploads/",$max_file_size,$image_type); //Inizializziamo la classe!
/*Il primo parametro è il file
il secondo la cartella con le immagini(E ricordate di inserire / dopo il nome);
Il terzo parametro è il limite massimo di grandezza dei files
il quarto parametro è l'array contenente le estensioni accettate
*/
}
?><?php echo "Estensioni accettate : ";//Scrive, tramite foreach, tutte le estensioni accettate
foreach($image_type as $type){
echo $type." ";
}
?>
<form enctype="multipart/form-data" action="index.php"
method="post"><input name="MAX_FILE_SIZE"
value="<?php echo $max_file_size; ?>" type="hidden">
<input name="file" type="file"><input
name="upload" value="Upload" type="submit">
oppure in questo:
<?php
##################################
# PHP CLASS 1.2 #
# CLASSE PER L'UPLOAD #
# TUTORIAL E GUIDA ALL'USO #
# IL NET-SURFER #
##################################
class upload{//Il nome della classe
public $files;//Variabile pubblica di classe contenente il file
public $dir;//Variabile pubblica di classe contenente la cartella
public $max_size;//Variabile pubblica di classe contenente la dimensione massima dei files
public $ext;//Variabile pubblica di classe contenente l'estensione del file
public $ammissed_ext;//Variabile pubblica di classe contenente l'array con le estensioni accettate
public $error;//Variabile pubblica di classe contenente gli errori
public $complete;//Variabile pubblica di classe contenente il path sul disco dell'immagine
public $link;//Variabile pubblica di classe contenente l'URL dell'immagine
public $my_err;//Variabile pubblica di classe contenente l'errore finale
function load($esito,$err = ""){//Funzione load .Prevede due variabili :
//esito(true o false, true se non c'è errore, false se c'è);
//Err : se esito è false allora dentro contiene l'errore.Altrimenti sarà vuoto
if(empty($err) && $esito = true){//Se non ci sono errori e l'esito è ok
$this->error = "";
if(!$this->is_ammissed_file()){ //Qui si fa uso di una funzione interna alla classe
//Con $this->miafunc(); apriamo la funzione.Se la classe è statica utilizzeremo self::miafunc();
$this->error[] = "Estensione non accetta!";//Aggiungiamo un errore nell'array
}
if(empty($this->error)){
{
$this->files['name'] = str_ireplace(" ","_",$this->files['name']);//Eliminiamo gli spazi e sostituiamoli con -
$id = 0;
if(file_exists($this->dir.$id."_".$this->files['name'])){//Se esiste il file con quel nome..
while(file_exists($this->dir.$id."_".$this->files['name'])){//Finchè esiste il file con quel nome...
$id++;//incrementa l'id
$this->complete = $this->dir.$id."_".$this->files['name']; //Crea il file con il nome : n_nomefile.ext dove n sta per un numero
}
if(!@move_uploaded_file($this->files['tmp_name'],$this->complete)){ //Se l'upload è andato a buon fine...
$this->error[] = "Impossibile copiare il file nella directory";
}
$this->link = "http://".$_SERVER['SERVER_NAME'].substr($_SERVER['REQUEST_URI'],0,-9).$this->complete; //Crea il link!
}else{//Se non esiste un file con quel nome...
if(!@move_uploaded_file($this->files['tmp_name'],$this->dir.$id."_".$this->files['name']))//Upload!
{
$this->error[] = "Impossibile copiare il file nella directory";
}
$this->link = "http://".$_SERVER['SERVER_NAME'].substr($_SERVER['REQUEST_URI'],0,-9).$this->dir.$id."_".$this->files['name'];
}
}
}
else{
$this->error[] = $err;//Altrimenti aggiunge l'errore
}
}
$this->no_error() ? print($this->link):print("Sono stati riscontrati i seguenti errori :
".$this->my_err);
}
function set_file_ext($_resource_file_name){//Funzione che restituisce l'estensione del file
$ext_file = explode("." , $_resource_file_name);//Dividiamo la stringa in tante parti quante sono i punti + 1
//ES: $stringa = "ciao.mi.chiamo.valerio";
//$stringa_array = explode(".",$stringa);
//$stringa contiene:
//$stringa[0] = "ciao"
//$stringa[1] = "mi"
//$stringa[2] = "chiamo"
//$stringa[3] = "valerio"
$count_ext_files = count($ext_file)-1;//Contiamo il numero di elementi nell'array
//ES: $array = Array("Ciao","xx","xxxx","jjb");
//$count = count($array);
//Restituisce 4
$myext = $ext_file[$count_ext_files];
return $myext;//La funzione darà come risultato l'estensione
}
function is_ammissed_file(){//Funzione che restituisce true o false se l'estensione dei file è accettata
$this->ext = $this->set_file_ext($this->files['name']); //Tramite la nostra funzione creata prima settiamo l'estensione
if(in_array(strtolower($this->ext),$this->ammissed_ext))//Se l'estensione è contenuta nell'array della estensioni(con la funzione strtolower tutti i caratteri diventano in minuscolo(es .PHP diventa .php)
{
return true;//Restituisce true
}else{
return false;//Restituisce false
}
}
function __construct($files,$dir,$max_size,$ammissed_ext){// __construct, funzione che parte alla dichiarazione della classe
//Da notare l'uso di $this->files invece di $files
// la variabile globale di classe $this-> si usa nelle funzioni della classe
//nelle classi di tipo statico non si utilizza $this-> ma self::
//Assegnamo ad ogni variabile di classe il rispettivo contenuto
$this->files = $files;
$this->dir = $dir;
$this->max_size = $max_size;
$this->ammissed_ext = $ammissed_ext;
switch($this->files['error'])
{ //Fa uno switch degli errori presenti all'interno della variabile error di $this->files
case UPLOAD_ERR_NO_FILE://Se non è stato selezionato alcun file...
$this->error[] = "Non è stato selezionato alcun file!";
$this->load(false,$this->error);
break;
case UPLOAD_ERR_INI_SIZE://Se si superano le dimensioni massime secondo php.ini...
$this->error[] = "è stato riscontrato un errore!Il file è troppo grande secondo le impostazioni del file php.ini!";
$this->load(false,$this->error);
break;
case UPLOAD_ERR_FORM_SIZE://Se si superano le dimensioni massime di max_file_size...
$this->error[] = "Le dimensioni superano il valore massimo consentito!";
$this->load(false,$this->error);
break;
case UPLOAD_ERR_PARTIAL://Se si riscontra un errore nell'upload...
$this->error[] = "è stato riscontrato un errore nell'upload!";
$this->load(false,$this->error);
break;
case UPLOAD_ERR_OK://Nessun errore
$this->load(true);
break;
default: //S c'è un errore sconosciuto...
$this->error[] = "è stato riscontrato un errore sconosciuto!";
$this->load(false,$this->error);
break;
}
}
function no_error(){ //Funzione che controlla se ci sono errori
if(!empty($this->error)){//Se $this->error (variabile di classe) non è vuoto, vuol dire che ci sono errori
foreach($this->error as $err){//Scorre l'array ...
$this->my_err .= $err."<br />"; //E lo riempe!
}
return false;
}else{ //Altrimenti...
$this->link = "Il link della tua immagine : <a href = \"".$this->link."\">".$this->link."</a>";
return true;
}
}
}
?>
metti "$_SESSION['id']"dove dovresti scegliere il nome da dare al file
questo è il mio problema non so dove metterlo chi mi sa dire in quale righa?????
aiutatemi sto provando un altro codice ma mi esce questo errore "
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /membri/zomer/prove/prova.php on line 13"
questo è il codice:
Codice PHP:
<?
// QUESTE RIGHE RENDONO LO SCRIPT COMPATIBILE CON LE VERSIONI
// DI PHP PRECEDENTI ALLA 4.1.0
if(!isset($_FILES)) $_FILES = $HTTP_POST_FILES;
if(!isset($_SERVER)) $_SERVER = $HTTP_SERVER_VARS;
/********************* VARIABILI DA SETTARE ********************/
// Directory dove salvare i files Uploadati ( chmod 777, percorso assoluto)
$upload_dir = $_SERVER["DOCUMENT_ROOT"] . "upload/";
// Eventuale nuovo nome da dare al file uploadato
$new_name = "$_SESSION['id']";
// Se $new_name è vuota, il nome sarà lo stesso del file uploadato
$file_name = ($new_name) ? $new_name : $_FILES["upfile"]["name"];
if(trim($_FILES["upfile"]["name"]) == "") {
die("Non hai indicato il file da uploadare !");
}
if(@is_uploaded_file($_FILES["upfile"]["tmp_name"])) {
@move_uploaded_file($_FILES["upfile"]["tmp_name"], "$upload_dir/$file_name")
or die("Impossibile spostare il file, controlla l'esistenza o i permessi della directory dove fare l'upload.");
} else {
die("Problemi nell'upload del file " . $_FILES["upfile"]["name"]);
}
echo "L'upload del file " . $_FILES["upfile"]["name"] . " è avvenuto correttamente";
?>
cambia alla riga 13 da $new_name = "$_SESSION['id']"; a $new_name = $_SESSION['id'];
palla non funziona mi dice "
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /membri/zomer/utenti/img-prof/upload.php on line 16"
come posso fare??????????
uffa.......forse faccio prima a chiedere in che modo posso permettere ai miei utneti di caricare foto? OPPURE QUALCUNO MI SA AIUTARE SOPRA???
avvvarriale alias yool, alla prossima infrazione parte direttamente il ban.
Qui non amiamo essere presi in giro.
Ciao!