PDA

View Full Version : [php] gestire i files...


gaglioppo
08-01-2004, 08:38
ciao amici

sto creando un sito e ho a cha fare con le immagini.
Mi piacerebbe, usando php:

1. conoscere un comando php che mi consentisse di verificare se una immagine jpg esiste nel mio db mysql.

2. conoscere un comando che mi rivelasse le dimensioni in pixel di una immagine memorizzata nel mio db mysql

3. avere la possibilità di creare una sezione di upload sul mio sito per consentire ad utenti registrati di inviare una immagine sul mio db mysql (questa forse non si può fare)

Grazie infinite fin d'ora

A presto

cionci
08-01-2004, 08:52
Io innanzitutto eviterei di memorizzare le immagini all'interno del DB MySQL, ma nel DB memorizzerei solamente il percorso (o semplicemente un indice dell'immagine da cui mi ricaverei il nome del file)...
A questo punto per i vari punti:

1) file_exists
(PHP 3, PHP 4 >= 4.0.0)

file_exists -- Controlla se un file esiste
Descrizione
bool file_exists ( string filename)


Restituisce TRUE se il file specificato da filename esiste; FALSE altrimenti.

2) con le librerie GD2, non mi ricordo come si faccia di preciso, ma devi usare queste funzioni:
imagecreatefromjpeg, imagesx, imagesy

3) si può fare, devi usare <input type="file"> in HTML:

<form enctype="multipart/form-data" action="file_upload.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="1000">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>

file_upload.php:

<?php
// In PHP 4.1.0 or later, $_FILES should be used instead of $HTTP_POST_FILES.
if (is_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'])) {
copy($HTTP_POST_FILES['userfile']['tmp_name'], "/place/to/put/uploaded/file");
} else {
echo "Possible file upload attack. Filename: " . $HTTP_POST_FILES['userfile']['name'];
}
?>

Di nuovo, meglio non memorizzare i file all'internod el database, ma solamente "registrarli" all'interno del database e memorizzarli sul disco in una cartella in base al codice con cui si sono "registrati" sul DB...

gaglioppo
08-01-2004, 12:06
scusa mi sono espresso male.

Le immagini sono sullo spazio web, memorizzate come tutti gli altri file (php, html, gif, jpeg, zip).

Non ho ancora analizzato attentamente i comandi che mi hai indicato per il punto 3.
ti volevo chiedere al riguardo se l'upload delle immagini, usando tale procedura, si fa sul db (se nonn ho capito male, le immagini verrebbero memorizzate come un attributo di una tabella?) o sullo spazio web.
Ti ringrazio e scusami se mi ripeto spesso, ma sei unico!
A presto Cionci

cionci
08-01-2004, 12:20
Sullo spazio web, ma ti scrivi sul db che quel tale file è stato uploadato e da chi... Dall'id della tabella ti ricavi il nome da dare al file...

gaglioppo
09-01-2004, 10:54
non credo di aver capito come sia possibile mandare un file sullo spazio web...
Non ci dovrebbe essere da qualche parte la mia user e password???

:confused:

cionci
09-01-2004, 12:11
Originariamente inviato da gaglioppo
Non ci dovrebbe essere da qualche parte la mia user e password???
No, questo è un upload tramite php... Il file passa tramite il browser al server web e poi arriva a php ;)

gaglioppo
09-01-2004, 16:42
scusami ancora ma inviando un file qualsiasi mi dice:

Possible file upload attack. Filename: beck.htm

non entra mai nell'IF!

perchè?
<form enctype="multipart/form-data" action="file_upload.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="1000">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>



if (is_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name']))

copy($HTTP_POST_FILES['userfile']['tmp_name'], "/cuggini/immagini/file");

else
echo "Possible file upload attack. Filename: " . $HTTP_POST_FILES['userfile']['name'];

?>

cionci
09-01-2004, 16:48
Prova a cambiare

<input type="hidden" name="MAX_FILE_SIZE" value="1000">

in

<input type="hidden" name="MAX_FILE_SIZE" value="1000000">

gaglioppo
09-01-2004, 17:41
ok, ora funziona.

ti ringrazio ancora ;-)

cionci
09-01-2004, 19:29
Di niente ;)