|
[ rajo88 @ 28.04.2009. 12:26 ] @
| Upload-ujem neku sliku u fajl, i to mi odradi OK, ali sada mi se javi problem kada hocu da procitam taj fajl. Naime, iako sam postavio hedere, meni i dalje browser to otvara kao binarni fajl, znaci samo one hiroglife... Evo i kod sa stanice koja treba da izvrsi to otvaranje...
Code:
<?php
# Make sure an ID was passed
if(isset($_GET['id']))
{
# Get the ID
$id = $_GET['id'];
# Make sure the ID is in fact a valid ID
if(!is_numeric($id) || ($id <= 0)) {
die("The ID is invalid!");
}
# Connect to the database
$dbLink = mysqli_connect("127.0.0.1", "user", "pwd", "dbName");
if(mysqli_connect_errno()) {
die("MySQL connection failed: ". mysqli_connect_error());
}
# Fetch the file information
$query = "
SELECT FileMime, FileName, FileSize, FileData
FROM fileStorage
WHERE FileID = {$id}";
$result = @mysqli_query($dbLink, $query)
or die("Error! Query failed: <pre>". mysqli_error($dbLink) ."</pre>");
# Make sure the result is valid
if(mysqli_num_rows($result) == 1)
{
# Get the row
$row = mysqli_fetch_assoc($result);
# Print headers
header("Content-Type: ". $row['FileMime']);
header("Content-Length: ". $row['FileSize']);
header("Content-Disposition: attachment; filename=". $row['FileName']);
# Print data
echo $row['FileData'];
}
else
{
echo "Error! No image exists with that ID.";
}
# Free the mysqli resources
@mysqli_free_result($result);
@mysqli_close($dbLink);
}
else
{
echo "Error! No ID was passed.";
}
?>
Inace je kod preuzet sa jednog tutorijala, svi se hvale da radi ok, kod mene nece ni u jednom browseru da radi kako treba... |
[ Nikola Poša @ 28.04.2009. 18:19 ] @
Daj da vidimo i kod za upis u bazu...
btw Ta druga dva header-a nisu neophodna, bar što se tiče ispisa slike...
[ rajo88 @ 28.04.2009. 20:38 ] @
Code:
<?php
# Check if a file has been uploaded
if(isset($_FILES['uploaded_file']))
{
# Make sure the file was sent without errors
if($_FILES['uploaded_file']['error'] == 0)
{
# Connect to the database
$dbLink = mysqli_connect("127.0.0.1", "user", "pwd", "dbName");
if(mysqli_connect_errno()) {
die("MySQL connection failed: ". mysqli_connect_error());
}
# Gather all required data
$name = mysqli_real_escape_string($dbLink, $_FILES['uploaded_file']['name']);
$mime = mysqli_real_escape_string($dbLink, $_FILES['uploaded_file']['type']);
$size = $_FILES['uploaded_file']['size'];
$data = mysqli_real_escape_string($dbLink, file_get_contents($_FILES ['uploaded_file']['tmp_name']));
# Create the SQL query
$query = "
INSERT INTO FileStorage (
FileName, FileMime, FileSize, FileData, Created
)
VALUES (
'{$name}', '{$mime}', {$size}, '{$data}', NOW()
)";
# Execute the query
$result = mysqli_query($dbLink, $query);
# Check if it was successfull
if($result)
{
echo "Success! Your file was successfully added!";
}
else
{
echo "Error! Failed to insert the file";
echo "<pre>". mysqli_error($dbLink) ."</pre>";
}
}
else
{
echo "Error!
An error accured while the file was being uploaded.
Error code: ". $_FILES['uploaded_file']['error'];
}
# Close the mysql connection
mysqli_close($dbLink);
}
else
{
echo "Error! A file was not sent!";
}
# Echo a link back to the mail page
echo '<p>Click <a href="index.html">here</a> to go back</p>';
?>
Sve to lepo upise u bazu, ali nikako da procitam kako treba....
[ Nikola Poša @ 28.04.2009. 21:32 ] @
A kog je tipa to polje FileData u bazi? Trebalo bi da bude BLOB... A i kako ti uopšte ispisuješ taj tvoj skript? Njega bi trebao da pozivaš ovako:
Code:
<img src = "ispis_slike.php?id=1" alt = "Slika" />
Ako ga pozivaš direktno u browser-u, naravno da će da ispiše samo "hieroglife". Taj kod generiše binarne podatke, i imaće efekta jedino ako ga pozoveš u src atributu slike.
btw Mnogo bolja varijanta je da u bazi čuvaš samo putanje do slika, ili samo ime i ekstenziju slike, a one bi fizički stajale u nekom folderu na tom serveru. Posle bi isto mogao dinamički da ih učitavaš, ali bi onda u upitu tražio tu putanju ili ime slike na osnovu id-a, a zatim bi samo generisao sliku: echo '<img src = "slike/' . $row['FileName'] . '" alt = "' . $row['FileName'] . '" />';.
[ rajo88 @ 28.04.2009. 22:33 ] @
Pa da, trenutno i drzim na serveru u folderu namenjenu slikama, ali posto se radi o vrlo delikatnim marketinskim slikama i filmovima, sigurnije je da se drzi u bazi, i poziva kada je potrebno....
Citat: Nikola Poša: A kog je tipa to polje FileData u bazi? Trebalo bi da bude BLOB... A i kako ti uopšte ispisuješ taj tvoj skript? Njega bi trebao da pozivaš ovako:
Code:
<img src = "ispis_slike.php?id=1" alt = "Slika" />
Ako ga pozivaš direktno u browser-u, naravno da će da ispiše samo "hieroglife". Taj kod generiše binarne podatke, i imaće efekta jedino ako ga pozoveš u src atributu slike.
Pa pozivao sam i tako, ali nije htelo... Probacu sutra ponovo... Ali cudi me da nece sa header-om da mi pusti download, kacio sam i word dokumenta i sve zivo, ali nista... Inace, u bazi je BLOB tip podataka....
[ rajo88 @ 29.04.2009. 23:12 ] @
Proradilo je sve, napokon, ali interesuje me zbog cega nece da mi upload-uje fajl veci od 1MB? Stavio sam tip podatka kao Longblob, nema hidden polja koje to onemogucuje, nema skripte da proverava velicinu fajla, ali opet nece... A trebalo bi da ubacim fajl oko 10MB. Da li moze da zeza localhost, da ima nesto da se prepodesi?
[ Tudfa @ 30.04.2009. 00:28 ] @
A kakvu grešku dobijaš ?
Ako je do php-a pogledaj šta ti stoji u upload_max_filesize
Mozda bi mogao ako nije do php-a da pogledas koliko je max_allowed_packet npr. pomoću :
Code: SHOW VARIABLES LIKE 'max_allowed_packet';
Ako ti tu stoji 1048576 (1MB) onda u konfiguracionom mysql fajlu(pošto si rekao da radiš u localhostu)
pod [mysqld] stavi max_allowed_packet na koliko ti odgovara i restartuj mysql server.
Sad sam pogledao kod sebe i meni tu stoji po defaultu tu 1M - sto je taj 1 megabajt...
[ rajo88 @ 30.04.2009. 18:28 ] @
To sam danas uradio, i video da je ograniceno na 1MB, medjutim dodao sam u konfiguraciji ovu liniju koda i postavio na 32MB, i sada kada mi prijavljuje dobro, ali mi sada nece fajlove preko 2MB da prihvati u bazu. Kada u phpMyadminu udje u polje namenjeno za smestanje, na neki vec ucitani fajl, on mi na kraju doda obavestenje da je zauzeto 1041 KB id 2048KB... Tip podataka mi je LONGBLOB...
[ Tudfa @ 30.04.2009. 23:24 ] @
Proveri čisto u php.ini post_max_size i memory_limit, jer i ti parametri učestvuju pri uploadu.
Kopiraj tu grešku koju dobiješ iz phpMyAdmin-a pa je postuj ovde.
[ nerminnp @ 16.05.2009. 20:13 ] @
Imam problem sa zamenom slike na server. Napravio sam da se izbrise slika i zatim snimi slika sa istim imenom. Slika se na serveru zameni, ali u browseru se prikazuje i dalje stara slika...
Molim nekog za pomoc
[ dakipro @ 16.05.2009. 20:28 ] @
<img src="putanja/slika.jpg?random=<?php echo(time()); ?>">
[ nerminnp @ 16.05.2009. 22:35 ] @
Citat: dakipro: <img src="putanja/slika.jpg?random=<?php echo(time()); ?>">
TO JE ONO STO SAM TRAZIO, HVALA PUNO !!!!
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|