Ho provato anche questa altra soluzione:
ma mi da lo stesso errore (file bianco senza iconaCodice PHP:
if ($_GET['action'] == 'download') {
$mimetype = 'application/octet-stream';
$disposition = 'attachment';
}
$path = $_SERVER['DOCUMENT_ROOT'] . "/file_download/" . $filename;
if (file_exists($path)) {
header('Content-Transfer-Encoding: binary');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', filemtime($path)) . ' GMT');
header('Accept-Ranges: bytes');
header('Content-Length: ' . filesize($path));
header('Content-Encoding: none');
header("Content-Type: $mimetype");
header("Content-Disposition: $disposition; filename=" . $filename);
readfile($path);
} else {
echo "File not found on server";
}
). Nel database leggo nomefile.JPG ma sul desktop leggo nomefile. Se rinomino nomefile in nomefile.jpg l'os mi riconosce il file e mi permette di visualizzarlo con l'utility di sistema.
![]()
Più pratica in futuro...
Se fai una stampa di
cosa vedi esattamente? (riporta un esempio concreto)Codice PHP:
echo "extension: ".pathinfo($filename, PATHINFO_EXTENSION)." - file name:".$filename;
Giannino, stai creando un pò di confusione,
devi andare per step,
il problema è nel primo passaggio, il salvataggio del file, poi puoi preoccuparti del download.
Prova a riportare il codice che effettu al'upload
E' strano che dici questo perché l'upload funziona perfettamente. Ecco il codice:
la variabile url non la guardare la toglierò presto dato che non serve a nulla...Codice PHP:
if (isset($_POST['action']) and $_POST['action'] == 'upload') {
// Bail out if the file isn't really an upload
if (!is_uploaded_file($_FILES['upload']['tmp_name'])) {
$error = 'There was no file uploaded!';
include $_SERVER['DOCUMENT_ROOT'] . '/includes/error.html.php';
exit();
}
$uploadfile = $_FILES['upload']['tmp_name'];
$uploadname = time() . $_SERVER['REMOTE_ADD'] . $_FILES['upload']['name'];
$uploadtype = $_FILES['upload']['type'];
$uploaddesc = $_POST['desc'];
$uploaddata = file_get_contents($uploadfile);
// Creazione dell'url per caricare il file nel database
$url = $_SERVER['DOCUMENT_ROOT'] . '/file_download/' . $uploadname;
try {
copy($_FILES['upload']['tmp_name'], $url);
} catch (Exception $e) {
$error = 'Copia del file sul server non riuscita!';
include $_SERVER['DOCUMENT_ROOT'] . '/includes/error.html.php';
exit();
}
include 'db.inc.php';
try {
$sql = 'INSERT INTO filestore SET
filename = :filename,
mimetype = :mimetype,
description = :description,
url = :url';
$s = $pdo->prepare($sql);
$s->bindValue(':filename', $uploadname);
$s->bindValue(':mimetype', $uploadtype);
$s->bindValue(':description', $uploaddesc);
$s->bindValue(':url', $url);
$s->execute();
} catch (PDOException $e) {
$error = 'Database error storing file!';
include $_SERVER['DOCUMENT_ROOT'] . '/includes/error.html.php';
exit();
}
header('Location: .');
exit();
}
Più pratica in futuro...
se vuoi ti mando tutto il lavoro anche con il database
Più pratica in futuro...
arkus ho capito!
funzionano entrambi i codici, non perdere altro tempo... il problema non ci crederai ma è il maiuscolo!
se cambio .JPG in .jpg funziona!
per cui bisogna sostituire la variabile $uploadname, azz... ma a questo punto ho paura che tu avessi già intuito perché mi hai chiesto il codice di upload, ho indovinato?
comunque come si cambia l'estensione di un file?
Altra domanda: è formalmente corretto sostituire tutte le estensioni dei file in estensioni minuscole durante il download oppure si rischiano controindicazioni?Codice PHP:
$uploadfile = $_FILES['upload']['tmp_name'];
$uploadname = time() . $_SERVER['REMOTE_ADD'] . $_FILES['upload']['name'];
$spliturl = explode (".", $uploadname);
$file_extension = $spliturl[sizeof($spliturl)-1];
$file_extension_minuscolo = strtolower($file_extension);
...
???
Più pratica in futuro...
No scusa, ho detto un'altra cretinata... sono gli spazi a dare dei problemi!
Più pratica in futuro...
Ho trovato la soluzione, eccola:
Codice PHP:
$uploadname = str_replace(' ', '_', $uploadname);
Più pratica in futuro...