Newsgroup: it.comp.www.php
Titolo: HELP PHP...controllare un nome del file dopo Upload

Salve a tutti...sono nuovo del NG
Volevo una mano per un problemino... :-)
Ho una pagina in php che mi permette l'upload di un file...per essere
precisi..accetta solo file con estensione excel.
Questo funziona bene...ma adesso mi servirebbe una mano per un codice
che controlli il nome di questo file e dia errore se non č rispettata
una sintassi precisa.
In pratica il nome del file deve essere composto cosě
BO28-04-2005...dove BO č la provincia (Bologna in questo caso) e dalla
data in cui si invia...
La procedura che ho in mente č: L'utente compila sto file di
excel...Lo rinomina come deve essere fatto.....tramite l'upload lo
carica...Ed il codice di controllo lo verifica..se il nome č ok...fa
l'upload...se il nome č errato restituisce l'errore...
Grazie in anticipo.

 l'upload...se il nome è errato restituisce l'errore...
E perche' mai non lo rinomini tu secondo le tue esigenze?
-- 
Luca Curatola
http://www.neodigital2k.com
 

E perche' mai non lo rinomini tu secondo le tue esigenze?
La provincia la digita l'utente...la data č quella di
compilazione...non di invio...come posso fare?

 compilazione...non di invio...come posso fare?
inserisci un campo con la data di compilazione?
scusa, una volta che hai il file, lo rinomini come vuoi.
se ci sono dati che conosce solo l'utente (come la data, se ho capito), in
un modo o nell'altro li deve inserire lui.
Ciao,
A.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

A.
Hai perfettamente ragione Arles...rinominare il file č facilissimo in
locale...ma si da il caso che, purtroppo, il boss mi ha chiesto questo
controllo..peraltro inutile secondo me...ma lo vuole...come posso
risolvere?Ci sono funzioni che mi permettono di far uscire un
messaggio del tipo: Attenzione..il nome del file č errato.??
Mah...

naturalalmente il controllo lo fai prima di fargli fare l'upload.
Comunque  la soluzione miglioer è quella di fagli inserire le
informazioni del nome del file oltre al semplice upload.
Nel form che usi per lìupload ci inserisci altri tre input uno per la
provincia, e gli altri tre per la data (giorno, mese, anno) quindi
avrai quattro bei menu a tendina con scelte obbligate (la provincia
dall'elenco delle provincia, il giorno max fino a 30 il mese max 12 e
l'anno libero o in un range sufficientemente ampio)
Gli fai fare l'upload e sempre tramite php rinomini il file uploadato
con le informazioni inserite nel form, così se i sicuro che non gli
dovrai mai dare errore.
clicka:
http://www.mgsnowboard.com

Grazie 1000 a tutti...
ho risolto cosi
//File Name Check
if(!ereg("([a-zA-Z0-9]{2,4})-([0-9]{2})-([0-9]{4}).([xls]{3})",$file_name))
Sicuramente non sarà il massimo....ma  funziona o almeno sembra
;-)

tutti :)
 Infatti...il problema principale è che:
1) si fidano del fatto che gli utenti che andranno ad uploadare non
scrivano date a caspio...(è una area protetta)
2) Hanno paura che l'utente sbagli il nome del file....Megacacchiata
questa.
Gli danno i permessi per scrivere su un foglio importante...ma hanno
paura che sbagli a rinominarli
:-(

L'ho sostituita con:
 if (!ereg
("([A-Z]{2})([0-9]{2})-([0-9]{2})-([0-9]{4}).([xls]{3})",$file_name))
Mah...
Come posso fare per controllare se un file è già presente e quindi
avvertire che non è possibile inviarne un altro?

 Mah...
Dalla pagina in cui permetti l'iserimento del file da parte dell'utente, 
crei un from che permetta la selezione della provincia e della data di 
compilazione, dopodiche' rinomini il file di conseguenza.


 ha scritto nel messaggio
news:bb0271def8nlq63gn...@4ax.com...

IMHO
form invio:
data con i box, provincia
file da uppare
ricezione
verifica che il file esiste (exit)
rinominatura del file in upload
$data = checkdate($_POST['date']);
if(!file_exist($uploaddir.$_POST['prov']."-".$data)){
if($data == TRUE){
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir .
$_FILES['userfile']['name']))
// $_FILES['userfile']['name'] diventa $_POST['prov']."-".$data
 {
    print "File is valid, and was successfully uploaded.  Here's some more
debugging info:\n";
    print_r($_FILES);
} else {
    print "Possible file upload attack!  Here's some debugging info:\n";
    print_r($_FILES);
} // upload
} // file
} // date
l'utente sbatte su quello che gli pare e tu lo rifinisci, e buttare excel
????

 
io userei questa..
/([a-z]{2,4})([0-9]{2})-([0-9]{2})-([0-9]{4})\.(xls)/i
i nomi delle province possono essere lunghi da 2 a 4 caratteri, data nel
formato 2-2-4, seguita da un punto e dal formato xls (tutto case
insensitive)
"([a-zA-Z0-9]{2,4})-([0-9]{2})-([0-9]{4}).([xls]{3})"
questa dava esito positivo anche con estenzioni come xll e restituiva errore
per XLS.. e accettava anche una stringa del tipo "ROMA-12-2005.xls" come
corretta..
fai qualche prova..
<?php
$pattern1 = "/([a-z]{2,4})([0-9]{2})-([0-9]{2})-([0-9]{4})\.(xls)/i";
$pattern2 = "/([a-zA-Z0-9]{2,4})-([0-9]{2})-([0-9]{4}).([xls]{3})/";
$testSuite = array(
'ROMA-12-1990.xls', 
'BO12-12-1990.xLs', 
'BO12-12-1990.XLS', 
'ROMA12-12-1990.xls', 
'BOM12-12-1990.xls', 
'BO12-12-1990.xll'
); 
while(list(, $name) = each($testSuite)){
  if(preg_match($pattern1, $name, $matches))
    echo "$name is a valid format using pattern1<br />";
  else
    echo "$name is not a valid format using pattern1<br />"; 
  if(preg_match($pattern2, $name, $matches))
    echo "$name is a valid format using pattern2<br />";
  else
    echo "$name is not a valid format using pattern2<br />";
echo '<br />';
}
?>
-- 
www.iuz-lab.info

 
io userei questa..
/([a-z]{2,4})([0-9]{2})-([0-9]{2})-([0-9]{4})\.(xls)/i
i nomi delle province possono essere lunghi da 2 a 4 caratteri, data nel
formato 2-2-4, seguita da un punto e dal formato xls (tutto case
insensitive)
"([a-zA-Z0-9]{2,4})-([0-9]{2})-([0-9]{4}).([xls]{3})"
questa dava esito positivo anche con estenzioni come xll.. restituiva errore
per XLS.. accettava una stringa del tipo "ROMA-12-2005.xls" come
corretta.. e poteva anche fraintendere il '.'..
fai qualche prova..
<?php
$pattern1 = "/([a-z]{2,4})([0-9]{2})-([0-9]{2})-([0-9]{4})\.(xls)/i";
$pattern2 = "/([a-zA-Z0-9]{2,4})-([0-9]{2})-([0-9]{4}).([xls]{3})/";
$testSuite = array(
'ROMA-12-1990.xls', 
'BO12-12-1990.xLs', 
'BO12-12-1990.XLS', 
'ROMA12-12-1990.xls', 
'BOM12-12-1990.xls', 
'BO12-12-1990.xll', 
'BO12-12-1990axls'


Grazie a tutti...ma ho risolto rifinendo la stringa che avevo
costruito con ereg()
Il controllo alla fine era banale...percè ripeto che si trattava solo
di una pura formalità...l'utente deve rispettare solo quel formato del
nome del file per una comodità...non per altro...
Spiego meglio i passaggi che deve fare:
Tramite una pagine l'utente X ha 2 possibilità....
1) Non ha username e password....accede ad un'area di sola
visualizzazione..o meglio...può scaricare i file excel
presenti...nulla di più
2) ha user e pass....in questo caso ha la mascherina dell'upload.
2.a) Scarica il modello generale se non lo ha già...
2.b) Compila il modello e lo invia.Praticamente chi ha user e pass non
è altro il dipendente di questa azienda e che quindi ha già le
direttive di come farlo e chiamarlo.
2.c) Il controllo non deve fare altro che dire "Uè.guarda che devi
scrivere cosi. MI28-04-2005.xls (esempio)"
Lo corregge e lo invia.
Purtroppo:
1 Sto cacchio può compilarlo ma inviarlo anche dopo un mese...quindi
non posso modificare la data con quella dell'effetivo upload....
2 Teoricamente non dovrebbe presentarsi la situazione in cui 2 file
hanno lo stesso nome. In quanto il report contiene dati finali di una
lavorazione su quella provincia. Se ad esempio è un lavoro su Milano,
al massimo avrò tanti file con la sigla MI ma con date diverse...una a
fine giornata oppure una unica con tutti i dati.
Vorrei metterci questo controllino sul file exist solo per evitare che
accidentalmente l'utente non cambiando il nome a quello del giorno
prima lo invia per sbaglio....