PDA

View Full Version : [PHP]cerco script particolare (upload + link)


iso3200
26-06-2006, 10:32
Salve,sono nuovo del forum,e vorrei chiedere aiuto riguardo uno script particolare.
Vi espongo subito il mio problema:

Ho un sito che permette di uplodare i file agli user registrati in una cartella come questa:

http://nomesito.org/upload/

Premetto che utilizzo Wordpress e uso il Plugin "Pageview" che serve a visualizzare in una pagina una specie di finestra interna che visualizza un sito o una pagina a mia scelta( in questo caso gli ho chiesto di visualizzare una pagina cosi: http://nomesito.org/upload/index.htm )

Quello che mi servirebbe è uno script che mi inserisca automaticamente un link nella pagina INDEX.HTM diretto a quel file.

Posto inoltre il codice php delle due pagine che utilizzo per uplodare i file sul server.

Ecco il file upload.php :



<?


include "settings.php"; /*Inclusion of the config file*/

if ($pp<>''){
$p=base64_encode($pp);
$pp='';
}
if (base64_decode($p)<>$psw){
echo "<FORM METHOD=\"Post\" ACTION=\"$PHP_SELF\">\nInserisci Password: <input type=password name=\"pp\"> <input type=submit value=\"Login\"></FORM>";
} else {
if ($d<>''){
if (!(file_exists($d))){ /*if the dir does not exist...create it*/
umask(011);
mkdir($d,"0777");
echo "The directory $d was successful created.";
}
}
if ($a<>'1'){
echo "<FORM METHOD=\"Post\" ENCTYPE=\"multipart/form-data\" ACTION=\"".$PHP_SELF."?p=".$p."\">\n<input type=hidden name=a value=1>\n";
$k=1;
while ($k<=$up){
echo "File $k: <INPUT TYPE=\"file\" NAME=\"file$k\"><BR><BR>\n";
$k++;
}
echo "<INPUT TYPE=\"submit\" value=UPLOAD>\n</FORM>";
} else {
$k=1;
while ($k<=$up){
echo "$c File $k";
$t=$HTTP_POST_FILES["file$k"]['tmp_name'];
$sz=$HTTP_POST_FILES["file$k"]['size'];
$n=$HTTP_POST_FILES["file$k"]['name'];
if ($t=='none'){
echo ": $err1";
} elseif ($sz>$s){
echo ": $err";
} else {
echo " ($n): ";
copy($t,"$d$n"); /* Copying the file */
echo $ok;
}
echo "<br>";
$k++;
}
echo "<br><br><a href=\"$PHP_SELF?p=$p\">$back</a>";
}
}
?>
<br><br>

</p>
</body>
</html>



---

Ecco il file setting.php che credo gestisca le caratteristiche dell'upload(ho tolto i dati personali):


<?


// Password

$psw="PASSWORD";


// Name of the directory where the files will be saved (with slash "/")
// Nome della directory in cui verranno salvati i files (con lo slash "/")

$d="upload/";


// Maximum filesize (bytes - 15000 = 15KB)
// Dimensione massima del file in bytes (15000= 15KB)

$s=2500000;


// Uploading.. Message
// Messaggio Trasferimento del file...

$c="Sto caricando il file";


// Error Message (Filesize over limit)
// Messaggio di errore (Dimensione del file al di sopra del limite imposto)

$err="Dimensione del file al di sopra del limite imposto";


// Error Message (Not Found, or File-Browse-Box empty)
// Messaggio di errore (Non trovato, o Casella-Sfoglia-file vuota)

$err1="Non trovato, o Casella-Sfoglia-file vuota";


// OK Message
// Messaggio di OK

$ok="File caricato correttamente!";


// Go-Back Message
// Messaggio torna-indietro

$back="Inoltra altri files";


// Number of simultaneus uploads min=1, max=14
// Numero di uploads simulanei min=1, max=14

$up=1;


// HTML code of the header of the page
// Codice Html dell'header della pagina
?>
<HTML>
<HEAD>
<TITLE>Carica il tuo file</TITLE>
<style>

A { COLOR: #000000 }

A:visited { COLOR: #000000 }


A:hover { COLOR: #000000 }

</style>
</HEAD>

<BODY BGCOLOR="#ffffff" TEXT="#000000" leftmargin="0" topmargin="0" rightmargin="0">
<P ALIGN="CENTER">
<BR><BR></p>



Nel caso qualcuno potesse scrivere il codice che mi serve,gli sarei molto grato,visto che non so praticamente nulla di php :help:

Xalexalex
26-06-2006, 11:11
L'idea più semplice che mi viene in mente è far si che ogni volta che il file viene uploadato con successo venga scritto in un file di testo (o nel database se lo hai a disposizione) il nome del file.
Poi nell'index recuperi tutti i nomi dei file, gli associ il percorso (a.e. http://tuosito/upload/) e scrivi il link.
Ora ti posto il codice...
Ah, ovviamente benvenuto :D

Alex

iso3200
26-06-2006, 11:22
Grazie per il bevenuto :)

Ti chiedo gentilmente se è possibile far si che venga aggiunto automaticamente a quella pagina,perchè il sito sarà sottoposto ad un'ingente quantità di materiale,anche se non tutto in un particolare giorno ma suddiviso in una settimana,quindi ho bisogno di una funzione che aggiunge direttamente il link,perchè farlo manualmente sarebbe lungo e noioso...

ps: il database ce l'ho a disposizione

Xalexalex
26-06-2006, 11:25
Allora nella pagina che uploada i file, aggiungi questo spezzone di codice:

<?php
file_put_contents("./upload/files.fls","{$nomefile}\n");
?>

dove $nomefile è il nome del file uploadato così com'è sul server, estensione compresa. Ovviamente questo spezzone di codice andrà eseguito solo se l'upload è andato a buon fine.

Nell'index invece metti

<?php
$stringa=file_get_contents("./uploads/files.fls");
$nomi=explode("\n",$stringa);
array_map("trim",$nomi);
foreach ($nomi as $nome)
{
echo "<a href=\"/uploads/{$nome}\">{$nome}</a><br>";
}
?>

che ti stampa l'elenco dei file.

Spero di non aver fatto casino tra parentesi, virgolette e slashes...

Ciaozz,
Alex

iso3200
26-06-2006, 11:31
Cosa devo scrivere al posto di $nomefile? e soprattutto dove devo inserire il codice

file_put_contents("./upload/files.fls","{$nomefile}\n");

Xalexalex
26-06-2006, 13:54
<?


include "settings.php"; /*Inclusion of the config file*/

if ($pp<>''){
$p=base64_encode($pp);
$pp='';
}
if (base64_decode($p)<>$psw){
echo "<FORM METHOD=\"Post\" ACTION=\"$PHP_SELF\">\nInserisci Password: <input type=password name=\"pp\"> <input type=submit value=\"Login\"></FORM>";
} else {
if ($d<>''){
if (!(file_exists($d))){ /*if the dir does not exist...create it*/
umask(011);
mkdir($d,"0777");
echo "The directory $d was successful created.";
}
}
if ($a<>'1'){
echo "<FORM METHOD=\"Post\" ENCTYPE=\"multipart/form-data\" ACTION=\"".$PHP_SELF."?p=".$p."\">\n<input type=hidden name=a value=1>\n";
$k=1;
while ($k<=$up){
echo "File $k: <INPUT TYPE=\"file\" NAME=\"file$k\"><BR><BR>\n";
$k++;
}
echo "<INPUT TYPE=\"submit\" value=UPLOAD>\n</FORM>";
} else {
$k=1;
while ($k<=$up){
echo "$c File $k";
$t=$HTTP_POST_FILES["file$k"]['tmp_name'];
$sz=$HTTP_POST_FILES["file$k"]['size'];
$n=$HTTP_POST_FILES["file$k"]['name'];
if ($t=='none'){
echo ": $err1";
} elseif ($sz>$s){
echo ": $err";
} else {
echo " ($n): ";
copy($t,"$d$n"); /* Copying the file */
file_put_contents("./upload/files.fls","{$n}\n");
echo $ok;
}
echo "<br>";
$k++;
}
echo "<br><br><a href=\"$PHP_SELF?p=$p\">$back</a>";
}
}
?>
<br><br>

</p>
</body>
</html>

Ho aggiunto la riga alla pagina di upload, dimmi un po se funziona...

Ciaozzz

iso3200
26-06-2006, 18:51
Lo provo ora che oggi ero fuori casa... :p

iso3200
26-06-2006, 19:02
Allora,il file viene uplodato perfettamente.Nessun messaggio di errore o altro.
Ho copiato il codice:


<?php
$stringa=file_get_contents("./uploads/files.fls");
$nomi=explode("\n",$stringa);
array_map("trim",$nomi);
foreach ($nomi as $nome)
{
echo "<a href=\"/uploads/{$nome}\">{$nome}</a><br>";
}
?>


nella pagina INDEX.PHP,ma non visualizza niente!

ps: forse ho capito,hai messo UPLOADS al posto di UPLOAD/files.fls..possibile che sia quello?
perchè la cartello dove invio i file è upload/

Xalexalex
26-06-2006, 19:18
Ah si sry :D
Si il percorso deve essere esatto ovviamente...

iso3200
26-06-2006, 19:19
Ho messo tutto come mi hai detto..
dopo aver uplodato il file correttamente mi da questo errore:



Fatal error: Call to undefined function: file_put_contents() in /membri/iso3200/upload.php on line 42

Xalexalex
26-06-2006, 19:32
Ho messo tutto come mi hai detto..
dopo aver uplodato il file correttamente mi da questo errore:



Fatal error: Call to undefined function: file_put_contents() in /membri/iso3200/upload.php on line 42

E' disponibile solo in PHP5, forse sul tuo hosting c'è il 4...
Comunque si sostituisce subito con:


$fp=fopen("uploads/files.fls","a");
fwrite($fp,$n."\n");
fclose($fp)

iso3200
26-06-2006, 19:45
Scusa ma non ho capito dove devo inserire:


$fp=fopen("uploads/files.fls","a");
fwrite($fp,$n."\n");
fclose($fp)

Xalexalex
26-06-2006, 19:55
Al posto di file_put_contents ...
Ah una cosa, invece "fclose($fp)" metti "fclose($fp);" , cioè aggiungi il punto e virgola.
Ciaoozz

iso3200
26-06-2006, 20:01
niente.Ho provato a lanciar la pagina index.php dentro la cartella upload e mi da questo nell'html:

<a href="/upload/"></a><br>

come se mancasse il file..che in effetti è stato uplodato correttamente ed è presente nella cartella! :muro:

iso3200
26-06-2006, 20:04
Perfetto!Ora funziona alla grande!
Bastava cambiare un UPLOADS in UPLOAD :D

Grazie di cuore!!! :D

immagino con quante teste dure come la mia come me hai a che fare e ti assicuro che ne hai di pazienza ;)

Xalexalex
26-06-2006, 20:10
Ma noooooo figurati... Siamo qui per aiutarci no?
Sennò mettevano solo la piazzetta...