come recuperare il path di un file su disco locale

marybeth74

Nuovo Utente
25 Gen 2012
3
0
0
Sto' cercando di memorizzare il percorso e nome di un file in un database come stringa per usarlo sucessivamente come attachment di una mail.
Ho provato con :
File nomefile.html
[...]
<form name='nomefile' action='memfile.php' method='post' enctype='multipart/form-data'>
<input type='file' name='nomefile' value''/>
</form>
[...]

nel file: memfile.php

$prova=$_FILES['nomefile']['name'];

Che poi provo a memorizzare. Ma il path non sono riuscita a "trovarlo".

Inoltre non capisco cosa sbaglio ma ...
Memorizzo in un Array globale il valore di $prova
Quando chiudo la finestra "modale" nella quale inserisco i dati perdo il valore.
Uso la stessa finestra (greybox per chi la conosce) con la stessa procedura per memorizzare vari dati sempre nello stesso array (almeno una trentina) e non ho problemi.
Solo con questo valore mi vedo azzerare il nome del file (unica cosa che trovo).

Se avete dei suggerimenti anche solo un'ipotesi ....

Grazie
 
L'upload di file funziona in questo modo: lo script copia automaticamente il file che riceve nel percorso $_FILES['file']['tmp_name'], dandogli un nome casuale e nessuna estensione. Sta poi a te spostare il file in un modo simile a questo:
PHP:
move_uploaded_file($_FILES['file']['tmp_name'], '/path/file/caricati/'. $_FILES['file']['name']);
E sarà quel nuovo percorso che salverai nel database per allegarlo alla mail.
 
L'upload di file funziona in questo modo: lo script copia automaticamente il file che riceve nel percorso $_FILES['file']['tmp_name'], dandogli un nome casuale e nessuna estensione. Sta poi a te spostare il file in un modo simile a questo:
PHP:
move_uploaded_file($_FILES['file']['tmp_name'], '/path/file/caricati/'. $_FILES['file']['name']);
E sarà quel nuovo percorso che salverai nel database per allegarlo alla mail.

Mi rendo conto che l'uso che vorrei fare di <input type=file > è improprio e "non conforme".
Quando ho scoperto questa strada ho pensato che poteva essere una soluzione "di ripiego" rispetto all'idea originale.
Insomma: se proprio non trovo altro ... mi accontento sniff sniff

Però, siccome mi piace andare oltre insisto!
Ho un form dove l'utente mette dei dati che non invia immediatamente ma salva in un database e invia in maniera definitiva quando ha concluso la raccolta delle informazioni. Ed è questa elasticità a crearmi problemi.
Dovendo aspettare che decida di inviare i dati in maniera definitiva e volendo lasciare all'utente la possibilità di inserire quello che già conosce e di modificare tutte le informazioni nuove e già inserite quante volte gli aggrada, mi sembra più semplice e "risparmioso" memorizzare il path e il nome del file. Non vorrei memorizzare il file.
Questo perchè l'utente oggi mette un file (in tutto sono 7 file diversi da inserire e non tutti obbligatori) ma tra dieci minuti potrebbe decidere di cambiali tutti e segnalarne dei nuovi.
Mi dava l'idea che memorizzando la sola stringa da usare all'invio definitivo per prendere il file fosse la meno dispendiosa in termini di risorse e di rete. Poi avro' il problema che se l'utente ha spostato o cancellato o altro il file dovrò essere pronta a bacchettargli le manine :) ma lì sono parecchio brava (leggi sadica).

Tra l'altro mi irrita il fatto che nella casella <input type=file> a schermo appare il percorso completo e lo si può leggere e anche selezionare e copiare. Insomma c'è, è lì a portata di zampa ...
Ho trovato qualcuno che suggeriva di inserire in un onchange il trasferimento del value in un campo hidden come da esempio:

<input type="file" name="mioFile" onchange="this.form.pathCompleto.value=this.value;">
<input type="hidden" name="pathCompleto">

Ma io non sono riuscita a farlo funzionare. Molto probabile che sbagli qualcosa: this.form ad esempio o altro.
Tra l'altro leggevo che value è una proprietà un po' particolare di <input type=file>, non si può cambiare ne impostare di default e forse non si può nemmeno prendere con un onchange()???????

Grazie per qualsiasi tipo di aiuto-suggerimento-spiegazione.
 
Sì, ho capito cosa vuoi fare, ma non puoi per il semplice motivo che, una volta che l'utente ha selezionato il file da caricare, esso viene inviato al server e basta: è impossibile recuperare il percorso completo per salvarlo, puoi avere solo il nome del file. Ammesso anche che fosse possibile, non risolverebbe comunque il tuo problema, perché non avresti accesso all'hard disk dell'utente e quindi non avresti modo di eseguire il trasferimento alla fine della raccolta informazioni.
 
Mi arrendo :incazz2:
Ogni browser (explorer, firefox, opera) mi ha dato risultati diversi e anche la stringa c:\fakepath.

E questo è quanto ho trovato in rete come spiegazione del mancato recupero del percorso:
"According to the specifications of HTML5, a file upload control should not reveal the real local path to the file you have selected, if you manipulate its value string with JavaScript. Instead, the string that is returned by the script, which handles the file information is c:\fakepath.
This requirement is already implemented in Internet Explorer 8 – the real path to the file will be shown only if the page that contains the control is added to the trusted sites collection of the browser."

Se le specifiche di HTML5 sono contro di me allora mollo la presa.

Scherzo :p:p
Procedo invece come consigliatomi

Grazie a tutti.
 

Discussioni simili